From 638071bed4eec7922ccb2b19060a32c0f22362e2 Mon Sep 17 00:00:00 2001 From: kenlau666 <98103533+kenlau666@users.noreply.github.com> Date: Mon, 13 Apr 2026 13:38:12 +0800 Subject: [PATCH 1/2] Merge pull request #10 from deltadefi-protocol/fix/vault-rounding Fix/vault rounding --- lib/types.ak | 4 +- lib/withdraw_utils.ak | 32 +++---- plutus.json | 28 +++--- spec/0_vault_oracle/spend+mint.md | 6 +- spec/3_l1_withdrawal_intent/spend+mint.md | 6 +- spec/5_l2_withdrawal_intent/spend+mint.md | 19 ++-- .../l1_withdrawal_intent/spend_and_mint.ak | 10 +-- .../tests/deposit_utils/cal_shares_amount.ak | 48 ---------- .../tests/deposit_utils/combine_m_value.ak | 82 ----------------- .../deposit_utils/convert_m_value_to_usd.ak | 69 --------------- .../tests/l1_withdrawal_intent/burn_intent.ak | 20 ++--- validators/tests/utils.ak | 6 +- validators/tests/vault_oracle/mint.ak | 6 +- validators/tests/vault_oracle/spend.ak | 4 +- .../cal_per_user_operator_fee.ak | 61 ------------- .../withdraw_utils/check_output_value.ak | 88 ------------------- .../withdraw_utils/compute_fee_shares.ak | 50 ----------- .../withdraw_utils/convert_shares_to_usd.ak | 48 ---------- .../tests/withdraw_utils/process_batch.ak | 16 ++-- validators/vault_oracle/spend_mint.ak | 8 +- 20 files changed, 79 insertions(+), 532 deletions(-) delete mode 100644 validators/tests/deposit_utils/cal_shares_amount.ak delete mode 100644 validators/tests/deposit_utils/combine_m_value.ak delete mode 100644 validators/tests/deposit_utils/convert_m_value_to_usd.ak delete mode 100644 validators/tests/withdraw_utils/cal_per_user_operator_fee.ak delete mode 100644 validators/tests/withdraw_utils/check_output_value.ak delete mode 100644 validators/tests/withdraw_utils/compute_fee_shares.ak delete mode 100644 validators/tests/withdraw_utils/convert_shares_to_usd.ak diff --git a/lib/types.ak b/lib/types.ak index 60c1e49..50f5b48 100644 --- a/lib/types.ak +++ b/lib/types.ak @@ -26,8 +26,8 @@ pub type VaultOracleDatum { pluggable_logic: ByteArray, vault_stake_rotation_script_hash: ByteArray, operator_account: UserAccount, - operator_charge_percentage: Int, - operator_min_deposit_percentage: Int, + operator_fee_rate_bp: Int, + operator_min_deposit_rate_bp: Int, hydra_node_pub_keys: List, is_active: Bool, // State (mutable) diff --git a/lib/withdraw_utils.ak b/lib/withdraw_utils.ak index adfd96c..5a9dcd2 100644 --- a/lib/withdraw_utils.ak +++ b/lib/withdraw_utils.ak @@ -14,11 +14,6 @@ use types.{ WithdrawalIntentDatum, } -// Power of 10: returns 10^n -fn pow10(n: Int) -> Int { - math.pow(10, n) -} - pub type Scott6 = fn(a, b, c, d, e, f) -> result @@ -49,6 +44,11 @@ pub fn list_foldl6( } } +// Power of 10: returns 10^n +fn pow10(n: Int) -> Int { + math.pow(10, n) +} + pub fn convert_shares_to_usd( shares_amount: Int, total_shares: Int, @@ -57,28 +57,23 @@ pub fn convert_shares_to_usd( shares_amount * vault_equity / total_shares } -// Round UP: ceil(a * b / c) = (a * b + c - 1) / c -fn ceil_div(numerator: Int, denominator: Int) -> Int { - ( numerator + denominator - 1 ) / denominator -} - pub fn cal_per_user_operator_fee( withdrawal_value: Int, cost_basis: Int, - operator_charge_percentage: Int, + operator_fee_rate_bp: Int, ) -> Int { let profit = withdrawal_value - cost_basis if profit <= 0 { 0 } else { - // Round UP — fee never underpaid - ceil_div(profit * operator_charge_percentage, 100) + // Round DOWN — fee never overpaid + profit * operator_fee_rate_bp / 10000 } } pub fn compute_fee_shares(fee: Int, total_shares: Int, vault_equity: Int) -> Int { - // Round UP — protects operator - ceil_div(fee * total_shares, vault_equity) + // Round DOWN + fee * total_shares / vault_equity } // USD calculation: usd_value = Σ(amount * price / 10^scale) for each asset @@ -108,7 +103,7 @@ pub fn process_batched_withdrawal_intent_validation( mpf_actions: List, vault_equity: Int, total_shares: Int, - operator_charge_percentage: Int, + operator_fee_rate_bp: Int, prices: Pairs<(PolicyId, AssetName), (Int, Int)>, withdrawal_intent_script_hash: ScriptHash, initial_merkle_root: ByteArray, @@ -225,9 +220,10 @@ pub fn process_batched_withdrawal_intent_validation( cal_per_user_operator_fee( gross_value, cost_basis, - operator_charge_percentage, + operator_fee_rate_bp, ) - let fs = compute_fee_shares(fee, total_shares, vault_equity) + let fs = + compute_fee_shares(fee, total_shares, vault_equity) (fs, gross_value - fee) } diff --git a/plutus.json b/plutus.json index 7cea103..d7e6d38 100644 --- a/plutus.json +++ b/plutus.json @@ -93,8 +93,8 @@ } } ], - "compiledCode": "592ff9010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520c8018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc00660024466e0cc0e8cdc0001000800c8896600200514c103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444464653001001828ccc1ccdd3823998399ba700533073307402b4bd7052000a400148002900052000400444444444b30010078acc004dd6183d80344cc1e8dd40029983d1ba80043307a3750006660f46ea0008cc1e8dd40009983d183d983e183e00325eb822c83ca33001307b007983e003cc1f001a6eb0c1ec019222298009111114c00404a013006802c012007002800a0249bac307f0029bae307f308001002983f983e1baa307f307c375460e460f86ea8011222259800983d183f9baa0018acc004cdc79bae30830130800137540020db159800802c5a2646644b3001307c30820137540051332233063001132323322598009841009844009baa00189919191919192cc0056600266e1e60026eacc21404c23c04dd5006520009111192cc004c23404c24c04dd5000c4c8cdc000199b83337040086eb4c26004004cc0d92014375a6130026132020026eb0c25c04c25004dd5000c59092011981d8249984a809ba90043309501375200697ae040e000313375e612402611e026ea8c24804c23c04dd50061842809847809baa0068a504234051980099848809ba700d3309101374e612602024661220261240261260200897ae099b8001c00999b8001b00199b8001a375a612402005337000320075980099baf006044899b80018009880c211a02404d164234046eb4c24404c248040056600266ebc01010a26611e029810100003308f01375000c97ae089919848009ba8330243370400208a04266120026ea0cdc0803800a5eb80c96600266e2400520008a400113302433704002040906400a118023370200c002845808dd698478080099192cc004c21404006264646644b3001308a0130900137540051323304200115980099b8700c375a612a026124026ea8006266128026110026124026ea8004cc25004dd4acc004cdc7cc00402200900240b060860291330290080028b2120024bd7045909001184a009848809baa0028b211e02305000137586124020046eb8c24404c24804004c23404dd50014566002610e02003132323322598009845009848009baa002899198210008acc004cdc48061bad3095013092013754003132330950137500026612a026ea66002608802b009801c0166eccc23804cc25404dd419b81375a612c026126026ea8008034cc25404dd419b81375a6112026126026ea80080052f5c081612f5c066e0ccdc11bad30880130920137540020186eb4c25404c24804dd5000c5909001184a009848809baa0028b211e02305000137586124026126020046eb8c24404004c23404dd500145908b01211602308b013754002611c0201c6ecc004c23004c22404dd5000c590870119b833370400203407c6114020046eb4c22404c22804004c21404dd50009843009841809baa0023259800983e1841809baa00189843809842009baa0018b2104023086013087013087013083013754610c02610e026106026ea802e2c840808cc048178004c21404018dd6984180802a102028cc00403a01b00c805c02a012802107e46600201d00d806402e015009401083f041e460080081111991194c004006900040110011112cc00400626603a6602000a004009132332259800983500144c8ca6002015007800e6002011001983b80320109bae30763077002403c60046eb4c1d4004c1c4dd5001c56600260d6005132329800805401e0039800804400660ee00c804260ec60ee0048070c008dd6983a80098389baa00389919914c004dd7183b8014c01000660f000e9114c00403a017002cc0040320050014031307233079375066046006608a004660f26ea4cc06400c008cc1e4c1e8c1ec0152f5c0809060ec0026eb4c1d4004c1c4dd5001a0de41bc60dc6ea8004dc0181d8019838800a0de37280066e5000888888cc062600200b004981b801a01898009980a802981b801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc076600200b007801c00a002806001226603a00930013018005803c00e005001403083604444464b3001980099b87001375a60da60d46ea800a94294506844cc066600200d005981c002201a33225980099b88003480422b300133710004900844cc06e6002007005801400500924520b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", - "hash": "0531be88cc563221f6c3262bc152a58f4a2b40e4de44801a7d7238d9" + "compiledCode": "592fed010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520a09c018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc0066002444b30010028a60103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444646530010018284cc1c8dd3823198391ba700533072307302a4bd7052000a400148002900052000400444444444b30010078acc004dd6183d00344cc1e4dd40029983c9ba8004330793750006660f26ea0008cc1e4dd40009983c983d183d983d80325eb822c83c233001307a007983d803cc1ec01a6eb0c1e8019222298009111114c00404a013006802c012007002800a0249bac307e0029bae307e307f002983f183d9baa307e307b375460e260f66ea8011222259800983c983f1baa0018acc004cdc79bae308201307f37540020d9159800802c5a2646644b3001307b30810137540051332233062001132323322598009840809843809baa00189919191919192cc0056600266e1e60026eacc21004c23804dd5006520009111192cc004c23004c24804dd5000c4c8cdc000199b83337040086eb4c25c04004cc0d52014375a612e026130020026eb0c25804c24c04dd5000c59091011981d0241984a009ba90043309401375200697ae040dc00313375e612202611c026ea8c24404c23804dd50061842009847009baa0068a504230051980099848009ba700d3309001374e612402024661200261220261240200897ae099b8001c00999b8001b00199b8001a375a612202005337000320075980099baf006043899b80018009880c211802404d164230046eb4c24004c244040056600266ebc01010626611c0298010100003308e01375000c97ae089919847809ba83370666e08004110084cc23c04dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802845808cdc0803000a11402375a611c020026464b30013084010018991919912cc004c22404c23c04dd500144c8cc10400456600266e1c030dd6984a009848809baa001899849809843809848809baa00133093013752b30013371f3001008802400902b182100a44cc0a002000a2c8478092f5c116423c046126026120026ea800a2c847008c13c004dd61848808011bae309001309101001308c013754005159800984300800c4c8c8cc8966002611202611e026ea800a264660820022b3001337120186eb4c25004c24404dd5000c4c8cc25004dd40009984a009ba99800982180ac0260070059bb3308d013309401375066e04dd6984a809849009baa00200d3309401375066e04dd69844009849009baa0020014bd7020564bd7019b83337046eb4c21c04c24404dd50008061bad309401309101375400316423c046126026120026ea800a2c847008c13c004dd61848809849008011bae309001001308c01375400516422804845008c22804dd50009846808071bb3001308b0130880137540031642180466e0ccdc100080d01e9844808011bad3088013089010013084013754002610a026104026ea8008c96600260f66104026ea80062610c026106026ea80062c840808c21404c21804c21804c20804dd51842809843009841009baa00b8b2100023301205d001308401006375a61040200a84000a3300100e806c03201700a804a00841f519800807403601900b805402500420fa1078180200204446644653001001a40010044004444b300100189980e9980800280100244c8cc896600260d4005132329800805401e0039800804400660ee00c80426eb8c1d8c1dc00900f18011bad307500130713754007159800983580144c8ca6002015007800e6002011001983b8032010983b183b801201c3002375a60ea00260e26ea800e26466453001375c60ee0053004001983c003a445300100e805c00b300100c801400500c4c1c8cc1e4dd41981180198228011983c9ba93301900300233079307a307b0054bd702024183b0009bad307500130713754006837906f18371baa0013700607600660e20028378dca0019b9400222222330189800802c012606e006806260026602a00a606e0079800a400148102002b8c66002902052040800ae319800a41000348102002b8c66002906000d2040800ae30911112cc004cdc4802a401d13301d9800802c01e007002800a01800489980e8024c004c06001600f003801400500c20d811111192cc006600266e1c004dd6983698351baa002a50a5141a11330199800803401660700088068cc896600266e2000d20108acc004cdc40012402113301b9800801c016005001402491120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", + "hash": "366e56090c06acb981e03299028b214fdfaca5dbefaa8415d276848a" }, { "title": "l1_withdrawal_intent/spend_and_mint.l1_withdrawal_intent.mint", @@ -112,8 +112,8 @@ } } ], - "compiledCode": "592ff9010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520c8018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc00660024466e0cc0e8cdc0001000800c8896600200514c103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444464653001001828ccc1ccdd3823998399ba700533073307402b4bd7052000a400148002900052000400444444444b30010078acc004dd6183d80344cc1e8dd40029983d1ba80043307a3750006660f46ea0008cc1e8dd40009983d183d983e183e00325eb822c83ca33001307b007983e003cc1f001a6eb0c1ec019222298009111114c00404a013006802c012007002800a0249bac307f0029bae307f308001002983f983e1baa307f307c375460e460f86ea8011222259800983d183f9baa0018acc004cdc79bae30830130800137540020db159800802c5a2646644b3001307c30820137540051332233063001132323322598009841009844009baa00189919191919192cc0056600266e1e60026eacc21404c23c04dd5006520009111192cc004c23404c24c04dd5000c4c8cdc000199b83337040086eb4c26004004cc0d92014375a6130026132020026eb0c25c04c25004dd5000c59092011981d8249984a809ba90043309501375200697ae040e000313375e612402611e026ea8c24804c23c04dd50061842809847809baa0068a504234051980099848809ba700d3309101374e612602024661220261240261260200897ae099b8001c00999b8001b00199b8001a375a612402005337000320075980099baf006044899b80018009880c211a02404d164234046eb4c24404c248040056600266ebc01010a26611e029810100003308f01375000c97ae089919848009ba8330243370400208a04266120026ea0cdc0803800a5eb80c96600266e2400520008a400113302433704002040906400a118023370200c002845808dd698478080099192cc004c21404006264646644b3001308a0130900137540051323304200115980099b8700c375a612a026124026ea8006266128026110026124026ea8004cc25004dd4acc004cdc7cc00402200900240b060860291330290080028b2120024bd7045909001184a009848809baa0028b211e02305000137586124020046eb8c24404c24804004c23404dd50014566002610e02003132323322598009845009848009baa002899198210008acc004cdc48061bad3095013092013754003132330950137500026612a026ea66002608802b009801c0166eccc23804cc25404dd419b81375a612c026126026ea8008034cc25404dd419b81375a6112026126026ea80080052f5c081612f5c066e0ccdc11bad30880130920137540020186eb4c25404c24804dd5000c5909001184a009848809baa0028b211e02305000137586124026126020046eb8c24404004c23404dd500145908b01211602308b013754002611c0201c6ecc004c23004c22404dd5000c590870119b833370400203407c6114020046eb4c22404c22804004c21404dd50009843009841809baa0023259800983e1841809baa00189843809842009baa0018b2104023086013087013087013083013754610c02610e026106026ea802e2c840808cc048178004c21404018dd6984180802a102028cc00403a01b00c805c02a012802107e46600201d00d806402e015009401083f041e460080081111991194c004006900040110011112cc00400626603a6602000a004009132332259800983500144c8ca6002015007800e6002011001983b80320109bae30763077002403c60046eb4c1d4004c1c4dd5001c56600260d6005132329800805401e0039800804400660ee00c804260ec60ee0048070c008dd6983a80098389baa00389919914c004dd7183b8014c01000660f000e9114c00403a017002cc0040320050014031307233079375066046006608a004660f26ea4cc06400c008cc1e4c1e8c1ec0152f5c0809060ec0026eb4c1d4004c1c4dd5001a0de41bc60dc6ea8004dc0181d8019838800a0de37280066e5000888888cc062600200b004981b801a01898009980a802981b801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc076600200b007801c00a002806001226603a00930013018005803c00e005001403083604444464b3001980099b87001375a60da60d46ea800a94294506844cc066600200d005981c002201a33225980099b88003480422b300133710004900844cc06e6002007005801400500924520b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", - "hash": "0531be88cc563221f6c3262bc152a58f4a2b40e4de44801a7d7238d9" + "compiledCode": "592fed010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520a09c018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc0066002444b30010028a60103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444646530010018284cc1c8dd3823198391ba700533072307302a4bd7052000a400148002900052000400444444444b30010078acc004dd6183d00344cc1e4dd40029983c9ba8004330793750006660f26ea0008cc1e4dd40009983c983d183d983d80325eb822c83c233001307a007983d803cc1ec01a6eb0c1e8019222298009111114c00404a013006802c012007002800a0249bac307e0029bae307e307f002983f183d9baa307e307b375460e260f66ea8011222259800983c983f1baa0018acc004cdc79bae308201307f37540020d9159800802c5a2646644b3001307b30810137540051332233062001132323322598009840809843809baa00189919191919192cc0056600266e1e60026eacc21004c23804dd5006520009111192cc004c23004c24804dd5000c4c8cdc000199b83337040086eb4c25c04004cc0d52014375a612e026130020026eb0c25804c24c04dd5000c59091011981d0241984a009ba90043309401375200697ae040dc00313375e612202611c026ea8c24404c23804dd50061842009847009baa0068a504230051980099848009ba700d3309001374e612402024661200261220261240200897ae099b8001c00999b8001b00199b8001a375a612202005337000320075980099baf006043899b80018009880c211802404d164230046eb4c24004c244040056600266ebc01010626611c0298010100003308e01375000c97ae089919847809ba83370666e08004110084cc23c04dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802845808cdc0803000a11402375a611c020026464b30013084010018991919912cc004c22404c23c04dd500144c8cc10400456600266e1c030dd6984a009848809baa001899849809843809848809baa00133093013752b30013371f3001008802400902b182100a44cc0a002000a2c8478092f5c116423c046126026120026ea800a2c847008c13c004dd61848808011bae309001309101001308c013754005159800984300800c4c8c8cc8966002611202611e026ea800a264660820022b3001337120186eb4c25004c24404dd5000c4c8cc25004dd40009984a009ba99800982180ac0260070059bb3308d013309401375066e04dd6984a809849009baa00200d3309401375066e04dd69844009849009baa0020014bd7020564bd7019b83337046eb4c21c04c24404dd50008061bad309401309101375400316423c046126026120026ea800a2c847008c13c004dd61848809849008011bae309001001308c01375400516422804845008c22804dd50009846808071bb3001308b0130880137540031642180466e0ccdc100080d01e9844808011bad3088013089010013084013754002610a026104026ea8008c96600260f66104026ea80062610c026106026ea80062c840808c21404c21804c21804c20804dd51842809843009841009baa00b8b2100023301205d001308401006375a61040200a84000a3300100e806c03201700a804a00841f519800807403601900b805402500420fa1078180200204446644653001001a40010044004444b300100189980e9980800280100244c8cc896600260d4005132329800805401e0039800804400660ee00c80426eb8c1d8c1dc00900f18011bad307500130713754007159800983580144c8ca6002015007800e6002011001983b8032010983b183b801201c3002375a60ea00260e26ea800e26466453001375c60ee0053004001983c003a445300100e805c00b300100c801400500c4c1c8cc1e4dd41981180198228011983c9ba93301900300233079307a307b0054bd702024183b0009bad307500130713754006837906f18371baa0013700607600660e20028378dca0019b9400222222330189800802c012606e006806260026602a00a606e0079800a400148102002b8c66002902052040800ae319800a41000348102002b8c66002906000d2040800ae30911112cc004cdc4802a401d13301d9800802c01e007002800a01800489980e8024c004c06001600f003801400500c20d811111192cc006600266e1c004dd6983698351baa002a50a5141a11330199800803401660700088068cc896600266e2000d20108acc004cdc40012402113301b9800801c016005001402491120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", + "hash": "366e56090c06acb981e03299028b214fdfaca5dbefaa8415d276848a" }, { "title": "l1_withdrawal_intent/spend_and_mint.l1_withdrawal_intent.else", @@ -128,8 +128,8 @@ } } ], - "compiledCode": "592ff9010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520c8018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc00660024466e0cc0e8cdc0001000800c8896600200514c103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444464653001001828ccc1ccdd3823998399ba700533073307402b4bd7052000a400148002900052000400444444444b30010078acc004dd6183d80344cc1e8dd40029983d1ba80043307a3750006660f46ea0008cc1e8dd40009983d183d983e183e00325eb822c83ca33001307b007983e003cc1f001a6eb0c1ec019222298009111114c00404a013006802c012007002800a0249bac307f0029bae307f308001002983f983e1baa307f307c375460e460f86ea8011222259800983d183f9baa0018acc004cdc79bae30830130800137540020db159800802c5a2646644b3001307c30820137540051332233063001132323322598009841009844009baa00189919191919192cc0056600266e1e60026eacc21404c23c04dd5006520009111192cc004c23404c24c04dd5000c4c8cdc000199b83337040086eb4c26004004cc0d92014375a6130026132020026eb0c25c04c25004dd5000c59092011981d8249984a809ba90043309501375200697ae040e000313375e612402611e026ea8c24804c23c04dd50061842809847809baa0068a504234051980099848809ba700d3309101374e612602024661220261240261260200897ae099b8001c00999b8001b00199b8001a375a612402005337000320075980099baf006044899b80018009880c211a02404d164234046eb4c24404c248040056600266ebc01010a26611e029810100003308f01375000c97ae089919848009ba8330243370400208a04266120026ea0cdc0803800a5eb80c96600266e2400520008a400113302433704002040906400a118023370200c002845808dd698478080099192cc004c21404006264646644b3001308a0130900137540051323304200115980099b8700c375a612a026124026ea8006266128026110026124026ea8004cc25004dd4acc004cdc7cc00402200900240b060860291330290080028b2120024bd7045909001184a009848809baa0028b211e02305000137586124020046eb8c24404c24804004c23404dd50014566002610e02003132323322598009845009848009baa002899198210008acc004cdc48061bad3095013092013754003132330950137500026612a026ea66002608802b009801c0166eccc23804cc25404dd419b81375a612c026126026ea8008034cc25404dd419b81375a6112026126026ea80080052f5c081612f5c066e0ccdc11bad30880130920137540020186eb4c25404c24804dd5000c5909001184a009848809baa0028b211e02305000137586124026126020046eb8c24404004c23404dd500145908b01211602308b013754002611c0201c6ecc004c23004c22404dd5000c590870119b833370400203407c6114020046eb4c22404c22804004c21404dd50009843009841809baa0023259800983e1841809baa00189843809842009baa0018b2104023086013087013087013083013754610c02610e026106026ea802e2c840808cc048178004c21404018dd6984180802a102028cc00403a01b00c805c02a012802107e46600201d00d806402e015009401083f041e460080081111991194c004006900040110011112cc00400626603a6602000a004009132332259800983500144c8ca6002015007800e6002011001983b80320109bae30763077002403c60046eb4c1d4004c1c4dd5001c56600260d6005132329800805401e0039800804400660ee00c804260ec60ee0048070c008dd6983a80098389baa00389919914c004dd7183b8014c01000660f000e9114c00403a017002cc0040320050014031307233079375066046006608a004660f26ea4cc06400c008cc1e4c1e8c1ec0152f5c0809060ec0026eb4c1d4004c1c4dd5001a0de41bc60dc6ea8004dc0181d8019838800a0de37280066e5000888888cc062600200b004981b801a01898009980a802981b801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc076600200b007801c00a002806001226603a00930013018005803c00e005001403083604444464b3001980099b87001375a60da60d46ea800a94294506844cc066600200d005981c002201a33225980099b88003480422b300133710004900844cc06e6002007005801400500924520b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", - "hash": "0531be88cc563221f6c3262bc152a58f4a2b40e4de44801a7d7238d9" + "compiledCode": "592fed010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520a09c018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc0066002444b30010028a60103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444646530010018284cc1c8dd3823198391ba700533072307302a4bd7052000a400148002900052000400444444444b30010078acc004dd6183d00344cc1e4dd40029983c9ba8004330793750006660f26ea0008cc1e4dd40009983c983d183d983d80325eb822c83c233001307a007983d803cc1ec01a6eb0c1e8019222298009111114c00404a013006802c012007002800a0249bac307e0029bae307e307f002983f183d9baa307e307b375460e260f66ea8011222259800983c983f1baa0018acc004cdc79bae308201307f37540020d9159800802c5a2646644b3001307b30810137540051332233062001132323322598009840809843809baa00189919191919192cc0056600266e1e60026eacc21004c23804dd5006520009111192cc004c23004c24804dd5000c4c8cdc000199b83337040086eb4c25c04004cc0d52014375a612e026130020026eb0c25804c24c04dd5000c59091011981d0241984a009ba90043309401375200697ae040dc00313375e612202611c026ea8c24404c23804dd50061842009847009baa0068a504230051980099848009ba700d3309001374e612402024661200261220261240200897ae099b8001c00999b8001b00199b8001a375a612202005337000320075980099baf006043899b80018009880c211802404d164230046eb4c24004c244040056600266ebc01010626611c0298010100003308e01375000c97ae089919847809ba83370666e08004110084cc23c04dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802845808cdc0803000a11402375a611c020026464b30013084010018991919912cc004c22404c23c04dd500144c8cc10400456600266e1c030dd6984a009848809baa001899849809843809848809baa00133093013752b30013371f3001008802400902b182100a44cc0a002000a2c8478092f5c116423c046126026120026ea800a2c847008c13c004dd61848808011bae309001309101001308c013754005159800984300800c4c8c8cc8966002611202611e026ea800a264660820022b3001337120186eb4c25004c24404dd5000c4c8cc25004dd40009984a009ba99800982180ac0260070059bb3308d013309401375066e04dd6984a809849009baa00200d3309401375066e04dd69844009849009baa0020014bd7020564bd7019b83337046eb4c21c04c24404dd50008061bad309401309101375400316423c046126026120026ea800a2c847008c13c004dd61848809849008011bae309001001308c01375400516422804845008c22804dd50009846808071bb3001308b0130880137540031642180466e0ccdc100080d01e9844808011bad3088013089010013084013754002610a026104026ea8008c96600260f66104026ea80062610c026106026ea80062c840808c21404c21804c21804c20804dd51842809843009841009baa00b8b2100023301205d001308401006375a61040200a84000a3300100e806c03201700a804a00841f519800807403601900b805402500420fa1078180200204446644653001001a40010044004444b300100189980e9980800280100244c8cc896600260d4005132329800805401e0039800804400660ee00c80426eb8c1d8c1dc00900f18011bad307500130713754007159800983580144c8ca6002015007800e6002011001983b8032010983b183b801201c3002375a60ea00260e26ea800e26466453001375c60ee0053004001983c003a445300100e805c00b300100c801400500c4c1c8cc1e4dd41981180198228011983c9ba93301900300233079307a307b0054bd702024183b0009bad307500130713754006837906f18371baa0013700607600660e20028378dca0019b9400222222330189800802c012606e006806260026602a00a606e0079800a400148102002b8c66002902052040800ae319800a41000348102002b8c66002906000d2040800ae30911112cc004cdc4802a401d13301d9800802c01e007002800a01800489980e8024c004c06001600f003801400500c20d811111192cc006600266e1c004dd6983698351baa002a50a5141a11330199800803401660700088068cc896600266e2000d20108acc004cdc40012402113301b9800801c016005001402491120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", + "hash": "366e56090c06acb981e03299028b214fdfaca5dbefaa8415d276848a" }, { "title": "l2_deposit_intent/spend_and_mint.l2_deposit_intent.spend", @@ -429,8 +429,8 @@ } } ], - "compiledCode": "592f460101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd5002241900314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", - "hash": "be270565b935f86fef51979f389cbcb29f106821672ad3d31b8bceab" + "compiledCode": "592f470101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd500224141380314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", + "hash": "3cb4b9140766c7c65d23277b7f31362e3e41b09462a692004c49ac91" }, { "title": "vault_oracle/spend_mint.vault_oracle.mint", @@ -454,8 +454,8 @@ } } ], - "compiledCode": "592f460101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd5002241900314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", - "hash": "be270565b935f86fef51979f389cbcb29f106821672ad3d31b8bceab" + "compiledCode": "592f470101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd500224141380314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", + "hash": "3cb4b9140766c7c65d23277b7f31362e3e41b09462a692004c49ac91" }, { "title": "vault_oracle/spend_mint.vault_oracle.else", @@ -476,8 +476,8 @@ } } ], - "compiledCode": "592f460101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd5002241900314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", - "hash": "be270565b935f86fef51979f389cbcb29f106821672ad3d31b8bceab" + "compiledCode": "592f470101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd500224141380314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", + "hash": "3cb4b9140766c7c65d23277b7f31362e3e41b09462a692004c49ac91" } ], "definitions": { @@ -999,11 +999,11 @@ "$ref": "#/definitions/hydra_dex~1types~1UserAccount" }, { - "title": "operator_charge_percentage", + "title": "operator_fee_rate_bp", "$ref": "#/definitions/Int" }, { - "title": "operator_min_deposit_percentage", + "title": "operator_min_deposit_rate_bp", "$ref": "#/definitions/Int" }, { diff --git a/spec/0_vault_oracle/spend+mint.md b/spec/0_vault_oracle/spend+mint.md index ea16bad..2eed5ab 100644 --- a/spec/0_vault_oracle/spend+mint.md +++ b/spec/0_vault_oracle/spend+mint.md @@ -20,8 +20,8 @@ The Vault Oracle UTxO holds config and shares state. This is the only UTxO commi - `hydra_node_pub_keys`: List\ - `pluggable_logic`: ByteArray - `operator_account`: UserAccount (contains Account with master_key, operation_key, account_id) -- `operator_charge_percentage`: Int -- `operator_min_deposit_percentage`: Int +- `operator_fee_rate_bp`: Int +- `operator_min_deposit_rate_bp`: Int - `is_active`: Bool - whether the vault accepts new deposits ### State (mutable) @@ -110,7 +110,7 @@ The mint policy is a simple one-time minting policy (similar to `app_oracle/orac - **Signed by all `hydra_node_pub_keys`** - All config fields can be modified - Constraints: - - `operator_charge_percentage` must be >= 0 and <= 100 + - `operator_fee_rate_bp` must be >= 0 and <= 10000 - `hydra_node_pub_keys` must match `app_oracle` signers (if `app_oracle` changed) - State fields unchanged diff --git a/spec/3_l1_withdrawal_intent/spend+mint.md b/spec/3_l1_withdrawal_intent/spend+mint.md index 2162a86..d7fab55 100644 --- a/spec/3_l1_withdrawal_intent/spend+mint.md +++ b/spec/3_l1_withdrawal_intent/spend+mint.md @@ -45,8 +45,8 @@ L1 withdrawal intents allow users to withdraw funds from the Trust Me Bro vault - Note: `to` value is computed from updated shares + total_deposited, not passed in redeemer - Fee calculation (skipped if withdrawer is operator): - If `withdrawer == operator_account`: `fee = 0`, `fee_shares = 0` (economically neutral) - - Otherwise: `fee = max(0, (gross_value - cost_basis) * operator_charge_percentage / 100)` (round UP) - - Fee shares: `fee_shares = fee * total_shares / vault_equity` (round UP, or 0 if operator) + - Otherwise: `fee = max(0, (gross_value - cost_basis) * operator_fee_rate_bp / 10000)` (round DOWN) + - Fee shares: `fee_shares = fee * total_shares / vault_equity` (round DOWN, or 0 if operator) - Net payout: `net_payout = gross_value - fee` (full gross_value if operator) - After all withdrawals, apply operator fee share action if `total_fee_shares > 0` - Verify `computed_final_root == expected_final_root` @@ -68,7 +68,7 @@ Vault's account balance (HydraWithdrawal) → Vault → User 1. `shares_to_redeem > 0` AND `shares_to_redeem <= user_shares_balance` (from merkle proof) 2. `share_price` computed from current `vault_equity / total_shares` 3. `gross_profit = max(0, gross_value - cost_basis)` (never negative) -4. `fee = gross_profit * operator_charge_percentage / 100` (round UP) +4. `fee = gross_profit * operator_fee_rate_bp / 10000` (round DOWN) 5. `fee_shares` correctly computed and added to operator merkle record 6. `net_payout = gross_value - fee` actually sent to user 7. Sufficient value in vault to cover net_payout diff --git a/spec/5_l2_withdrawal_intent/spend+mint.md b/spec/5_l2_withdrawal_intent/spend+mint.md index 5e5fc17..d9a1de0 100644 --- a/spec/5_l2_withdrawal_intent/spend+mint.md +++ b/spec/5_l2_withdrawal_intent/spend+mint.md @@ -57,17 +57,20 @@ ProcessVaultWithdrawal( The main withdrawal logic is handled in the hydra_account withdrawal script: **Inputs:** + - Vault Oracle (with `vault_oracle_nft`) - L2 Withdrawal Intent (single intent, no batching) - Vault's Account UTxO - Withdrawer's Account UTxO **Outputs:** + - Vault Oracle (updated) - Vault's Account UTxO (balance decreased) - Withdrawer's Account UTxO (balance increased) **Validation:** + 1. **Signed by `operation_key` from `app_oracle` OR `operator_account.account.master_key` from vault oracle** 2. **NO withdrawer signature required** (user already signed at MintIntent) 3. Verify `prices` message using `hydra_node_pub_keys` from Oracle datum @@ -78,8 +81,8 @@ The main withdrawal logic is handled in the hydra_account withdrawal script: - `cost_basis` from merkle proof - Fee calculation (skipped if withdrawer is operator): - If `withdrawer == operator_account`: `fee = 0`, `fee_shares = 0` (economically neutral) - - Otherwise: `fee = max(0, (gross_value - cost_basis) * operator_charge_percentage / 100)` (round UP) - - `fee_shares = fee * total_shares / vault_equity` (round UP, or 0 if operator) + - Otherwise: `fee = max(0, (gross_value - cost_basis) * operator_fee_rate_bp / 10000)` (round DOWN) + - `fee_shares = fee * total_shares / vault_equity` (round DOWN, or 0 if operator) - `net_payout = gross_value - fee` (full gross_value if operator) 5. Update Vault Oracle datum: - `total_shares = total_shares - shares_to_redeem + fee_shares` @@ -104,18 +107,18 @@ Vault's Account UTxO → (ProcessVaultWithdrawal) → User's Account UTxO ## Signing Summary -| Action | Signed By | -|--------|-----------| -| MintIntent | **User** (withdrawer.master_key) | -| BurnIntent | `operation_key` OR `operator_account.account.master_key` (via ProcessVaultWithdrawal) | -| CancelIntent | `operation_key` | +| Action | Signed By | +| ------------ | ------------------------------------------------------------------------------------- | +| MintIntent | **User** (withdrawer.master_key) | +| BurnIntent | `operation_key` OR `operator_account.account.master_key` (via ProcessVaultWithdrawal) | +| CancelIntent | `operation_key` | ## Validation Rules (ref: vault-spec 4.6) 1. `shares_to_redeem > 0` AND `shares_to_redeem <= user_shares_balance` (from merkle proof) 2. `share_price` computed from current `vault_equity / total_shares` 3. `gross_profit = max(0, gross_value - cost_basis)` (never negative) -4. `fee = gross_profit * operator_charge_percentage / 100` (round UP) +4. `fee = gross_profit * operator_fee_rate_bp / 10000` (round DOWN) 5. `fee_shares` correctly computed and added to operator merkle record 6. `net_payout = gross_value - fee` transferred to user's Account 7. Sufficient balance in vault's Account to cover net_payout diff --git a/validators/l1_withdrawal_intent/spend_and_mint.ak b/validators/l1_withdrawal_intent/spend_and_mint.ak index c7323e0..a56bd3a 100644 --- a/validators/l1_withdrawal_intent/spend_and_mint.ak +++ b/validators/l1_withdrawal_intent/spend_and_mint.ak @@ -86,8 +86,8 @@ validator l1_withdrawal_intent(vault_oracle_nft: PolicyId) { total_shares, total_deposited, operator_shares, - operator_charge_percentage, - operator_min_deposit_percentage, + operator_fee_rate_bp, + operator_min_deposit_rate_bp, operator_account, shares_merkle_root, vault_script_hash, @@ -124,7 +124,7 @@ validator l1_withdrawal_intent(vault_oracle_nft: PolicyId) { user_mpf_actions, vault_equity, total_shares, - operator_charge_percentage, + operator_fee_rate_bp, prices, policy_id, shares_merkle_root, @@ -187,11 +187,11 @@ validator l1_withdrawal_intent(vault_oracle_nft: PolicyId) { } // 8. Verify operator maintains minimum deposit percentage when withdrawing - // Check: new_operator_shares * 100 >= new_total_shares * operator_min_deposit_percentage + // Check: new_operator_shares * 10000 >= new_total_shares * operator_min_deposit_rate_bp // Only enforced when operator is withdrawing (operator_shares_withdrawn > 0) let operator_min_deposit_check = if operator_shares_withdrawn > 0 { - new_operator_shares * 100 >= new_total_shares * operator_min_deposit_percentage + new_operator_shares * 10000 >= new_total_shares * operator_min_deposit_rate_bp } else { True } diff --git a/validators/tests/deposit_utils/cal_shares_amount.ak b/validators/tests/deposit_utils/cal_shares_amount.ak deleted file mode 100644 index 0699718..0000000 --- a/validators/tests/deposit_utils/cal_shares_amount.ak +++ /dev/null @@ -1,48 +0,0 @@ -use deposit_utils.{cal_shares_amount} - -// ========== cal_shares_amount tests ========== -// Formula: shares = usd_value * total_shares / vault_equity - -// Basic calculation: 1000 USD with vault_equity=2000, total_shares=1000 → 500 shares -test du_cal_shares_amount_basic() { - cal_shares_amount(1000, 2000, 1000) == 500 -} - -// Equal values: 1000 USD with vault_equity=1000, total_shares=1000 → 1000 shares -test du_cal_shares_amount_equal() { - cal_shares_amount(1000, 1000, 1000) == 1000 -} - -// Larger vault: 1000 USD with vault_equity=10000, total_shares=1000 → 100 shares -test du_cal_shares_amount_larger_vault() { - cal_shares_amount(1000, 10000, 1000) == 100 -} - -// Larger total_shares: 1000 USD with vault_equity=1000, total_shares=10000 → 10000 shares -test du_cal_shares_amount_more_shares() { - cal_shares_amount(1000, 1000, 10000) == 10000 -} - -// Round down: 100 USD with vault_equity=300, total_shares=100 → 33 shares (100*100/300 = 33.33...) -test du_cal_shares_amount_round_down() { - cal_shares_amount(100, 300, 100) == 33 -} - -// Zero USD value: 0 USD → 0 shares -test du_cal_shares_amount_zero_usd() { - cal_shares_amount(0, 1000, 1000) == 0 -} - -// Fail when total_shares is zero -test du_cal_shares_amount_fail_zero_total_shares() fail { - cal_shares_amount(1000, 1000, 0) == 0 -} - -// Real-world example using mock values: -// vault_equity = 2400000000 (2400 USD with 6 decimals) -// total_shares = 3000000000000000 -// deposit_usd = 3000000 (3 USD with 6 decimals) -// expected = 3000000 * 3000000000000000 / 2400000000 = 3750000000000 -test du_cal_shares_amount_real_world() { - cal_shares_amount(3000000, 2400000000, 3000000000000000) == 3750000000000 -} diff --git a/validators/tests/deposit_utils/combine_m_value.ak b/validators/tests/deposit_utils/combine_m_value.ak deleted file mode 100644 index a099540..0000000 --- a/validators/tests/deposit_utils/combine_m_value.ak +++ /dev/null @@ -1,82 +0,0 @@ -use deposit_utils.{combine_m_value} -use types.{MValue} - -const m_value_a = - [ - Pair("", [Pair("", 100)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 100)], - ), - ] - -const m_value_b = - [ - Pair("", [Pair("", 200)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 200)], - ), - ] - -const m_value_a_and_b = - [ - Pair("", [Pair("", 300)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 300)], - ), - ] - -const m_value_a_and_b_wrong = - [ - Pair("", [Pair("", 300)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 301)], - ), - ] - -const m_value_c = - [ - Pair("", [Pair("", 300)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair("", 300), Pair(#"5553444d", 300)], - ), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c999", - [Pair(#"5553444d", 300)], - ), - ] - -const m_value_a_and_b_and_c = - [ - Pair("", [Pair("", 600)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair("", 300), Pair(#"5553444d", 600)], - ), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c999", - [Pair(#"5553444d", 300)], - ), - ] - -const empty_m_value: MValue = [] - -test du_combine_m_value_a_and_b() { - combine_m_value(m_value_a, m_value_b) == m_value_a_and_b -} - -test du_combine_m_value_a_and_b_wrong() { - combine_m_value(m_value_a, m_value_b) != m_value_a_and_b_wrong -} - -test du_combine_m_value_a_and_b_and_c() { - (combine_m_value(m_value_a_and_b, m_value_c) == m_value_a_and_b_and_c)? -} - -test du_combine_m_value_empty_and_a() { - combine_m_value(empty_m_value, m_value_a) == m_value_a -} diff --git a/validators/tests/deposit_utils/convert_m_value_to_usd.ak b/validators/tests/deposit_utils/convert_m_value_to_usd.ak deleted file mode 100644 index dbfe3c1..0000000 --- a/validators/tests/deposit_utils/convert_m_value_to_usd.ak +++ /dev/null @@ -1,69 +0,0 @@ -use cardano/assets.{AssetName, PolicyId} -use price_oracle_utils.{convert_m_value_to_usd} -use types.{MValue} - -// prices: (price, scale) tuple - USD = amount * price / 10^scale -const prices: Pairs<(PolicyId, AssetName), (Int, Int)> = - [ - Pair((#"", #""), (2, 0)), - Pair( - (#"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", #"5553444d"), - (1, 0), - ), - ] - -const empty_m_value: MValue = [] - -const m_value_a = - [ - Pair("", [Pair("", 100)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 100)], - ), - ] - -const m_value_b = - [ - Pair("", [Pair("", 200)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 200)], - ), - ] - -const m_value_c = - [ - Pair("", [Pair("", 300)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair("", 300), Pair(#"5553444d", 300)], - ), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c999", - [Pair(#"5553444d", 300)], - ), - ] - -// m_value_a: 100 * 2 / 10^0 (ADA) + 100 * 1 / 10^0 (USDM) = 300 -const m_value_a_in_usd = 300 - -// m_value_b: 200 * 2 / 10^0 (ADA) + 200 * 1 / 10^0 (USDM) = 600 -const m_value_b_in_usd = 600 - -test du_convert_m_value_to_usd_a() { - convert_m_value_to_usd(m_value_a, prices) == m_value_a_in_usd -} - -test du_convert_m_value_to_usd_b() { - convert_m_value_to_usd(m_value_b, prices) == m_value_b_in_usd -} - -test du_convert_m_value_to_usd_empty() { - convert_m_value_to_usd(empty_m_value, prices) == 0 -} - -// m_value_c has an asset with no price - should fail -test du_convert_m_value_to_usd_fail_no_price() fail { - convert_m_value_to_usd(m_value_c, prices) == 0 -} diff --git a/validators/tests/l1_withdrawal_intent/burn_intent.ak b/validators/tests/l1_withdrawal_intent/burn_intent.ak index a14f688..8904732 100644 --- a/validators/tests/l1_withdrawal_intent/burn_intent.ak +++ b/validators/tests/l1_withdrawal_intent/burn_intent.ak @@ -49,7 +49,7 @@ use withdraw_utils.{convert_shares_to_usd} // = 1_250_000_000_000_000 * 2_400_000_000 / 3_000_000_000_000_000 // = 1_000_000_000 USD // - cost_basis = 1_000_000_000 (no profit, so fee = 0) -// - With operator_charge_percentage = 0, fee = 0 anyway +// - With operator_fee_rate_bp = 0, fee = 0 anyway // - user_receives = gross_value = 1_000_000_000 USD // - In ADA (price=2): 500_000_000 ADA @@ -73,7 +73,7 @@ fn computed_gross_value() -> Int { } fn computed_user_receives() -> Int { - // fee = 0 since operator_charge_percentage = 0 + // fee = 0 since operator_fee_rate_bp = 0 computed_gross_value() } @@ -102,7 +102,7 @@ fn build_vault_oracle_output_datum( is_correct: Bool, ) -> VaultOracleDatum { if is_correct { - // With operator_charge_percentage = 0, fee = 0 and fee_shares = 0 + // With operator_fee_rate_bp = 0, fee = 0 and fee_shares = 0 // Withdrawer is non-operator, so operator_shares_withdrawn = 0 // operator_shares = operator_shares - operator_shares_withdrawn + fee_shares // = 0 - 0 + 0 = 0 @@ -454,10 +454,10 @@ test s3_mint_burn_intent_fail_not_authorized() { // ========== Operator Min Deposit Percentage Tests ========== // These tests verify that when the operator withdraws, they must maintain -// at least operator_min_deposit_percentage of total_shares. +// at least operator_min_deposit_rate_bp of total_shares. // // Test scenario: -// - operator_min_deposit_percentage = 10 (from mock_vault_oracle_datum) +// - operator_min_deposit_rate_bp = 10 (from mock_vault_oracle_datum) // - Operator is the withdrawer (uses mock_operator_account) // - Test values chosen to produce integer results with mock_vault_equity/prices // @@ -523,7 +523,7 @@ fn build_operator_vault_oracle_output_datum( // After withdrawal: // - total_shares decreases by shares_to_redeem // - operator_shares decreases by shares_to_redeem (operator is withdrawing) - // - No fee since operator_charge_percentage = 0 + // - No fee since operator_fee_rate_bp = 0 let new_total_shares = operator_test_total_shares - operator_shares_to_redeem let new_operator_shares = operator_shares - operator_shares_to_redeem @@ -584,13 +584,7 @@ fn mock_operator_burn_intent_tx(operator_shares: Int) -> Transaction { mock_pub_key_address(99, None), ) // Vault Oracle input - |> tx_in( - True, - mock_tx_hash(10), - 0, - vault_oracle_input_value, - vault_address, - ) + |> tx_in(True, mock_tx_hash(10), 0, vault_oracle_input_value, vault_address) |> tx_in_inline_datum( True, build_operator_vault_oracle_input_datum(operator_shares), diff --git a/validators/tests/utils.ak b/validators/tests/utils.ak index 8140a7f..4008505 100644 --- a/validators/tests/utils.ak +++ b/validators/tests/utils.ak @@ -194,7 +194,7 @@ pub const mock_total_deposited = 2000000000 pub const mock_operator_shares = 0 -pub const mock_operator_charge_percentage = 0 +pub const mock_operator_fee_rate_bp = 0 // ========== USDM constants ========== @@ -239,8 +239,8 @@ pub const mock_vault_oracle_datum: VaultOracleDatum = pluggable_logic: mock_pluggable_logic, vault_stake_rotation_script_hash: mock_vault_stake_rotation_script_hash, operator_account: mock_operator_account, - operator_charge_percentage: mock_operator_charge_percentage, - operator_min_deposit_percentage: 10, + operator_fee_rate_bp: mock_operator_fee_rate_bp, + operator_min_deposit_rate_bp: 10, hydra_node_pub_keys: mock_node_pub_keys, is_active: True, total_shares: mock_total_shares, diff --git a/validators/tests/vault_oracle/mint.ak b/validators/tests/vault_oracle/mint.ak index 6769dff..6ff2632 100644 --- a/validators/tests/vault_oracle/mint.ak +++ b/validators/tests/vault_oracle/mint.ak @@ -105,7 +105,7 @@ fn mock_mint_vault_datum(test_case: MintVaultTestCase) -> VaultOracleDatum { 100 } - let operator_charge_percentage = + let operator_fee_rate_bp = if is_charge_percentage_valid { 10 } else { @@ -138,8 +138,8 @@ fn mock_mint_vault_datum(test_case: MintVaultTestCase) -> VaultOracleDatum { pluggable_logic: mock_pluggable_logic, vault_stake_rotation_script_hash: mock_vault_stake_rotation_script_hash, operator_account: mock_operator_account, - operator_charge_percentage, - operator_min_deposit_percentage: 10, + operator_fee_rate_bp, + operator_min_deposit_rate_bp: 10, hydra_node_pub_keys, is_active: True, total_shares, diff --git a/validators/tests/vault_oracle/spend.ak b/validators/tests/vault_oracle/spend.ak index 212794a..be2ca94 100644 --- a/validators/tests/vault_oracle/spend.ak +++ b/validators/tests/vault_oracle/spend.ak @@ -708,7 +708,7 @@ fn mock_update_config_output_datum( mock_vault_oracle_datum.total_fee_share_collected + 1 } - let operator_charge_percentage = + let operator_fee_rate_bp = if is_charge_percentage_valid { 50 } else { @@ -722,7 +722,7 @@ fn mock_update_config_output_datum( total_deposited: total_deposited, shares_merkle_root: shares_merkle_root, total_fee_share_collected: total_fee_share_collected, - operator_charge_percentage: operator_charge_percentage, + operator_fee_rate_bp: operator_fee_rate_bp, } } diff --git a/validators/tests/withdraw_utils/cal_per_user_operator_fee.ak b/validators/tests/withdraw_utils/cal_per_user_operator_fee.ak deleted file mode 100644 index 1b15115..0000000 --- a/validators/tests/withdraw_utils/cal_per_user_operator_fee.ak +++ /dev/null @@ -1,61 +0,0 @@ -use withdraw_utils.{cal_per_user_operator_fee} - -// ========== cal_per_user_operator_fee tests ========== -// Formula: if profit > 0, fee = ceil(profit * operator_charge_percentage / 100) -// profit = withdrawal_value - cost_basis - -// Basic profit case: withdrawal=1000, cost=800, charge=10% → profit=200, fee=20 -test wu_cal_per_user_operator_fee_basic_profit() { - cal_per_user_operator_fee(1000, 800, 10) == 20 -} - -// No profit (break even): withdrawal=1000, cost=1000 → profit=0, fee=0 -test wu_cal_per_user_operator_fee_no_profit() { - cal_per_user_operator_fee(1000, 1000, 10) == 0 -} - -// Loss case: withdrawal=800, cost=1000 → profit=-200, fee=0 -test wu_cal_per_user_operator_fee_loss() { - cal_per_user_operator_fee(800, 1000, 10) == 0 -} - -// Round up: withdrawal=1003, cost=1000, charge=10% → profit=3, fee=ceil(0.3)=1 -test wu_cal_per_user_operator_fee_round_up() { - cal_per_user_operator_fee(1003, 1000, 10) == 1 -} - -// Exact division: withdrawal=1100, cost=1000, charge=10% → profit=100, fee=10 -test wu_cal_per_user_operator_fee_exact() { - cal_per_user_operator_fee(1100, 1000, 10) == 10 -} - -// Higher charge percentage: 20% -test wu_cal_per_user_operator_fee_higher_percentage() { - cal_per_user_operator_fee(1000, 800, 20) == 40 -} - -// Zero charge percentage: fee always 0 -test wu_cal_per_user_operator_fee_zero_percentage() { - cal_per_user_operator_fee(1000, 500, 0) == 0 -} - -// 100% charge: all profit goes to operator -test wu_cal_per_user_operator_fee_full_charge() { - cal_per_user_operator_fee(1000, 800, 100) == 200 -} - -// Real-world example: -// withdrawal_value = 1000000 (1 USD with 6 decimals) -// cost_basis = 800000 (0.8 USD) -// charge = 10% -// profit = 200000, fee = ceil(200000 * 10 / 100) = 20000 -test wu_cal_per_user_operator_fee_real_world() { - cal_per_user_operator_fee(1000000, 800000, 10) == 20000 -} - -// Large profit with rounding: -// withdrawal = 1234567, cost = 1000000, charge = 15% -// profit = 234567, fee = ceil(234567 * 15 / 100) = ceil(35185.05) = 35186 -test wu_cal_per_user_operator_fee_large_profit_round_up() { - cal_per_user_operator_fee(1234567, 1000000, 15) == 35186 -} diff --git a/validators/tests/withdraw_utils/check_output_value.ak b/validators/tests/withdraw_utils/check_output_value.ak deleted file mode 100644 index 67d3172..0000000 --- a/validators/tests/withdraw_utils/check_output_value.ak +++ /dev/null @@ -1,88 +0,0 @@ -use cardano/assets.{AssetName, PolicyId, add, from_asset} -use withdraw_utils.{check_output_value_equal_to_shares_usd_value} - -const usdm_policy = #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913" - -const usdm_name = #"5553444d" - -// prices: (price, scale) tuple - USD = amount * price / 10^scale -const prices: Pairs<(PolicyId, AssetName), (Int, Int)> = - [Pair((#"", #""), (2, 0)), Pair((usdm_policy, usdm_name), (1, 0))] - -// ========== check_output_value_equal_to_shares_usd_value tests ========== - -// Output value: 1000000 USDM (price=1, scale=0) + 2000000 ADA (price=2, scale=0) -// USD value = 1000000 * 1 / 10^0 + 2000000 * 2 / 10^0 = 5000000 -const output_value_a = - from_asset(usdm_policy, usdm_name, 1000000) - |> add(#"", #"", 2000000) - -const shares_usd_value_a = 5000000 - -test wu_check_output_value_mixed_a() { - check_output_value_equal_to_shares_usd_value( - output_value_a, - shares_usd_value_a, - prices, - ) -} - -// Output value: 2000000 USDM (price=1, scale=0) + 1000000 ADA (price=2, scale=0) -// USD value = 2000000 * 1 / 10^0 + 1000000 * 2 / 10^0 = 4000000 -const output_value_b = - from_asset(usdm_policy, usdm_name, 2000000) - |> add(#"", #"", 1000000) - -const shares_usd_value_b = 4000000 - -test wu_check_output_value_mixed_b() { - check_output_value_equal_to_shares_usd_value( - output_value_b, - shares_usd_value_b, - prices, - ) -} - -// Wrong USD value should return false -test wu_check_output_value_wrong() { - !check_output_value_equal_to_shares_usd_value(output_value_a, 4000000, prices) -} - -// Output with asset that has no price should fail -const output_value_no_price = - from_asset( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c999", - #"", - 1000000, - ) - |> add(usdm_policy, usdm_name, 2000000) - -test wu_check_output_value_fail_no_price() fail { - check_output_value_equal_to_shares_usd_value( - output_value_no_price, - 4000000, - prices, - ) -} - -// Pure USDM output -const output_value_usdm_only = from_asset(usdm_policy, usdm_name, 3000000) - -test wu_check_output_value_usdm_only() { - check_output_value_equal_to_shares_usd_value( - output_value_usdm_only, - 3000000, - prices, - ) -} - -// Pure ADA output -const output_value_ada_only = from_asset(#"", #"", 1500000) - -test wu_check_output_value_ada_only() { - check_output_value_equal_to_shares_usd_value( - output_value_ada_only, - 3000000, - prices, - ) -} diff --git a/validators/tests/withdraw_utils/compute_fee_shares.ak b/validators/tests/withdraw_utils/compute_fee_shares.ak deleted file mode 100644 index 9a61e45..0000000 --- a/validators/tests/withdraw_utils/compute_fee_shares.ak +++ /dev/null @@ -1,50 +0,0 @@ -use withdraw_utils.{compute_fee_shares} - -// ========== compute_fee_shares tests ========== -// Formula: fee_shares = ceil(fee * total_shares / vault_equity) - -// Basic case: fee=100, total_shares=1000, vault_equity=1000 → 100 shares -test wu_compute_fee_shares_basic() { - compute_fee_shares(100, 1000, 1000) == 100 -} - -// Round up: fee=100, total_shares=1000, vault_equity=300 → ceil(333.33) = 334 -test wu_compute_fee_shares_round_up() { - compute_fee_shares(100, 1000, 300) == 334 -} - -// Exact division: fee=300, total_shares=1000, vault_equity=1000 → 300 -test wu_compute_fee_shares_exact() { - compute_fee_shares(300, 1000, 1000) == 300 -} - -// Zero fee: fee=0 → 0 shares -test wu_compute_fee_shares_zero_fee() { - compute_fee_shares(0, 1000, 1000) == 0 -} - -// Large total_shares: fee=100, total_shares=1000000, vault_equity=1000 → 100000 -test wu_compute_fee_shares_large_total() { - compute_fee_shares(100, 1000000, 1000) == 100000 -} - -// Small vault equity: fee=10, total_shares=1000, vault_equity=100 → 100 -test wu_compute_fee_shares_small_equity() { - compute_fee_shares(10, 1000, 100) == 100 -} - -// Real-world example: -// fee = 20000 (0.02 USD with 6 decimals) -// total_shares = 3000000000000000 -// vault_equity = 2400000000 -// fee_shares = ceil(20000 * 3000000000000000 / 2400000000) = ceil(25000000000) = 25000000000 -test wu_compute_fee_shares_real_world() { - compute_fee_shares(20000, 3000000000000000, 2400000000) == 25000000000 -} - -// Small fee with rounding: -// fee = 1, total_shares = 1000, vault_equity = 3 -// fee_shares = ceil(1 * 1000 / 3) = ceil(333.33) = 334 -test wu_compute_fee_shares_small_round_up() { - compute_fee_shares(1, 1000, 3) == 334 -} diff --git a/validators/tests/withdraw_utils/convert_shares_to_usd.ak b/validators/tests/withdraw_utils/convert_shares_to_usd.ak deleted file mode 100644 index 88cdce6..0000000 --- a/validators/tests/withdraw_utils/convert_shares_to_usd.ak +++ /dev/null @@ -1,48 +0,0 @@ -use withdraw_utils.{convert_shares_to_usd} - -// ========== convert_shares_to_usd tests ========== -// Formula: usd_value = shares_amount * vault_equity / total_shares - -// Basic calculation: 1000 shares with vault_equity=2000, total_shares=1000 → 2000 USD -test wu_convert_shares_to_usd_basic() { - convert_shares_to_usd(1000, 1000, 2000) == 2000 -} - -// Equal values: 1000 shares with vault_equity=1000, total_shares=1000 → 1000 USD -test wu_convert_shares_to_usd_equal() { - convert_shares_to_usd(1000, 1000, 1000) == 1000 -} - -// Larger vault: 1000 shares with vault_equity=10000, total_shares=1000 → 10000 USD -test wu_convert_shares_to_usd_larger_vault() { - convert_shares_to_usd(1000, 1000, 10000) == 10000 -} - -// More total shares: 1000 shares with vault_equity=1000, total_shares=10000 → 100 USD -test wu_convert_shares_to_usd_more_total_shares() { - convert_shares_to_usd(1000, 10000, 1000) == 100 -} - -// Round down: 100 shares with total_shares=300, vault_equity=100 → 33 USD (100*100/300) -test wu_convert_shares_to_usd_round_down() { - convert_shares_to_usd(100, 300, 100) == 33 -} - -// Zero shares: 0 shares → 0 USD -test wu_convert_shares_to_usd_zero() { - convert_shares_to_usd(0, 1000, 1000) == 0 -} - -// Real-world example using mock values: -// vault_equity = 2400000000 (2400 USD with 6 decimals) -// total_shares = 3000000000000000 -// shares_amount = 1250000000000000 (half of total) -// expected = 1250000000000000 * 2400000000 / 3000000000000000 = 1000000000 -test wu_convert_shares_to_usd_real_world() { - convert_shares_to_usd(1250000000000000, 3000000000000000, 2400000000) == 1000000000 -} - -// Partial withdrawal: 25% of shares -test wu_convert_shares_to_usd_partial() { - convert_shares_to_usd(750000000000000, 3000000000000000, 2400000000) == 600000000 -} diff --git a/validators/tests/withdraw_utils/process_batch.ak b/validators/tests/withdraw_utils/process_batch.ak index 53f0cba..cf64df4 100644 --- a/validators/tests/withdraw_utils/process_batch.ak +++ b/validators/tests/withdraw_utils/process_batch.ak @@ -5,7 +5,7 @@ use hydra_dex/types.{Account, UserTradeAccount} as dd_types use mocktail.{mock_output, mock_pub_key_address, mock_utxo_ref} use tests/utils.{ mock_l1_withdrawal_intent_script_hash, mock_l2_withdrawal_intent_script_hash, - mock_operator_charge_percentage, mock_total_shares, mock_vault_equity, + mock_operator_fee_rate_bp, mock_total_shares, mock_vault_equity, } use types.{MValue, WithdrawalIntentDatum} use withdraw_utils.{ @@ -199,7 +199,7 @@ fn user_receives_a() -> Int { cal_per_user_operator_fee( gross, cost_basis, - mock_operator_charge_percentage, + mock_operator_fee_rate_bp, ) gross - fee } @@ -212,7 +212,7 @@ fn user_receives_b() -> Int { cal_per_user_operator_fee( gross, cost_basis, - mock_operator_charge_percentage, + mock_operator_fee_rate_bp, ) gross - fee } @@ -225,7 +225,7 @@ fn user_receives_c() -> Int { cal_per_user_operator_fee( gross, cost_basis, - mock_operator_charge_percentage, + mock_operator_fee_rate_bp, ) gross - fee } @@ -381,7 +381,7 @@ const expected_total_user_receives = // mpf_actions, // TODO: provide merkle proof actions // mock_vault_equity, // mock_total_shares, -// mock_operator_charge_percentage, +// mock_operator_fee_rate_bp, // prices, // mock_l1_withdrawal_intent_script_hash, // initial_merkle_root, // TODO: provide initial root @@ -423,7 +423,7 @@ const expected_total_user_receives = // l2_transfer_amounts(), // mock_vault_equity, // mock_total_shares, -// mock_operator_charge_percentage, +// mock_operator_fee_rate_bp, // prices, // mock_l2_withdrawal_intent_script_hash, // initial_merkle_root, // TODO: provide initial root @@ -443,7 +443,7 @@ const expected_total_user_receives = // l2_incorrect_transfer_amounts(), // Wrong order causes mismatch // mock_vault_equity, // mock_total_shares, -// mock_operator_charge_percentage, +// mock_operator_fee_rate_bp, // prices, // mock_l2_withdrawal_intent_script_hash, // initial_merkle_root, // TODO: provide initial root @@ -463,7 +463,7 @@ const expected_total_user_receives = // extra_transfers, // mock_vault_equity, // mock_total_shares, -// mock_operator_charge_percentage, +// mock_operator_fee_rate_bp, // prices, // mock_l2_withdrawal_intent_script_hash, // initial_merkle_root, // TODO: provide initial root diff --git a/validators/vault_oracle/spend_mint.ak b/validators/vault_oracle/spend_mint.ak index e6e0232..d43c866 100644 --- a/validators/vault_oracle/spend_mint.ak +++ b/validators/vault_oracle/spend_mint.ak @@ -195,9 +195,9 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { oracle_output_datum.total_fee_share_collected == total_fee_share_collected, } - // Validate operator_charge_percentage + // Validate operator_fee_rate_bp let is_charge_valid = - oracle_output_datum.operator_charge_percentage >= 0 && oracle_output_datum.operator_charge_percentage <= 100 + oracle_output_datum.operator_fee_rate_bp >= 0 && oracle_output_datum.operator_fee_rate_bp <= 100 all_hydra_signed? && is_state_unchanged? && is_charge_valid? } @@ -253,8 +253,8 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { vault_oracle_datum.total_deposited == 0, vault_oracle_datum.shares_merkle_root == mpf.root(mpf.empty), vault_oracle_datum.total_fee_share_collected == 0, - vault_oracle_datum.operator_charge_percentage >= 0, - vault_oracle_datum.operator_charge_percentage <= 100, + vault_oracle_datum.operator_fee_rate_bp >= 0, + vault_oracle_datum.operator_fee_rate_bp <= 10000, } // No signatures required (anyone can create a vault) From ee81abf7a7dc0668a0fce30f144f2cad397518dc Mon Sep 17 00:00:00 2001 From: kenlau666 <98103533+kenlau666@users.noreply.github.com> Date: Mon, 13 Apr 2026 13:41:04 +0800 Subject: [PATCH 2/2] Refactor/l1 (#11) * fix: rounding in fee and denominator * chore: split oracle plan doc * fix: remove initial deposit * fix: l1 mint 2 oracle * fix: test * fix: naming * chore: aiken build * fix: miss check sign in deposit * fix: audit * chore: aiken build --- lib/deposit_utils.ak | 10 +- lib/price_oracle_utils.ak | 7 +- lib/types.ak | 23 +- lib/utils.ak | 40 +- lib/withdraw_utils.ak | 9 +- plutus.json | 230 +-- spec/0_vault_oracle/spend+mint.md | 271 +++- spec/1_vault/spend+withdrawal.md | 25 +- spec/2_l1_deposit_intent/spend+mint.md | 9 +- .../l2_deposit_intent/spend_and_mint.ak | 11 +- .../l2_withdrawal_intent/spend_and_mint.ak | 12 +- .../tests/deposit_utils/process_batch.ak | 790 +++++----- .../tests/l1_deposit_intent/burn_intent.ak | 748 +++++----- validators/tests/l1_deposit_intent/mint.ak | 542 +++---- validators/tests/l1_deposit_intent/spend.ak | 192 +-- .../tests/l1_withdrawal_intent/burn_intent.ak | 1310 +++++++++-------- validators/tests/l1_withdrawal_intent/mint.ak | 496 +++---- .../tests/l1_withdrawal_intent/spend.ak | 202 +-- validators/tests/utils.ak | 16 +- validators/tests/vault/withdrawal.ak | 18 +- validators/tests/vault_oracle/mint.ak | 191 ++- validators/tests/vault_oracle/spend.ak | 713 ++++----- .../tests/withdraw_utils/process_batch.ak | 906 ++++++------ validators/vault/spend_withdrawal.ak | 27 +- validators/vault_oracle/spend_mint.ak | 312 ++-- 25 files changed, 3537 insertions(+), 3573 deletions(-) diff --git a/lib/deposit_utils.ak b/lib/deposit_utils.ak index 42ddee7..7d0e9e4 100644 --- a/lib/deposit_utils.ak +++ b/lib/deposit_utils.ak @@ -29,7 +29,13 @@ pub fn list_foldl5( when self is { [] -> return(zero_a, zero_b, zero_c, zero_d, zero_e) [x, ..xs] -> { - let acc_a, acc_b, acc_c, acc_d, acc_e <- with(x, zero_a, zero_b, zero_c, zero_d, zero_e) + let + acc_a, + acc_b, + acc_c, + acc_d, + acc_e, + <- with(x, zero_a, zero_b, zero_c, zero_d, zero_e) list_foldl5(xs, acc_a, acc_b, acc_c, acc_d, acc_e, with, return) } } @@ -157,7 +163,7 @@ pub fn process_batched_deposit_intent_validation( // Extract Account from UserAccount and use as MPF key expect UserTradeAccount { account: depositor_account, .. } = depositor - let mpf_key = cbor.serialise(depositor_account) + let mpf_key = cbor.serialise(depositor) // Track if depositor is operator let new_cal_operator_shares_added = diff --git a/lib/price_oracle_utils.ak b/lib/price_oracle_utils.ak index a40c3ce..cedec28 100644 --- a/lib/price_oracle_utils.ak +++ b/lib/price_oracle_utils.ak @@ -1,16 +1,11 @@ use aiken/cbor use aiken/collection/list use aiken/collection/pairs -use aiken/math use cardano/assets.{AssetName, PolicyId, Value} use cardano/transaction.{Input} use cocktail.{verify_signatures} use types.{MValue, Message} - -// Power of 10: returns 10^n -fn pow10(n: Int) -> Int { - math.pow(10, n) -} +use utils.{pow10} pub fn verify_prices_oracle_messages( prices_message: ByteArray, diff --git a/lib/types.ak b/lib/types.ak index 50f5b48..9d325dd 100644 --- a/lib/types.ak +++ b/lib/types.ak @@ -14,6 +14,19 @@ pub type MintPolarity { RBurn } +pub type VaultConfig { + // Config (all updatable via UpdateConfig) + app_oracle: PolicyId, + vault_script_hash: ByteArray, + l1_deposit_intent_script_hash: ByteArray, + l1_withdrawal_intent_script_hash: ByteArray, + l2_deposit_intent_script_hash: ByteArray, + l2_withdrawal_intent_script_hash: ByteArray, + pluggable_logic: ByteArray, + operator_account: UserAccount, + hydra_node_pub_keys: List, +} + // Vault Oracle Datum — holds config + state, commits to Hydra pub type VaultOracleDatum { // Config (all updatable via UpdateConfig) @@ -45,23 +58,15 @@ pub type VaultOracleMintRedeemer { } // Vault Oracle spend redeemer -// Note: L2InitialDeposit is handled by HydraAccount validator (ProcessVaultDeposit with total_shares == 0) pub type VaultOracleSpendRedeemer { - L1InitialDeposit { - depositor: UserAccount, - initial_deposit: MValue, - prices_message: ByteArray, - signatures: List, - initial_shares_proof: Proof, - } ProcessL1Deposit ProcessL1Withdrawal ProcessL2Deposit ProcessL2Withdrawal HydraCommit HydraDecommit - PluggableLogic UpdateConfig + BurnVault } // Vault spend redeemer — fund management validator diff --git a/lib/utils.ak b/lib/utils.ak index 47959c7..5b1f056 100644 --- a/lib/utils.ak +++ b/lib/utils.ak @@ -4,13 +4,15 @@ use aiken/crypto.{ ScriptHash, VerificationKey, VerificationKeyHash, blake2b_224, verify_ed25519_signature, } +use aiken/math use cardano/address.{Credential, Script} use cardano/assets.{Lovelace, PolicyId, Value, quantity_of} use cardano/transaction.{InlineDatum, Input, Redeemer, ScriptPurpose} use cocktail.{input_inline_datum} use hydra_dex/types.{AppOracleDatum} as dd_types use types.{ - BurnIntent, BurnIntentL2, IntentRedeemerL1, IntentRedeemerL2, VaultOracleDatum, + BurnIntent, BurnIntentL2, IntentRedeemerL1, IntentRedeemerL2, VaultConfig, + VaultOracleDatum, } pub fn get_vault_oracle_datum( @@ -42,6 +44,38 @@ pub fn get_vault_oracle_input( oracle_input } +pub fn get_vault_config( + inputs: List, + vault_oracle_nft: PolicyId, +) -> VaultConfig { + expect Some(oracle_input) = + inputs + |> list.find( + fn(input: Input) { + quantity_of(input.output.value, vault_oracle_nft, "") == 1 + }, + ) + + let datum = input_inline_datum(oracle_input) + if datum is VaultOracleDatum { + VaultConfig { + app_oracle: datum.app_oracle, + vault_script_hash: datum.vault_script_hash, + l1_deposit_intent_script_hash: datum.l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash: datum.l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash: datum.l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash: datum.l2_withdrawal_intent_script_hash, + pluggable_logic: datum.pluggable_logic, + operator_account: datum.operator_account, + hydra_node_pub_keys: datum.hydra_node_pub_keys, + } + } else if datum is VaultConfig { + datum + } else { + fail @"Invalid datum type for vault oracle input" + } +} + pub fn get_app_oracle_datum( reference_inputs: List, oracle_nft: PolicyId, @@ -158,3 +192,7 @@ pub fn validate_hydra_signatures_with_verification_key( fn(key) { list.has(extra_signatories, crypto.blake2b_224(key)) }, ) } + +pub fn pow10(n: Int) -> Int { + math.pow(10, n) +} diff --git a/lib/withdraw_utils.ak b/lib/withdraw_utils.ak index 5a9dcd2..8d75e75 100644 --- a/lib/withdraw_utils.ak +++ b/lib/withdraw_utils.ak @@ -2,7 +2,6 @@ use aiken/cbor use aiken/collection/list use aiken/collection/pairs use aiken/crypto.{ScriptHash} -use aiken/math use aiken/merkle_patricia_forestry as mpf use cardano/address.{Script} use cardano/assets.{AssetName, PolicyId, Value} @@ -13,6 +12,7 @@ use types.{ SharesDelete, SharesInsert, SharesMPFAction, SharesRecordEntry, SharesUpdate, WithdrawalIntentDatum, } +use utils.{pow10} pub type Scott6 = fn(a, b, c, d, e, f) -> result @@ -44,11 +44,6 @@ pub fn list_foldl6( } } -// Power of 10: returns 10^n -fn pow10(n: Int) -> Int { - math.pow(10, n) -} - pub fn convert_shares_to_usd( shares_amount: Int, total_shares: Int, @@ -167,7 +162,7 @@ pub fn process_batched_withdrawal_intent_validation( // Extract Account from UserAccount and use as MPF key expect UserTradeAccount { account: withdrawer_acc, .. } = withdrawer - let mpf_key = cbor.serialise(withdrawer_acc) + let mpf_key = cbor.serialise(withdrawer) // Track if withdrawer is operator let new_cal_operator_shares_withdrawn = diff --git a/plutus.json b/plutus.json index d7e6d38..c5f4051 100644 --- a/plutus.json +++ b/plutus.json @@ -33,8 +33,8 @@ } } ], - "compiledCode": "593117010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd500148888c8cc004004014896600200313301c337606ea4014dd300225eb7bdb1822653001375c603400337566036003301f00248896600266e4002400e26604066ec0dd48049ba60080058acc004cdc7804801c4c9660026030603c6ea800626604266ec0dd48051811180f9baa0010028801203a9800804c022004803a26604066ec0dd48019ba600233006006001407080e0603a00280da6e3d220100488888a6002603c00d3758603a00d2259800980a980d9baa002899191919912cc004c09400e266018604800826601800400d16408860440026eb8c08800cc088004c084004c070dd500145901a48c8cc004004008896600200314bd6f7b63044ca60026eb8c0740066eacc0780066600600660440049114c004006007323200432330010010042259800800c5268992cc0040062b30013004375a604a6050005149a2c811a26644b3001337206eb8c098008dd71813000c566002600c6eb4c09c00a26600a00a660520026056007164095164094605000460500028130c0a000502514c004c06c006942945020488990090c08000501e2444466446530013756604800337586048604a604a604a604a0033758604800f2259800980e18111baa00289919192cc004c0a800a26600e605200626603a00244b300100280344c8c8cc084dd59815001112cc00400a2600a606000d132332230043033005375c60580026eb4c0b4004c0bc00902d1bae3028001302b00240a516409c6eacc0a0004c0a0004c08cdd50014590214dd61812001a44444b3001301f00f8992cc004c0ac0062646644b3001302330293754005132323259800981880144cc038c0c000c4cc09000489660020051598009919198008009919800800980a803112cc004006297ae0899199119198008009bab30370042259800800c400e264660766e9ccc0ecdd48029981d981c0009981d981c800a5eb80cc00c00cc0f4008c0ec0050391bae3033001330030033038002303600140d044b30010018a518992cc004cdc49bad303630373037001332232598009818181a9baa0018a40011375a6072606c6ea8005034192cc004c0c0c0d4dd5000c530103d87a8000899198008009bab303a3037375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062606a66078607400497ae08a60103d87a800040e1133004004303e00340e06eb8c0e0004c0ec005039206832330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062606866076607200497ae08a60103d87a800040dd133004004303d00340dc6eb8c0dc004c0e80050381bae3036001375c606c606e00313300300330370028a5040c46eb0c0d40050331bab3025302f375401110068a5040b513232330283756606200444b300100289802981b80344c8cc88c010c0e8014dd718198009bad3034001303600240d06eb8c0bc004c0c800903045902e1bab302f001302f001302a37540051640a064b30013021302837540031302c3029375400316409c60566058605860506ea8004cc89660020030028acc004c0b8006264b30013012375c605c00313025375a605c605e00314a08148c0b8dd61816800c00902b205614a06466002002646600200201244b30010018a5eb82264664464660020026eacc0bc01089660020031003899198199ba733033375200a66066606000266066606200297ae0330030033035002303300140c46eb8c0ac004cc00c00cc0c0008c0b800502c112cc004006297ae0899912cc004cdc79bae302f0020198998171ba700233004004001899802002000a0543758605a002605c0028158c0a80062c8140c8c8cc00400400c896600200314bd7044cc8966002b30013375e605c60566ea80080162646600200264660020026eacc0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009c566002604001f132323298009bac302c0019bac302c302d0019919800800807912cc004006297ae0899912cc004c8cc004004c8cc004004dd59819181998179baa30323033302f375400844b30010018a5eb82264664464660020026eacc0d0010896600200310038991981c1ba733038375200a66070606a00266070606c00297ae033003003303a002303800140d86eb8c0c0004cc00c00cc0d4008c0cc005031112cc00400629422b30013371e6eb8c0c8dd618190008164528c4cc008008c0cc00502d206089981780119802002000c4cc01001000502b18170009817800a0589bac302c0039bae302c00248888966002606400713233223300100213259800981b000c4c8cc00c0044c8c8c8c8c8ca6002607a003303c0049bad303c002488966002606a60766ea800a33001230403041304100191112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc7244103020408003370000490189180119bca4a2003124bded8c10140000101200040f881f103e4dc024003370e907f01cdc02400522337600046ea0005222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c03c0164600a660a0004003375a609a0048030c12c0066002013008800a00e4121222232330010010022233006480089660026014003130024bd70448c8ca600200d230063304f0020019bad304c002401860940033001008803cc028005006208e91114c00401200700291980200091801800a0124888c8c8c8c8c8c8c8c8c9660026090609a6ea8c144c1480162b300132323300100132330010013034375660a800e44b30010018a5eb82264664464660020026eacc158010896600200310038991982d1ba73305a375200a660b460ae002660b460b000297ae033003003305c002305a00141606eb8c148004cc00c00cc15c008c154005053112cc0040062946264b3001337126eb4c154c158c158004cc88c966002609e60a86ea80062900044dd6982c182a9baa001414c64b3001304f3054375400314c0103d87a8000899198008009bab30593056375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660b660b200497ae08a60103d87a8000415d133004004305d003415c6eb8c15c004c16800505820a632330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660b460b000497ae08a60103d87a80004159133004004305c00341586eb8c158004c1640050571bae3055001375c60aa60ac00313300300330560028a5041406eb0c150005052191919800800815912cc004006297adef6c6089919912cc004c134c14cdd5001456600266e3cdd7182b982a1baa0020068994c004006005375660b060b260aa6ea80110011112cc00400a2003132332298008034c178016646600200200a44b300100189982f19bb037520086e9800d2f5bded8c113298009bae305c0019bab305d00198308012444b300133720010007133062337606ea4020dd3003802c56600266e3c02000e264b3001305a30603754003133063337606ea4024c190c184dd50008014400905f192cc0056600200314a314a083122980103d87a80008982e198319ba60014bd7020be329800800c022006800888966002005100189919914c00401a60d400b32330010010052259800800c4cc1a8cdd81ba9004375000697adef6c608994c004dd71834000cdd69834800cc1b40092225980099b9000800389983719bb037520106ea001c0162b30013371e01000713259800983318361baa00189983799bb0375201260e060da6ea800400a20048358c96600260cc00314c0103d87a800089834198379ba80014bd7020d63370000e00513306e337606ea400cdd400119803003000a0d441a8306b00141a48030dd718318009bad306400130660024191133062337606ea400cdd300119803003000a0bc4178305f00141748030dd7182b8009bab3058001305a0024161100141491001414864b3001304d305237540031304e3305530563053375400297ae08a60103d87a8000414460aa60a46ea8c154c148dd500099801801982b001182a000a0a4375c60a203515980099baf01c3232323232323232323232323230563305d305e00d3305d305e00c3305d305e00b3305d305e00a3305d305e0093305d305e0083305d305e0073305d305e0063305d305e0053305d305e0043305d305e0033305d305e0023305d305e0013305d375066e00080dd6982f0079982e9ba8337006eb4c17808cdd6982f0071982e9ba8337006eb4c178088dd6982f0081982e982f182f807182f982f982f982f982f800982f000982e800982e000982d800982d000982c800982c000982b800982b000982a800982a000982980098271baa01f8acc006600266e05200032330010010232259800800c520008980819801001182a000a0a28a5099198008009919800800817912cc004006297ae0899199119198008009bab30550042259800800c400e264660b26e9ccc164dd48029982c982b0009982c982b800a5eb80cc00c00cc16c008c1640050571bae30510013300300330560023054001414844b30010018a5eb8226644b30013371e6eb8c1540080fe2660a86e9c008cc0100100062660080080028280dd61829800982a000a0a24889660020030028acc004c154006264b30013039375c60aa00313370e6eb4c154c1580040122941050182a9bac305400180120a441488991919800800817112cc00400629422b30013371e6eb8c15000400e294626600400460aa00282790521bae3051304e3754646644b3001304a3050375400513259800982518289baa0018992cc004c130c148dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca600260d0003375c60d0025375c60d0023375c60d001f306800e9bae306800d9bae306800c9834005cdd718340054c1a00266eb8c1a002260d000f375c60d000d30680059bae30680049834001cc1a00092222222222222222259800983d00944cc1b4dd6183c810912cc00400a26605001e26605001826605001426605001026605000c2660500082b300130713077375400713232323298009bae307f0019bae307f0049bae307f0039bae307f002488896600261080200b159800983c983f9baa01b8992cc004c214040062660f06eb0c210040048966002005103189918011844008019bae308601002421005164208046100026ea806e2c83f22c84080860fe00260fc00260fa00260f06ea800e2c83b2264600460fa0066eb8c1ec0090794590770c1a0004c19c004c198004c194004c190004c18c004c188004c184004c180004c17c004c178004c174004c170004c16c004c168004c164004c160004c14cdd5000c59051182a98291baa0018b20a0301530513754608e60a26ea8c150c144dd500145904f1982101611825192cc004c12cc140dd5000c5200089bad3054305137540028278c966002609660a06ea80062980103d87a8000899198008009bab30553052375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0f0006260a0660ae60aa00497ae08a60103d87a8000414d1330040043059003414c6eb8c14c004c158005054209e32330010013756608e60a26ea8c11cc144dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062609e660ac60a800497ae08a60103d87a80004149133004004305800341486eb8c148004c154005053112cc004c128c140dd500144c8c8c96600260b000513303f3057003132598009827000c4c96600260b400313232598009828800c4c96600260ba003133044305c0010098b20b4305837540051598009829000c4c8c8ca60026eb4c1780066eb4c17800e6eb4c178009222598009831002403a2c82f860bc00260ba00260b06ea800a2c82b1056182b1baa00130590018b20ae305537540051598009827800c56600260aa6ea800a00b16415916414c8298c14cdd5000c59055182b000982b00098289baa0028b209e375c60a203714a08262294104c452820988a50413060a200260a0002609e003300122372866e280080066e0120039b804801e44b300130453370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a400890102094914c00400666e04dc6801000c0097189b804803e44b30010018a5eb7bdb182264664464660020026600c00c60a800a44b300100189982999bb037520086ea000d2f5bded8c113298009bae30510019bad3052001982b0012444b300133720010007133057337606ea4020dd4003802c56600266e3c02000e2660ae66ec0dd48041ba800700189982b99bb037520066ea0008cc01801800505320a6182a000a0a4375c60980026eb4c134004c13c00504d4896600200314bd6f7b63044c8cc88c8cc004004cc018018c1500148966002003133053337606ea4010dd3001a5eb7bdb1822653001375c60a2003375660a4003305600248896600266e4002000e2660ae66ec0dd48041ba60070058acc004cdc7804001c4cc15ccdd81ba9008374c00e003133057337606ea400cdd300119803003000a0a6414c305400141486eb8c130004dd598268009827800a09a9112cc004cdc4000a40011480022b300130460018a400513259800982399b8600248012330010049800801ccdc18012400880222600330010049800801ccdc1980800124008802104c1b82002412c825a444653001001802400d0011112cc00400a200319800801cc15000a6600860a60040028019051496600266e1cdc6800a408110018b20929bad304d0029bab304d0019bae304d304e011982698251baa010488888888888888a6002444b300133712006900044cc04800800626602400200482d2444646600200200644b3001337120060031488100899b8b3301100500133002002301e00141712259800982a19b8600148012266e2d20fe033300d00233706002900244cdc5a400066e2ccc038008004cc034008cdc1980d800a400882ca601201330080089803803a444445300122225980099b890044800a2660333001004801c00500a00144cc06400a60026030009003800a014418522225980099b88004480122b300133710004900244cc0666002009003800a0144881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610089980ccc00401200748920000000000000000000000000000000000000000000000000000000000000000000402930013018002800d221200000000000000000000000000000000000000000000000000000000000000000004028830a2b300133712900200144cc065221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761009800980c002400e00280522660333001002800d22120000000000000000000000000000000000000000000000000000000000000000000402930013018004801d221200000000000000000000000000000000000000000000000000000000000000000004028830906148c0100064600600291111991199119194c00400609d3306b374e07a660d66e9c0fccc1acdd480925eb8297adef6c60a4001480029000200222222225980080345660026eb0c1c80162660e26e98010cc1c4dd4001998389ba8002330713750002660e260e460e660e600a97ae08b20e08cc004c1c801a60e600d30730059bac30720054888a6002444453001010804401600900380140050104dd6183b0014dd7183b183b8014c1d8c1ccdd5183b18399baa30693073375400891112cc004c1c4c1d8dd5000c56600266e3cdd7183d183b9baa0010648acc0040162d13322330550011323232332259800983b983e9baa001899194c004cc20804dd380499841009ba730840100c330820137526464b3001307b0018992cc004cdc799194c0040069000400d00111119192cc00400e2911200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b30013085010018994c0040126eb4c240040066eb8c24004c244040050051846009baa0028acc004c218040062646608666e2cdd69848009846809baa001375c610602611a026ea8004dd718289846809baa001308f01309001308c0137540051323304333032375c6120020020106eb8c24004c24404004c24004c23004dd50012114024228046114026ea8004c2340401226464b30013085010018994c0040126eb4c240040066eb8c24004c244040050051846009baa0028acc004c2180400626465300100b804c007300100a800c01500a4c24404c2480400902818031bad309001001308c01375400513233223322980080740320039800806c006010806a61180266126026ea0cc110008030cc24c04dd49981b0010009984980984a00984a8080225eb8102b1bae3092010023008001309101001375a6120020026118026ea800908a01211402308a013754002611a02008845808c2340400d08a01111194c00402600f001cc0040220030044021002409c60080046e00c11c008dca0021817807466002009376660fc6610a026ea001ccc21404dd400425eb8200280e22c840808dd61842809841009baa0028acc004c1f0006264646644b3001307f3085013754005132598009840009843009baa0018991919912cc004c23c0400e2b30013371f300100c8044019024181b80b4660020193766610c026611a026ea0cdc01bad308e01308b01375400a01e6611a026ea0cdc01bad308101308b01375400a02097ae080320488b2112028b211802375a6118020026eb4c23004008c23004004c21c04dd5000c59085011844809843009baa0028b210802303d0013758610e026110020046eb8c21804004c20804dd500145908001210002308001375400261060201897ae0994c004006603e02d301f0074004444b30010028800c4ca6002009308801003cc00400a6eb8c20c040066eacc2100400644461040266112026e98ca6002003302700398138012002222598008014400626466453001006984880802cc8cc004004014896600200313309101337606ea4010dd4001a5eb7bdb1822653001375c611e02003375a61200200330940100248896600266e4002000e26612a0266ec0dd48041ba80070058acc004cdc7804001c4c966002611a026126026ea800626612c0266ec0dd4804984b80984a009baa0010028801212402308e013309501375066e0001c0092f5c113309501337606ea400cdd400119803003000a122024244043092010014240048030dd71845008009bad308b01001308d01002422c0497ae041b08020c21804009084014cdc000a002ccdc0002009d6600266ebc0080a2266e00048012202483f100d1bb3001308101307e37540031641f0b300130750418800c4cdc199b8200104102741e860fe0073001001a40012298009bab307d002800c88c96600260f260fe6ea800626466e0000ccdc199b82375a6102020086eb4c21004004cc08d2014375a610802610a020026eb0c20c04c20004dd5000c5907e191919800800815912cc004006298103d87a80008992cc004cdd79ba70043082010018983f1984280984180800a5eb82266006006610e02004840808c21404005083011984080983f0021984080983f00125eb8102a2050375660fa60fc00260f26ea8004c1ec014c96600260e060ee6ea8006260f660f06ea80062c83b0c1e8c1ecc1ecc1dcdd5183d183d983b9baa00841e119800806c03201700a804a00841d519800806c03201700a804a00841d420e02223322329800800d2000802200222259800800c4cc094cc0500140080122646644b3001306b002899194c00402a00f001cc00402200330780064021375c60ee60f00048078c008dd6983b00098391baa0038acc004c1b000a26465300100a803c0073001008800cc1e00190084c1dcc1e000900e18011bad307600130723754007132332298009bae30780029802000cc1e401d2229800807402e0059800806400a002806260e6660f46ea0cc0ac00cc0e8008cc1e8dd49980e8018011983d183d983e002a5eb810120c1dc004dd6983b00098391baa00341c08380c1bcdd50009b803030003307200141c06e5000cdca00111111198104c004016009302c003404130013301d005302c003cc0052000a40810015c6330014810290204005718cc005208001a40810015c6330014830006902040057184888896600266e24015200e899812cc00401600f003801400500c00244cc0940126002604000b007801c00a002806106d088888c96600330013370e0026eb4c1b8c1acdd5001528528a0d2899810cc00401a00b302d00440446644b3001337100069008456600266e200092010899811cc00400e00b002800a01248920b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a00899811cc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835a2b300133712900800144cc08d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980f001c016603c00500140251330239800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835906b1bad306e306b3754004660426eb8c184c1acdd50011bae302f306b37540051641a46603a00a605800644444b30013371200a900344cc07a600200b0048014005009001c4cc07800e6002603800b004801400500920cc22225980099b88004480222b300133710004900444cc0766002009003801400500724412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980ecc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004020832a2b300133712900400144cc0752212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980d802400e6036005001401d13301d980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402083290650304d001332259800982198249baa0018992cc004c110c128dd5000c4c8c8c8c96600260a6005133223304800122598008014566002609860a46ea8016264646644b3001305b00389982c9ba800833059374c00e660b3300159800991980080081e912cc00400629422b30013375e60b860b26ea8c17000402e294626600400460ba00282b905a44ca6002003010817a002222598008014528c5660033001375c60ba00502d9bae305d0015caa33001003982f0014c178005003452820b0416d14a082aa98103d87a8000a60103d8798000415497ae08b20b0375a60b00026eb8c160008c160004c14cdd5002c5905144c8c8c8cc896600260b8007132323322598009830001c4c028c18002e2c82e8dd6982e8009bad305d002305d001375860b000b1641646eb8c164004dd7182c801182c8009bac3053001305600241506eb4c148010dd59829001c5905018288009828800982800098259baa0018b2092304d304a37540031641206eb0c12c048c00406c8c966002608400314c103d87a80008992cc006600260866eb4c1280069429450484530103d87a800089822998261824800a5eb810484c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04a48896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034129001400c8238dc680098008009119800911191919bb032374e6609e60980026609e609a00297ae033760609600460960026098003300100691000c012007375a60960028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130440018cc004012007002918059ba800140391598009822800c6600200900399b80002480fe460166ea0c038cdc0a400000280722b30013370e004905f00c4c8cc0040048c030dd48009119803240044b3001300f001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014413119800802400e66e00009207f918059ba9001401c824904920928acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a66012012440032300e3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180799ba50030014034808904c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101412c825900e456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300b374e002804233001004801ccdc0001241fe0329800802c0126600e00e44003001918061ba700140288071049456600266e1c005200a8acc004cdc3801241fc0513232330010012300d374c002446600e900112cc004c0400062600497adef6c608919194c00401a4600c660aa004003375a60a40048030c8cdd8182a800982a982b0009bac30500019800804c0226020002802904d198030031100146600200900399b80002482fc0a464653001001801c8c038dd3000a0022225980099b89002480022600297adef6c608919194c00401a602a00b23005330560020019bad305300240186466ec0c158004c158c15c004dd61828800cc00402a01300140148270cc01c01c8800900e20928925ef6c610140000101200041248249049209233706002902011640e8303c001303b303b001303a303a303a001303930393039303930393039303900130380013033375400864b3001302b3032375400313036303337540031640c4606a606c606c60646ea8c0d40062c8198c8c8cc004004038896600200314bd7044cc8966002b30013375e6072606c6ea80080162646600200264660020026eacc0ecc0f0c0e0dd5002112cc004006297ae0899199119198008009bab303d0042259800800c400e264660826e9ccc104dd480299820981f00099820981f800a5eb80cc00c00cc10c008c10400503f1bae303900133003003303e002303c00140e844b30010018a508acc004cdc79bae303b3758607600206b14a3133002002303c00140d881ca294103444cc0e0008cc01001000626600800800281a0c0dc004c0e0005035181a18189baa30273031375400664b30013028302f375400313033303037540031640b8606460666066605e6ea8c0c8c0ccc0bcdd5000912cc004c0a8c0c0dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1180066eb8c11804a6eb8c1180466eb8c1180426eb8c11803e6eb8c11803a6eb8c1180366eb8c1180326eb8c11802e6eb4c1180266eb4c1180226eb0c11801e64b300130440018acc004cdc4a40086086003168981f1821800a0848b208a3754608c00d375a608c00b375a608c009375a608c007375c608c004911111111111111112cc004c16004a26606a60ae03626609600c44b300100281344c8c008c16c00cdd7182c80120ae8b20aa1823000982280098220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b00098189baa0028b205e30310038b205e1816000981580098131baa014899912cc004c0b00062646600a002264b300130233029375400313259800981218151baa0018acc004016264646600200201644b30010018a508acc004cdc79bae30310010038a518998010011819000a05840bc6eb8c0b8c0acdd5000c52820528b20523020302a3754605a60546ea80062c8140c0b0c0a4dd5000992cc004c084c0a0dd5000c4c0b0c0a4dd5000c5902718159816181618141baa302b302c3028375460560031640a46644b3001001801456600260580031325980098081bae302c001899b87375a6058605a0029000c528204e302c3758605600300240a4814852819198008009919800800803912cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a5eb8226644b30013371e6eb8c0b400805e2660586e9c008cc0100100062660080080028140dd618158009816000a05232323300100100d2259800800c52f5c11332259800acc004cdd7981718159baa302e302f302b375400400b132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009a0484090302430240023022004223259800980d000c4c8c8c966002605000513300830270030058b204a375c604c002604c00260426ea800e2b3001301b00189919192cc004c0a000a266010604e00600b1640946eb8c098004c098004c084dd5001c5660026032003132323259800981400144cc020c09c00c0162c8128dd71813000981300098109baa0038b203e407c80f8c07cdd500106eb8c058c04cdd50024590112022180918098021149a26cac8011", - "hash": "707d2c94ad4fbe1b4927825f66868178778c010dd2a6f7ca9fffc755" + "compiledCode": "593111010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd500148888c8cc004004014896600200313301c337606ea4014dd300225eb7bdb1822653001375c603400337566036003301f00248896600266e4002400e26604066ec0dd48049ba60080058acc004cdc7804801c4c9660026030603c6ea800626604266ec0dd48051811180f9baa0010028801203a9800804c022004803a26604066ec0dd48019ba600233006006001407080e0603a00280da6e3d220100488888a6002603c00d3758603a00d2259800980a980d9baa002899191919912cc004c09400e266018604800826601800400d16408860440026eb8c08800cc088004c084004c070dd500145901a48c8cc004004008896600200314bd6f7b63044ca60026eb8c0740066eacc0780066600600660440049114c004006007323200432330010010042259800800c5268992cc0040062b30013004375a604a6050005149a2c811a26644b3001337206eb8c098008dd71813000c566002600c6eb4c09c00a26600a00a660520026056007164095164094605000460500028130c0a000502514c004c06c006942945020488990090c08000501e2444466446530013756604800337586048604a604a604a604a0033758604800f2259800980e18111baa00289919192cc004c0a800a26600e605200626603a00244b300100280344c8c8cc084dd59815001112cc00400a2600a606000d132332230043033005375c60580026eb4c0b4004c0bc00902d1bae3028001302b00240a516409c6eacc0a0004c0a0004c08cdd50014590214dd61812001a44444b3001301f00f8992cc004c0ac0062646644b3001302330293754005132323259800981880144cc038c0c000c4cc09000489660020051598009919198008009919800800980a803112cc004006297ae0899199119198008009bab30370042259800800c400e264660766e9ccc0ecdd48029981d981c0009981d981c800a5eb80cc00c00cc0f4008c0ec0050391bae3033001330030033038002303600140d044b30010018a518992cc004cdc49bad303630373037001332232598009818181a9baa0018a40011375a6072606c6ea8005034192cc004c0c0c0d4dd5000c530103d87a8000899198008009bab303a3037375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062606a66078607400497ae08a60103d87a800040e1133004004303e00340e06eb8c0e0004c0ec005039206832330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062606866076607200497ae08a60103d87a800040dd133004004303d00340dc6eb8c0dc004c0e80050381bae3036001375c606c606e00313300300330370028a5040c46eb0c0d40050331bab3025302f375401110068a5040b513232330283756606200444b300100289802981b80344c8cc88c010c0e8014dd718198009bad3034001303600240d06eb8c0bc004c0c800903045902e1bab302f001302f001302a37540051640a064b30013021302837540031302c3029375400316409c60566058605860506ea8004cc89660020030028acc004c0b8006264b30013012375c605c00313025375a605c605e00314a08148c0b8dd61816800c00902b205614a06466002002646600200201244b30010018a5eb82264664464660020026eacc0bc01089660020031003899198199ba733033375200a66066606000266066606200297ae0330030033035002303300140c46eb8c0ac004cc00c00cc0c0008c0b800502c112cc004006297ae0899912cc004cdc79bae302f0020198998171ba700233004004001899802002000a0543758605a002605c0028158c0a80062c8140c8c8cc00400400c896600200314bd7044cc8966002b30013375e605c60566ea80080162646600200264660020026eacc0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009c566002604001f132323298009bac302c0019bac302c302d0019919800800807912cc004006297ae0899912cc004c8cc004004c8cc004004dd59819181998179baa30323033302f375400844b30010018a5eb82264664464660020026eacc0d0010896600200310038991981c1ba733038375200a66070606a00266070606c00297ae033003003303a002303800140d86eb8c0c0004cc00c00cc0d4008c0cc005031112cc00400629422b30013371e6eb8c0c8dd618190008164528c4cc008008c0cc00502d206089981780119802002000c4cc01001000502b18170009817800a0589bac302c0039bae302c00248888966002606400713233223300100213259800981b000c4c8cc00c0044c8c8c8c8c8ca6002607a003303c0049bad303c002488966002606a60766ea800a33001230403041304100191112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc7244103020408003370000490189180119bca4a2003124bded8c10140000101200040f881f103e4dc024003370e907f01cdc02400522337600046ea0005222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c03c0164600a660a0004003375a609a0048030c12c0066002013008800a00e4121222232330010010022233006480089660026014003130024bd70448c8ca600200d230063304f0020019bad304c002401860940033001008803cc028005006208e91114c00401200700291980200091801800a0124888c8c8c8c8c8c8c8c8c9660026090609a6ea8c144c1480162b300132323300100132330010013034375660a800e44b30010018a5eb82264664464660020026eacc158010896600200310038991982d1ba73305a375200a660b460ae002660b460b000297ae033003003305c002305a00141606eb8c148004cc00c00cc15c008c154005053112cc0040062946264b3001337126eb4c154c158c158004cc88c966002609e60a86ea80062900044dd6982c182a9baa001414c64b3001304f3054375400314c0103d87a8000899198008009bab30593056375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660b660b200497ae08a60103d87a8000415d133004004305d003415c6eb8c15c004c16800505820a632330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660b460b000497ae08a60103d87a80004159133004004305c00341586eb8c158004c1640050571bae3055001375c60aa60ac00313300300330560028a5041406eb0c150005052191919800800815912cc004006297adef6c6089919912cc004c134c14cdd5001456600266e3cdd7182b982a1baa0020068994c004006005375660b060b260aa6ea80110011112cc00400a2003132332298008034c178016646600200200a44b300100189982f19bb037520086e9800d2f5bded8c113298009bae305c0019bab305d00198308012444b300133720010007133062337606ea4020dd3003802c56600266e3c02000e264b3001305a30603754003133063337606ea4024c190c184dd50008014400905f192cc0056600200314a314a083122980103d87a80008982e198319ba60014bd7020be329800800c022006800888966002005100189919914c00401a60d400b32330010010052259800800c4cc1a8cdd81ba9004375000697adef6c608994c004dd71834000cdd69834800cc1b40092225980099b9000800389983719bb037520106ea001c0162b30013371e01000713259800983318361baa00189983799bb0375201260e060da6ea800400a20048358c96600260cc00314c0103d87a800089834198379ba80014bd7020d63370000e00513306e337606ea400cdd400119803003000a0d441a8306b00141a48030dd718318009bad306400130660024191133062337606ea400cdd300119803003000a0bc4178305f00141748030dd7182b8009bab3058001305a0024161100141491001414864b3001304d305237540031304e3305530563053375400297ae08a60103d87a8000414460aa60a46ea8c154c148dd500099801801982b001182a000a0a4375c60a203515980099baf01c3232323232323232323232323230563305d305e00d3305d305e00c3305d305e00b3305d305e00a3305d305e0093305d305e0083305d305e0073305d305e0063305d305e0053305d305e0043305d305e0033305d305e0023305d305e0013305d375066e00080dd6982f0079982e9ba8337006eb4c17808cdd6982f0071982e9ba8337006eb4c178088dd6982f0081982e982f182f807182f982f982f982f982f800982f000982e800982e000982d800982d000982c800982c000982b800982b000982a800982a000982980098271baa01f8acc006600266e05200032330010010232259800800c520008980819801001182a000a0a28a5099198008009919800800817912cc004006297ae0899199119198008009bab30550042259800800c400e264660b26e9ccc164dd48029982c982b0009982c982b800a5eb80cc00c00cc16c008c1640050571bae30510013300300330560023054001414844b30010018a5eb8226644b30013371e6eb8c1540080fe2660a86e9c008cc0100100062660080080028280dd61829800982a000a0a24889660020030028acc004c154006264b30013039375c60aa00313370e6eb4c154c1580040122941050182a9bac305400180120a441488991919800800817112cc00400629422b30013371e6eb8c15000400e294626600400460aa00282790521bae3051304e3754646644b3001304a3050375400513259800982518289baa0018992cc004c130c148dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca600260d0003375c60d0025375c60d0023375c60d001f306800e9bae306800d9bae306800c9834005cdd718340054c1a00266eb8c1a002260d000f375c60d000d30680059bae30680049834001cc1a00092222222222222222259800983d00944cc1b4dd6183c810912cc00400a26605001e26605001826605001426605001026605000c2660500082b300130713077375400713232323298009bae307f0019bae307f0049bae307f0039bae307f002488896600261080200b159800983c983f9baa01b8992cc004c214040062660f06eb0c210040048966002005103189918011844008019bae308601002421005164208046100026ea806e2c83f22c84080860fe00260fc00260fa00260f06ea800e2c83b2264600460fa0066eb8c1ec0090794590770c1a0004c19c004c198004c194004c190004c18c004c188004c184004c180004c17c004c178004c174004c170004c16c004c168004c164004c160004c14cdd5000c59051182a98291baa0018b20a0301530513754608e60a26ea8c150c144dd500145904f1982101611825192cc004c12cc140dd5000c5200089bad3054305137540028278c966002609660a06ea80062980103d87a8000899198008009bab30553052375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0f0006260a0660ae60aa00497ae08a60103d87a8000414d1330040043059003414c6eb8c14c004c158005054209e32330010013756608e60a26ea8c11cc144dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062609e660ac60a800497ae08a60103d87a80004149133004004305800341486eb8c148004c154005053112cc004c128c140dd500144c8c8c96600260b000513303f3057003132598009827000c4c96600260b400313232598009828800c4c96600260ba003133044305c0010098b20b4305837540051598009829000c4c8c8ca60026eb4c1780066eb4c17800e6eb4c178009222598009831002403a2c82f860bc00260ba00260b06ea800a2c82b1056182b1baa00130590018b20ae305537540051598009827800c56600260aa6ea800a00b16415916414c8298c14cdd5000c59055182b000982b00098289baa0028b209e375c60a203714a08262294104c452820988a50413060a200260a0002609e003300122372866e280080066e0120039b804801e44b300130453370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a400890102094914c00400666e04dc6801000c0097189b804803e44b30010018a5eb7bdb182264664464660020026600c00c60a800a44b300100189982999bb037520086ea000d2f5bded8c113298009bae30510019bad3052001982b0012444b300133720010007133057337606ea4020dd4003802c56600266e3c02000e2660ae66ec0dd48041ba800700189982b99bb037520066ea0008cc01801800505320a6182a000a0a4375c60980026eb4c134004c13c00504d4896600200314bd6f7b63044c8cc88c8cc004004cc018018c1500148966002003133053337606ea4010dd3001a5eb7bdb1822653001375c60a2003375660a4003305600248896600266e4002000e2660ae66ec0dd48041ba60070058acc004cdc7804001c4cc15ccdd81ba9008374c00e003133057337606ea400cdd300119803003000a0a6414c305400141486eb8c130004dd598268009827800a09a9112cc004cdc4000a40011480022b300130460018a400513259800982399b8600248012330010049800801ccdc18012400880222600330010049800801ccdc1980800124008802104c1b82002412c825a444653001001802400d0011112cc00400a200319800801cc15000a6600860a60040028019051496600266e1cdc6800a408110018b20929bad304d0029bab304d0019bae304d304e011982698251baa010488888888888888a6002444b300133712006900044cc04800800626602400200482d2444646600200200644b3001337120060031488100899b8b3301100500133002002301e00141712259800982a19b8600148012266e2d20fe033300d00233706002900244cdc5a400066e2ccc038008004cc034008cdc1980d800a400882ca601201330080089803803a444445300122225980099b890044800a2660333001004801c00500a00144cc06400a60026030009003800a014418522225980099b88004480122b300133710004900244cc0666002009003800a0144881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610089980ccc00401200748920000000000000000000000000000000000000000000000000000000000000000000402930013018002800d221200000000000000000000000000000000000000000000000000000000000000000004028830a2b300133712900200144cc065221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761009800980c002400e00280522660333001002800d22120000000000000000000000000000000000000000000000000000000000000000000402930013018004801d221200000000000000000000000000000000000000000000000000000000000000000004028830906148c0100064600600291111991199119194c00400609d3306b374e07a660d66e9c0fccc1acdd480925eb8297adef6c60a4001480029000200222222225980080345660026eb0c1c80162660e26e98010cc1c4dd4001998389ba8002330713750002660e260e460e660e600a97ae08b20e08cc004c1c801a60e600d30730059bac30720054888a6002444453001010804401600900380140050104dd6183b0014dd7183b183b8014c1d8c1ccdd5183b18399baa30693073375400891112cc004c1c4c1d8dd5000c56600266e3cdd7183d183b9baa0010648acc0040162d13322330550011323232332259800983b983e9baa0018994c004cc20404dd380419840809ba730830100b330810137526464b3001307a0018992cc004cdc799194c0040069000400d00111119192cc00400e2911200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b30013084010018994c0040126eb4c23c040066eb8c23c04c240040050051845809baa0028acc004c214040062646608466e2cdd69847809846009baa001375c6104026118026ea8004dd718281846009baa001308e01308f01308b0137540051323304233031375c611e020020106eb8c23c04c24004004c23c04c22c04dd50012112024224046112026ea8004c2300401226464b30013084010018994c0040126eb4c23c040066eb8c23c04c240040050051845809baa0028acc004c2140400626465300100b804c007300100a800c01500a4c24004c2440400902718031bad308f01001308b01375400513233223322980080740320039800806c006010806a61160266124026ea0cc10c008030cc24804dd49981a8010009984900984980984a0080225eb8102a1bae3091010023008001309001001375a611e020026116026ea8009089012112023089013754002611802008845008c2300400d08901111194c00402600f001cc0040220030044021002409860080046e00c118008dca0021817006c66002009376660fa66108026ea0018cc21004dd4003a5eb8200280da2c840008dd61842009840809baa0028acc004c1ec006264646644b3001307e308401375400513259800983f9842809baa0018991919912cc004c2380400e2b30013371f300100c8044019023181b00ac660020193766610a0266118026ea0cdc01bad308d01308a01375400a01c66118026ea0cdc01bad308001308a01375400a01e97ae080320468b2110028b211602375a6116020026eb4c22c04008c22c04004c21804dd5000c59084011844009842809baa0028b210602303c0013758610c02610e020046eb8c21404004c20404dd500145907f20fe307f375400261040201697ae0994c004006603c02b301e0064004444b30010028800c4ca6002009308701003cc00400a6eb8c208040066eacc20c0400644461020266110026e98ca6002003302600398130012002222598008014400626466453001006984800802cc8cc004004014896600200313309001337606ea4010dd4001a5eb7bdb1822653001375c611c02003375a611e0200330930100248896600266e4002000e2661280266ec0dd48041ba80070058acc004cdc7804001c4c9660026118026124026ea800626612a0266ec0dd4804984b009849809baa0010028801212202308d013309401375066e0001c0092f5c113309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280497ae041ac8020c21404009083014cdc00098024cdc000180956600266ebcc20804c1fcdd5001013c4cdc0008801c404507d201837660031641f0b300130750418800c4cdc199b8200104102741e860fe0073001001a40012298009bab307d002800c88c96600260f260fe6ea800626466e0000ccdc199b82375a6102020086eb4c21004004cc08d2014375a610802610a020026eb0c20c04c20004dd5000c5907e191919800800815912cc0040062980103d87a80008992cc004cdd79ba70043082010018983f1984280984180800a5eb82266006006610e02004840808c21404005083011984080983f0021984080983f00125eb8102a2050375660fa60fc00260f26ea8004c1ec014c96600260e060ee6ea8006260f660f06ea80062c83b0c1e8c1ecc1ecc1dcdd5183d183d983b9baa00841e119800806c03201700a804a00841d519800806c03201700a804a00841d420e02223322329800800d2000802200222259800800c4cc094cc0500140080122646644b3001306b002899194c00402a00f001cc00402200330780064021375c60ee60f00048078c008dd6983b00098391baa0038acc004c1b000a26465300100a803c0073001008800cc1e00190084c1dcc1e000900e18011bad307600130723754007132332298009bae30780029802000cc1e401d2229800807402e0059800806400a002806260e6660f46ea0cc0ac00cc0e8008cc1e8dd49980e8018011983d183d983e002a5eb810120c1dc004dd6983b00098391baa00341c08380c1bcdd50009b803030003307200141c06e5000cdca00111111198104c004016009302c003404130013301d005302c003cc0052000a40810015c6330014810290204005718cc005208001a40810015c6330014830006902040057184888896600266e24015200e899812cc00401600f003801400500c00244cc0940126002604000b007801c00a002806106d088888c96600330013370e0026eb4c1b8c1acdd5001528528a0d2899810cc00401a00b302d00440446644b3001337100069008456600266e200092010899811cc00400e00b002800a01248920b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a00899811cc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835a2b300133712900800144cc08d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980f001c016603c00500140251330239800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835906b1bad306e306b3754004660426eb8c184c1acdd50011bae302f306b37540051641a46603a00a605800644444b30013371200a900344cc07a600200b0048014005009001c4cc07800e6002603800b004801400500920cc22225980099b88004480222b300133710004900444cc0766002009003801400500724412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980ecc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004020832a2b300133712900400144cc0752212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980d802400e6036005001401d13301d980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402083290650304d001332259800982198249baa0018992cc004c110c128dd5000c4c8c8c8c96600260a6005133223304800122598008014566002609860a46ea8016264646644b3001305b00389982c9ba800833059374c00e660b3300159800991980080081e912cc00400629422b30013375e60b860b26ea8c17000402e294626600400460ba00282b905a44ca6002003010817a002222598008014528c5660033001375c60ba00502d9bae305d0015caa33001003982f0014c178005003452820b0416d14a082aa98103d87a8000a60103d8798000415497ae08b20b0375a60b00026eb8c160008c160004c14cdd5002c5905144c8c8c8cc896600260b8007132323322598009830001c4c028c18002e2c82e8dd6982e8009bad305d002305d001375860b000b1641646eb8c164004dd7182c801182c8009bac3053001305600241506eb4c148010dd59829001c5905018288009828800982800098259baa0018b2092304d304a37540031641206eb0c12c048c00406c8c966002608400314c103d87a80008992cc006600260866eb4c1280069429450484530103d87a800089822998261824800a5eb810484c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04a48896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034129001400c8238dc680098008009119800911191919bb032374e6609e60980026609e609a00297ae033760609600460960026098003300100691000c012007375a60960028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130440018cc004012007002918059ba800140391598009822800c6600200900399b80002480fe460166ea0c038cdc0a400000280722b30013370e004905f00c4c8cc0040048c030dd48009119803240044b3001300f001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014413119800802400e66e00009207f918059ba9001401c824904920928acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a66012012440032300e3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180799ba50030014034808904c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101412c825900e456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300b374e002804233001004801ccdc0001241fe0329800802c0126600e00e44003001918061ba700140288071049456600266e1c005200a8acc004cdc3801241fc0513232330010012300d374c002446600e900112cc004c0400062600497adef6c608919194c00401a4600c660aa004003375a60a40048030c8cdd8182a800982a982b0009bac30500019800804c0226020002802904d198030031100146600200900399b80002482fc0a464653001001801c8c038dd3000a0022225980099b89002480022600297adef6c608919194c00401a602a00b23005330560020019bad305300240186466ec0c158004c158c15c004dd61828800cc00402a01300140148270cc01c01c8800900e20928925ef6c610140000101200041248249049209233706002902011640e8303c001303b303b001303a303a303a001303930393039303930393039303900130380013033375400864b3001302b3032375400313036303337540031640c4606a606c606c60646ea8c0d40062c8198c8c8cc004004038896600200314bd7044cc8966002b30013375e6072606c6ea80080162646600200264660020026eacc0ecc0f0c0e0dd5002112cc004006297ae0899199119198008009bab303d0042259800800c400e264660826e9ccc104dd480299820981f00099820981f800a5eb80cc00c00cc10c008c10400503f1bae303900133003003303e002303c00140e844b30010018a508acc004cdc79bae303b3758607600206b14a3133002002303c00140d881ca294103444cc0e0008cc01001000626600800800281a0c0dc004c0e0005035181a18189baa30273031375400664b30013028302f375400313033303037540031640b8606460666066605e6ea8c0c8c0ccc0bcdd5000912cc004c0a8c0c0dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1180066eb8c11804a6eb8c1180466eb8c1180426eb8c11803e6eb8c11803a6eb8c1180366eb8c1180326eb8c11802e6eb4c1180266eb4c1180226eb0c11801e64b300130440018acc004cdc4a40086086003168981f1821800a0848b208a3754608c00d375a608c00b375a608c009375a608c007375c608c004911111111111111112cc004c16004a26606a60ae03626609600c44b300100281344c8c008c16c00cdd7182c80120ae8b20aa1823000982280098220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b00098189baa0028b205e30310038b205e1816000981580098131baa014899912cc004c0b00062646600a002264b300130233029375400313259800981218151baa0018acc004016264646600200201644b30010018a508acc004cdc79bae30310010038a518998010011819000a05840bc6eb8c0b8c0acdd5000c52820528b20523020302a3754605a60546ea80062c8140c0b0c0a4dd5000992cc004c084c0a0dd5000c4c0b0c0a4dd5000c5902718159816181618141baa302b302c3028375460560031640a46644b3001001801456600260580031325980098081bae302c001899b87375a6058605a0029000c528204e302c3758605600300240a4814852819198008009919800800803912cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a5eb8226644b30013371e6eb8c0b400805e2660586e9c008cc0100100062660080080028140dd618158009816000a05232323300100100d2259800800c52f5c11332259800acc004cdd7981718159baa302e302f302b375400400b132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009a0484090302430240023022004223259800980d000c4c8c8c966002605000513300830270030058b204a375c604c002604c00260426ea800e2b3001301b00189919192cc004c0a000a266010604e00600b1640946eb8c098004c098004c084dd5001c5660026032003132323259800981400144cc020c09c00c0162c8128dd71813000981300098109baa0038b203e407c80f8c07cdd500106eb8c058c04cdd50024590112022180918098021149a26cac8011", + "hash": "3e6116d91ea1e59a117633e541136c0dd1cac2a2fc88d1898dc59859" }, { "title": "l1_deposit_intent/spend_and_mint.l1_deposit_intent.mint", @@ -52,8 +52,8 @@ } } ], - "compiledCode": "593117010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd500148888c8cc004004014896600200313301c337606ea4014dd300225eb7bdb1822653001375c603400337566036003301f00248896600266e4002400e26604066ec0dd48049ba60080058acc004cdc7804801c4c9660026030603c6ea800626604266ec0dd48051811180f9baa0010028801203a9800804c022004803a26604066ec0dd48019ba600233006006001407080e0603a00280da6e3d220100488888a6002603c00d3758603a00d2259800980a980d9baa002899191919912cc004c09400e266018604800826601800400d16408860440026eb8c08800cc088004c084004c070dd500145901a48c8cc004004008896600200314bd6f7b63044ca60026eb8c0740066eacc0780066600600660440049114c004006007323200432330010010042259800800c5268992cc0040062b30013004375a604a6050005149a2c811a26644b3001337206eb8c098008dd71813000c566002600c6eb4c09c00a26600a00a660520026056007164095164094605000460500028130c0a000502514c004c06c006942945020488990090c08000501e2444466446530013756604800337586048604a604a604a604a0033758604800f2259800980e18111baa00289919192cc004c0a800a26600e605200626603a00244b300100280344c8c8cc084dd59815001112cc00400a2600a606000d132332230043033005375c60580026eb4c0b4004c0bc00902d1bae3028001302b00240a516409c6eacc0a0004c0a0004c08cdd50014590214dd61812001a44444b3001301f00f8992cc004c0ac0062646644b3001302330293754005132323259800981880144cc038c0c000c4cc09000489660020051598009919198008009919800800980a803112cc004006297ae0899199119198008009bab30370042259800800c400e264660766e9ccc0ecdd48029981d981c0009981d981c800a5eb80cc00c00cc0f4008c0ec0050391bae3033001330030033038002303600140d044b30010018a518992cc004cdc49bad303630373037001332232598009818181a9baa0018a40011375a6072606c6ea8005034192cc004c0c0c0d4dd5000c530103d87a8000899198008009bab303a3037375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062606a66078607400497ae08a60103d87a800040e1133004004303e00340e06eb8c0e0004c0ec005039206832330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062606866076607200497ae08a60103d87a800040dd133004004303d00340dc6eb8c0dc004c0e80050381bae3036001375c606c606e00313300300330370028a5040c46eb0c0d40050331bab3025302f375401110068a5040b513232330283756606200444b300100289802981b80344c8cc88c010c0e8014dd718198009bad3034001303600240d06eb8c0bc004c0c800903045902e1bab302f001302f001302a37540051640a064b30013021302837540031302c3029375400316409c60566058605860506ea8004cc89660020030028acc004c0b8006264b30013012375c605c00313025375a605c605e00314a08148c0b8dd61816800c00902b205614a06466002002646600200201244b30010018a5eb82264664464660020026eacc0bc01089660020031003899198199ba733033375200a66066606000266066606200297ae0330030033035002303300140c46eb8c0ac004cc00c00cc0c0008c0b800502c112cc004006297ae0899912cc004cdc79bae302f0020198998171ba700233004004001899802002000a0543758605a002605c0028158c0a80062c8140c8c8cc00400400c896600200314bd7044cc8966002b30013375e605c60566ea80080162646600200264660020026eacc0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009c566002604001f132323298009bac302c0019bac302c302d0019919800800807912cc004006297ae0899912cc004c8cc004004c8cc004004dd59819181998179baa30323033302f375400844b30010018a5eb82264664464660020026eacc0d0010896600200310038991981c1ba733038375200a66070606a00266070606c00297ae033003003303a002303800140d86eb8c0c0004cc00c00cc0d4008c0cc005031112cc00400629422b30013371e6eb8c0c8dd618190008164528c4cc008008c0cc00502d206089981780119802002000c4cc01001000502b18170009817800a0589bac302c0039bae302c00248888966002606400713233223300100213259800981b000c4c8cc00c0044c8c8c8c8c8ca6002607a003303c0049bad303c002488966002606a60766ea800a33001230403041304100191112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc7244103020408003370000490189180119bca4a2003124bded8c10140000101200040f881f103e4dc024003370e907f01cdc02400522337600046ea0005222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c03c0164600a660a0004003375a609a0048030c12c0066002013008800a00e4121222232330010010022233006480089660026014003130024bd70448c8ca600200d230063304f0020019bad304c002401860940033001008803cc028005006208e91114c00401200700291980200091801800a0124888c8c8c8c8c8c8c8c8c9660026090609a6ea8c144c1480162b300132323300100132330010013034375660a800e44b30010018a5eb82264664464660020026eacc158010896600200310038991982d1ba73305a375200a660b460ae002660b460b000297ae033003003305c002305a00141606eb8c148004cc00c00cc15c008c154005053112cc0040062946264b3001337126eb4c154c158c158004cc88c966002609e60a86ea80062900044dd6982c182a9baa001414c64b3001304f3054375400314c0103d87a8000899198008009bab30593056375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660b660b200497ae08a60103d87a8000415d133004004305d003415c6eb8c15c004c16800505820a632330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660b460b000497ae08a60103d87a80004159133004004305c00341586eb8c158004c1640050571bae3055001375c60aa60ac00313300300330560028a5041406eb0c150005052191919800800815912cc004006297adef6c6089919912cc004c134c14cdd5001456600266e3cdd7182b982a1baa0020068994c004006005375660b060b260aa6ea80110011112cc00400a2003132332298008034c178016646600200200a44b300100189982f19bb037520086e9800d2f5bded8c113298009bae305c0019bab305d00198308012444b300133720010007133062337606ea4020dd3003802c56600266e3c02000e264b3001305a30603754003133063337606ea4024c190c184dd50008014400905f192cc0056600200314a314a083122980103d87a80008982e198319ba60014bd7020be329800800c022006800888966002005100189919914c00401a60d400b32330010010052259800800c4cc1a8cdd81ba9004375000697adef6c608994c004dd71834000cdd69834800cc1b40092225980099b9000800389983719bb037520106ea001c0162b30013371e01000713259800983318361baa00189983799bb0375201260e060da6ea800400a20048358c96600260cc00314c0103d87a800089834198379ba80014bd7020d63370000e00513306e337606ea400cdd400119803003000a0d441a8306b00141a48030dd718318009bad306400130660024191133062337606ea400cdd300119803003000a0bc4178305f00141748030dd7182b8009bab3058001305a0024161100141491001414864b3001304d305237540031304e3305530563053375400297ae08a60103d87a8000414460aa60a46ea8c154c148dd500099801801982b001182a000a0a4375c60a203515980099baf01c3232323232323232323232323230563305d305e00d3305d305e00c3305d305e00b3305d305e00a3305d305e0093305d305e0083305d305e0073305d305e0063305d305e0053305d305e0043305d305e0033305d305e0023305d305e0013305d375066e00080dd6982f0079982e9ba8337006eb4c17808cdd6982f0071982e9ba8337006eb4c178088dd6982f0081982e982f182f807182f982f982f982f982f800982f000982e800982e000982d800982d000982c800982c000982b800982b000982a800982a000982980098271baa01f8acc006600266e05200032330010010232259800800c520008980819801001182a000a0a28a5099198008009919800800817912cc004006297ae0899199119198008009bab30550042259800800c400e264660b26e9ccc164dd48029982c982b0009982c982b800a5eb80cc00c00cc16c008c1640050571bae30510013300300330560023054001414844b30010018a5eb8226644b30013371e6eb8c1540080fe2660a86e9c008cc0100100062660080080028280dd61829800982a000a0a24889660020030028acc004c154006264b30013039375c60aa00313370e6eb4c154c1580040122941050182a9bac305400180120a441488991919800800817112cc00400629422b30013371e6eb8c15000400e294626600400460aa00282790521bae3051304e3754646644b3001304a3050375400513259800982518289baa0018992cc004c130c148dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca600260d0003375c60d0025375c60d0023375c60d001f306800e9bae306800d9bae306800c9834005cdd718340054c1a00266eb8c1a002260d000f375c60d000d30680059bae30680049834001cc1a00092222222222222222259800983d00944cc1b4dd6183c810912cc00400a26605001e26605001826605001426605001026605000c2660500082b300130713077375400713232323298009bae307f0019bae307f0049bae307f0039bae307f002488896600261080200b159800983c983f9baa01b8992cc004c214040062660f06eb0c210040048966002005103189918011844008019bae308601002421005164208046100026ea806e2c83f22c84080860fe00260fc00260fa00260f06ea800e2c83b2264600460fa0066eb8c1ec0090794590770c1a0004c19c004c198004c194004c190004c18c004c188004c184004c180004c17c004c178004c174004c170004c16c004c168004c164004c160004c14cdd5000c59051182a98291baa0018b20a0301530513754608e60a26ea8c150c144dd500145904f1982101611825192cc004c12cc140dd5000c5200089bad3054305137540028278c966002609660a06ea80062980103d87a8000899198008009bab30553052375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0f0006260a0660ae60aa00497ae08a60103d87a8000414d1330040043059003414c6eb8c14c004c158005054209e32330010013756608e60a26ea8c11cc144dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062609e660ac60a800497ae08a60103d87a80004149133004004305800341486eb8c148004c154005053112cc004c128c140dd500144c8c8c96600260b000513303f3057003132598009827000c4c96600260b400313232598009828800c4c96600260ba003133044305c0010098b20b4305837540051598009829000c4c8c8ca60026eb4c1780066eb4c17800e6eb4c178009222598009831002403a2c82f860bc00260ba00260b06ea800a2c82b1056182b1baa00130590018b20ae305537540051598009827800c56600260aa6ea800a00b16415916414c8298c14cdd5000c59055182b000982b00098289baa0028b209e375c60a203714a08262294104c452820988a50413060a200260a0002609e003300122372866e280080066e0120039b804801e44b300130453370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a400890102094914c00400666e04dc6801000c0097189b804803e44b30010018a5eb7bdb182264664464660020026600c00c60a800a44b300100189982999bb037520086ea000d2f5bded8c113298009bae30510019bad3052001982b0012444b300133720010007133057337606ea4020dd4003802c56600266e3c02000e2660ae66ec0dd48041ba800700189982b99bb037520066ea0008cc01801800505320a6182a000a0a4375c60980026eb4c134004c13c00504d4896600200314bd6f7b63044c8cc88c8cc004004cc018018c1500148966002003133053337606ea4010dd3001a5eb7bdb1822653001375c60a2003375660a4003305600248896600266e4002000e2660ae66ec0dd48041ba60070058acc004cdc7804001c4cc15ccdd81ba9008374c00e003133057337606ea400cdd300119803003000a0a6414c305400141486eb8c130004dd598268009827800a09a9112cc004cdc4000a40011480022b300130460018a400513259800982399b8600248012330010049800801ccdc18012400880222600330010049800801ccdc1980800124008802104c1b82002412c825a444653001001802400d0011112cc00400a200319800801cc15000a6600860a60040028019051496600266e1cdc6800a408110018b20929bad304d0029bab304d0019bae304d304e011982698251baa010488888888888888a6002444b300133712006900044cc04800800626602400200482d2444646600200200644b3001337120060031488100899b8b3301100500133002002301e00141712259800982a19b8600148012266e2d20fe033300d00233706002900244cdc5a400066e2ccc038008004cc034008cdc1980d800a400882ca601201330080089803803a444445300122225980099b890044800a2660333001004801c00500a00144cc06400a60026030009003800a014418522225980099b88004480122b300133710004900244cc0666002009003800a0144881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610089980ccc00401200748920000000000000000000000000000000000000000000000000000000000000000000402930013018002800d221200000000000000000000000000000000000000000000000000000000000000000004028830a2b300133712900200144cc065221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761009800980c002400e00280522660333001002800d22120000000000000000000000000000000000000000000000000000000000000000000402930013018004801d221200000000000000000000000000000000000000000000000000000000000000000004028830906148c0100064600600291111991199119194c00400609d3306b374e07a660d66e9c0fccc1acdd480925eb8297adef6c60a4001480029000200222222225980080345660026eb0c1c80162660e26e98010cc1c4dd4001998389ba8002330713750002660e260e460e660e600a97ae08b20e08cc004c1c801a60e600d30730059bac30720054888a6002444453001010804401600900380140050104dd6183b0014dd7183b183b8014c1d8c1ccdd5183b18399baa30693073375400891112cc004c1c4c1d8dd5000c56600266e3cdd7183d183b9baa0010648acc0040162d13322330550011323232332259800983b983e9baa001899194c004cc20804dd380499841009ba730840100c330820137526464b3001307b0018992cc004cdc799194c0040069000400d00111119192cc00400e2911200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b30013085010018994c0040126eb4c240040066eb8c24004c244040050051846009baa0028acc004c218040062646608666e2cdd69848009846809baa001375c610602611a026ea8004dd718289846809baa001308f01309001308c0137540051323304333032375c6120020020106eb8c24004c24404004c24004c23004dd50012114024228046114026ea8004c2340401226464b30013085010018994c0040126eb4c240040066eb8c24004c244040050051846009baa0028acc004c2180400626465300100b804c007300100a800c01500a4c24404c2480400902818031bad309001001308c01375400513233223322980080740320039800806c006010806a61180266126026ea0cc110008030cc24c04dd49981b0010009984980984a00984a8080225eb8102b1bae3092010023008001309101001375a6120020026118026ea800908a01211402308a013754002611a02008845808c2340400d08a01111194c00402600f001cc0040220030044021002409c60080046e00c11c008dca0021817807466002009376660fc6610a026ea001ccc21404dd400425eb8200280e22c840808dd61842809841009baa0028acc004c1f0006264646644b3001307f3085013754005132598009840009843009baa0018991919912cc004c23c0400e2b30013371f300100c8044019024181b80b4660020193766610c026611a026ea0cdc01bad308e01308b01375400a01e6611a026ea0cdc01bad308101308b01375400a02097ae080320488b2112028b211802375a6118020026eb4c23004008c23004004c21c04dd5000c59085011844809843009baa0028b210802303d0013758610e026110020046eb8c21804004c20804dd500145908001210002308001375400261060201897ae0994c004006603e02d301f0074004444b30010028800c4ca6002009308801003cc00400a6eb8c20c040066eacc2100400644461040266112026e98ca6002003302700398138012002222598008014400626466453001006984880802cc8cc004004014896600200313309101337606ea4010dd4001a5eb7bdb1822653001375c611e02003375a61200200330940100248896600266e4002000e26612a0266ec0dd48041ba80070058acc004cdc7804001c4c966002611a026126026ea800626612c0266ec0dd4804984b80984a009baa0010028801212402308e013309501375066e0001c0092f5c113309501337606ea400cdd400119803003000a122024244043092010014240048030dd71845008009bad308b01001308d01002422c0497ae041b08020c21804009084014cdc000a002ccdc0002009d6600266ebc0080a2266e00048012202483f100d1bb3001308101307e37540031641f0b300130750418800c4cdc199b8200104102741e860fe0073001001a40012298009bab307d002800c88c96600260f260fe6ea800626466e0000ccdc199b82375a6102020086eb4c21004004cc08d2014375a610802610a020026eb0c20c04c20004dd5000c5907e191919800800815912cc004006298103d87a80008992cc004cdd79ba70043082010018983f1984280984180800a5eb82266006006610e02004840808c21404005083011984080983f0021984080983f00125eb8102a2050375660fa60fc00260f26ea8004c1ec014c96600260e060ee6ea8006260f660f06ea80062c83b0c1e8c1ecc1ecc1dcdd5183d183d983b9baa00841e119800806c03201700a804a00841d519800806c03201700a804a00841d420e02223322329800800d2000802200222259800800c4cc094cc0500140080122646644b3001306b002899194c00402a00f001cc00402200330780064021375c60ee60f00048078c008dd6983b00098391baa0038acc004c1b000a26465300100a803c0073001008800cc1e00190084c1dcc1e000900e18011bad307600130723754007132332298009bae30780029802000cc1e401d2229800807402e0059800806400a002806260e6660f46ea0cc0ac00cc0e8008cc1e8dd49980e8018011983d183d983e002a5eb810120c1dc004dd6983b00098391baa00341c08380c1bcdd50009b803030003307200141c06e5000cdca00111111198104c004016009302c003404130013301d005302c003cc0052000a40810015c6330014810290204005718cc005208001a40810015c6330014830006902040057184888896600266e24015200e899812cc00401600f003801400500c00244cc0940126002604000b007801c00a002806106d088888c96600330013370e0026eb4c1b8c1acdd5001528528a0d2899810cc00401a00b302d00440446644b3001337100069008456600266e200092010899811cc00400e00b002800a01248920b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a00899811cc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835a2b300133712900800144cc08d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980f001c016603c00500140251330239800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835906b1bad306e306b3754004660426eb8c184c1acdd50011bae302f306b37540051641a46603a00a605800644444b30013371200a900344cc07a600200b0048014005009001c4cc07800e6002603800b004801400500920cc22225980099b88004480222b300133710004900444cc0766002009003801400500724412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980ecc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004020832a2b300133712900400144cc0752212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980d802400e6036005001401d13301d980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402083290650304d001332259800982198249baa0018992cc004c110c128dd5000c4c8c8c8c96600260a6005133223304800122598008014566002609860a46ea8016264646644b3001305b00389982c9ba800833059374c00e660b3300159800991980080081e912cc00400629422b30013375e60b860b26ea8c17000402e294626600400460ba00282b905a44ca6002003010817a002222598008014528c5660033001375c60ba00502d9bae305d0015caa33001003982f0014c178005003452820b0416d14a082aa98103d87a8000a60103d8798000415497ae08b20b0375a60b00026eb8c160008c160004c14cdd5002c5905144c8c8c8cc896600260b8007132323322598009830001c4c028c18002e2c82e8dd6982e8009bad305d002305d001375860b000b1641646eb8c164004dd7182c801182c8009bac3053001305600241506eb4c148010dd59829001c5905018288009828800982800098259baa0018b2092304d304a37540031641206eb0c12c048c00406c8c966002608400314c103d87a80008992cc006600260866eb4c1280069429450484530103d87a800089822998261824800a5eb810484c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04a48896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034129001400c8238dc680098008009119800911191919bb032374e6609e60980026609e609a00297ae033760609600460960026098003300100691000c012007375a60960028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130440018cc004012007002918059ba800140391598009822800c6600200900399b80002480fe460166ea0c038cdc0a400000280722b30013370e004905f00c4c8cc0040048c030dd48009119803240044b3001300f001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014413119800802400e66e00009207f918059ba9001401c824904920928acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a66012012440032300e3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180799ba50030014034808904c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101412c825900e456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300b374e002804233001004801ccdc0001241fe0329800802c0126600e00e44003001918061ba700140288071049456600266e1c005200a8acc004cdc3801241fc0513232330010012300d374c002446600e900112cc004c0400062600497adef6c608919194c00401a4600c660aa004003375a60a40048030c8cdd8182a800982a982b0009bac30500019800804c0226020002802904d198030031100146600200900399b80002482fc0a464653001001801c8c038dd3000a0022225980099b89002480022600297adef6c608919194c00401a602a00b23005330560020019bad305300240186466ec0c158004c158c15c004dd61828800cc00402a01300140148270cc01c01c8800900e20928925ef6c610140000101200041248249049209233706002902011640e8303c001303b303b001303a303a303a001303930393039303930393039303900130380013033375400864b3001302b3032375400313036303337540031640c4606a606c606c60646ea8c0d40062c8198c8c8cc004004038896600200314bd7044cc8966002b30013375e6072606c6ea80080162646600200264660020026eacc0ecc0f0c0e0dd5002112cc004006297ae0899199119198008009bab303d0042259800800c400e264660826e9ccc104dd480299820981f00099820981f800a5eb80cc00c00cc10c008c10400503f1bae303900133003003303e002303c00140e844b30010018a508acc004cdc79bae303b3758607600206b14a3133002002303c00140d881ca294103444cc0e0008cc01001000626600800800281a0c0dc004c0e0005035181a18189baa30273031375400664b30013028302f375400313033303037540031640b8606460666066605e6ea8c0c8c0ccc0bcdd5000912cc004c0a8c0c0dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1180066eb8c11804a6eb8c1180466eb8c1180426eb8c11803e6eb8c11803a6eb8c1180366eb8c1180326eb8c11802e6eb4c1180266eb4c1180226eb0c11801e64b300130440018acc004cdc4a40086086003168981f1821800a0848b208a3754608c00d375a608c00b375a608c009375a608c007375c608c004911111111111111112cc004c16004a26606a60ae03626609600c44b300100281344c8c008c16c00cdd7182c80120ae8b20aa1823000982280098220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b00098189baa0028b205e30310038b205e1816000981580098131baa014899912cc004c0b00062646600a002264b300130233029375400313259800981218151baa0018acc004016264646600200201644b30010018a508acc004cdc79bae30310010038a518998010011819000a05840bc6eb8c0b8c0acdd5000c52820528b20523020302a3754605a60546ea80062c8140c0b0c0a4dd5000992cc004c084c0a0dd5000c4c0b0c0a4dd5000c5902718159816181618141baa302b302c3028375460560031640a46644b3001001801456600260580031325980098081bae302c001899b87375a6058605a0029000c528204e302c3758605600300240a4814852819198008009919800800803912cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a5eb8226644b30013371e6eb8c0b400805e2660586e9c008cc0100100062660080080028140dd618158009816000a05232323300100100d2259800800c52f5c11332259800acc004cdd7981718159baa302e302f302b375400400b132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009a0484090302430240023022004223259800980d000c4c8c8c966002605000513300830270030058b204a375c604c002604c00260426ea800e2b3001301b00189919192cc004c0a000a266010604e00600b1640946eb8c098004c098004c084dd5001c5660026032003132323259800981400144cc020c09c00c0162c8128dd71813000981300098109baa0038b203e407c80f8c07cdd500106eb8c058c04cdd50024590112022180918098021149a26cac8011", - "hash": "707d2c94ad4fbe1b4927825f66868178778c010dd2a6f7ca9fffc755" + "compiledCode": "593111010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd500148888c8cc004004014896600200313301c337606ea4014dd300225eb7bdb1822653001375c603400337566036003301f00248896600266e4002400e26604066ec0dd48049ba60080058acc004cdc7804801c4c9660026030603c6ea800626604266ec0dd48051811180f9baa0010028801203a9800804c022004803a26604066ec0dd48019ba600233006006001407080e0603a00280da6e3d220100488888a6002603c00d3758603a00d2259800980a980d9baa002899191919912cc004c09400e266018604800826601800400d16408860440026eb8c08800cc088004c084004c070dd500145901a48c8cc004004008896600200314bd6f7b63044ca60026eb8c0740066eacc0780066600600660440049114c004006007323200432330010010042259800800c5268992cc0040062b30013004375a604a6050005149a2c811a26644b3001337206eb8c098008dd71813000c566002600c6eb4c09c00a26600a00a660520026056007164095164094605000460500028130c0a000502514c004c06c006942945020488990090c08000501e2444466446530013756604800337586048604a604a604a604a0033758604800f2259800980e18111baa00289919192cc004c0a800a26600e605200626603a00244b300100280344c8c8cc084dd59815001112cc00400a2600a606000d132332230043033005375c60580026eb4c0b4004c0bc00902d1bae3028001302b00240a516409c6eacc0a0004c0a0004c08cdd50014590214dd61812001a44444b3001301f00f8992cc004c0ac0062646644b3001302330293754005132323259800981880144cc038c0c000c4cc09000489660020051598009919198008009919800800980a803112cc004006297ae0899199119198008009bab30370042259800800c400e264660766e9ccc0ecdd48029981d981c0009981d981c800a5eb80cc00c00cc0f4008c0ec0050391bae3033001330030033038002303600140d044b30010018a518992cc004cdc49bad303630373037001332232598009818181a9baa0018a40011375a6072606c6ea8005034192cc004c0c0c0d4dd5000c530103d87a8000899198008009bab303a3037375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062606a66078607400497ae08a60103d87a800040e1133004004303e00340e06eb8c0e0004c0ec005039206832330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062606866076607200497ae08a60103d87a800040dd133004004303d00340dc6eb8c0dc004c0e80050381bae3036001375c606c606e00313300300330370028a5040c46eb0c0d40050331bab3025302f375401110068a5040b513232330283756606200444b300100289802981b80344c8cc88c010c0e8014dd718198009bad3034001303600240d06eb8c0bc004c0c800903045902e1bab302f001302f001302a37540051640a064b30013021302837540031302c3029375400316409c60566058605860506ea8004cc89660020030028acc004c0b8006264b30013012375c605c00313025375a605c605e00314a08148c0b8dd61816800c00902b205614a06466002002646600200201244b30010018a5eb82264664464660020026eacc0bc01089660020031003899198199ba733033375200a66066606000266066606200297ae0330030033035002303300140c46eb8c0ac004cc00c00cc0c0008c0b800502c112cc004006297ae0899912cc004cdc79bae302f0020198998171ba700233004004001899802002000a0543758605a002605c0028158c0a80062c8140c8c8cc00400400c896600200314bd7044cc8966002b30013375e605c60566ea80080162646600200264660020026eacc0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009c566002604001f132323298009bac302c0019bac302c302d0019919800800807912cc004006297ae0899912cc004c8cc004004c8cc004004dd59819181998179baa30323033302f375400844b30010018a5eb82264664464660020026eacc0d0010896600200310038991981c1ba733038375200a66070606a00266070606c00297ae033003003303a002303800140d86eb8c0c0004cc00c00cc0d4008c0cc005031112cc00400629422b30013371e6eb8c0c8dd618190008164528c4cc008008c0cc00502d206089981780119802002000c4cc01001000502b18170009817800a0589bac302c0039bae302c00248888966002606400713233223300100213259800981b000c4c8cc00c0044c8c8c8c8c8ca6002607a003303c0049bad303c002488966002606a60766ea800a33001230403041304100191112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc7244103020408003370000490189180119bca4a2003124bded8c10140000101200040f881f103e4dc024003370e907f01cdc02400522337600046ea0005222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c03c0164600a660a0004003375a609a0048030c12c0066002013008800a00e4121222232330010010022233006480089660026014003130024bd70448c8ca600200d230063304f0020019bad304c002401860940033001008803cc028005006208e91114c00401200700291980200091801800a0124888c8c8c8c8c8c8c8c8c9660026090609a6ea8c144c1480162b300132323300100132330010013034375660a800e44b30010018a5eb82264664464660020026eacc158010896600200310038991982d1ba73305a375200a660b460ae002660b460b000297ae033003003305c002305a00141606eb8c148004cc00c00cc15c008c154005053112cc0040062946264b3001337126eb4c154c158c158004cc88c966002609e60a86ea80062900044dd6982c182a9baa001414c64b3001304f3054375400314c0103d87a8000899198008009bab30593056375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660b660b200497ae08a60103d87a8000415d133004004305d003415c6eb8c15c004c16800505820a632330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660b460b000497ae08a60103d87a80004159133004004305c00341586eb8c158004c1640050571bae3055001375c60aa60ac00313300300330560028a5041406eb0c150005052191919800800815912cc004006297adef6c6089919912cc004c134c14cdd5001456600266e3cdd7182b982a1baa0020068994c004006005375660b060b260aa6ea80110011112cc00400a2003132332298008034c178016646600200200a44b300100189982f19bb037520086e9800d2f5bded8c113298009bae305c0019bab305d00198308012444b300133720010007133062337606ea4020dd3003802c56600266e3c02000e264b3001305a30603754003133063337606ea4024c190c184dd50008014400905f192cc0056600200314a314a083122980103d87a80008982e198319ba60014bd7020be329800800c022006800888966002005100189919914c00401a60d400b32330010010052259800800c4cc1a8cdd81ba9004375000697adef6c608994c004dd71834000cdd69834800cc1b40092225980099b9000800389983719bb037520106ea001c0162b30013371e01000713259800983318361baa00189983799bb0375201260e060da6ea800400a20048358c96600260cc00314c0103d87a800089834198379ba80014bd7020d63370000e00513306e337606ea400cdd400119803003000a0d441a8306b00141a48030dd718318009bad306400130660024191133062337606ea400cdd300119803003000a0bc4178305f00141748030dd7182b8009bab3058001305a0024161100141491001414864b3001304d305237540031304e3305530563053375400297ae08a60103d87a8000414460aa60a46ea8c154c148dd500099801801982b001182a000a0a4375c60a203515980099baf01c3232323232323232323232323230563305d305e00d3305d305e00c3305d305e00b3305d305e00a3305d305e0093305d305e0083305d305e0073305d305e0063305d305e0053305d305e0043305d305e0033305d305e0023305d305e0013305d375066e00080dd6982f0079982e9ba8337006eb4c17808cdd6982f0071982e9ba8337006eb4c178088dd6982f0081982e982f182f807182f982f982f982f982f800982f000982e800982e000982d800982d000982c800982c000982b800982b000982a800982a000982980098271baa01f8acc006600266e05200032330010010232259800800c520008980819801001182a000a0a28a5099198008009919800800817912cc004006297ae0899199119198008009bab30550042259800800c400e264660b26e9ccc164dd48029982c982b0009982c982b800a5eb80cc00c00cc16c008c1640050571bae30510013300300330560023054001414844b30010018a5eb8226644b30013371e6eb8c1540080fe2660a86e9c008cc0100100062660080080028280dd61829800982a000a0a24889660020030028acc004c154006264b30013039375c60aa00313370e6eb4c154c1580040122941050182a9bac305400180120a441488991919800800817112cc00400629422b30013371e6eb8c15000400e294626600400460aa00282790521bae3051304e3754646644b3001304a3050375400513259800982518289baa0018992cc004c130c148dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca600260d0003375c60d0025375c60d0023375c60d001f306800e9bae306800d9bae306800c9834005cdd718340054c1a00266eb8c1a002260d000f375c60d000d30680059bae30680049834001cc1a00092222222222222222259800983d00944cc1b4dd6183c810912cc00400a26605001e26605001826605001426605001026605000c2660500082b300130713077375400713232323298009bae307f0019bae307f0049bae307f0039bae307f002488896600261080200b159800983c983f9baa01b8992cc004c214040062660f06eb0c210040048966002005103189918011844008019bae308601002421005164208046100026ea806e2c83f22c84080860fe00260fc00260fa00260f06ea800e2c83b2264600460fa0066eb8c1ec0090794590770c1a0004c19c004c198004c194004c190004c18c004c188004c184004c180004c17c004c178004c174004c170004c16c004c168004c164004c160004c14cdd5000c59051182a98291baa0018b20a0301530513754608e60a26ea8c150c144dd500145904f1982101611825192cc004c12cc140dd5000c5200089bad3054305137540028278c966002609660a06ea80062980103d87a8000899198008009bab30553052375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0f0006260a0660ae60aa00497ae08a60103d87a8000414d1330040043059003414c6eb8c14c004c158005054209e32330010013756608e60a26ea8c11cc144dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062609e660ac60a800497ae08a60103d87a80004149133004004305800341486eb8c148004c154005053112cc004c128c140dd500144c8c8c96600260b000513303f3057003132598009827000c4c96600260b400313232598009828800c4c96600260ba003133044305c0010098b20b4305837540051598009829000c4c8c8ca60026eb4c1780066eb4c17800e6eb4c178009222598009831002403a2c82f860bc00260ba00260b06ea800a2c82b1056182b1baa00130590018b20ae305537540051598009827800c56600260aa6ea800a00b16415916414c8298c14cdd5000c59055182b000982b00098289baa0028b209e375c60a203714a08262294104c452820988a50413060a200260a0002609e003300122372866e280080066e0120039b804801e44b300130453370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a400890102094914c00400666e04dc6801000c0097189b804803e44b30010018a5eb7bdb182264664464660020026600c00c60a800a44b300100189982999bb037520086ea000d2f5bded8c113298009bae30510019bad3052001982b0012444b300133720010007133057337606ea4020dd4003802c56600266e3c02000e2660ae66ec0dd48041ba800700189982b99bb037520066ea0008cc01801800505320a6182a000a0a4375c60980026eb4c134004c13c00504d4896600200314bd6f7b63044c8cc88c8cc004004cc018018c1500148966002003133053337606ea4010dd3001a5eb7bdb1822653001375c60a2003375660a4003305600248896600266e4002000e2660ae66ec0dd48041ba60070058acc004cdc7804001c4cc15ccdd81ba9008374c00e003133057337606ea400cdd300119803003000a0a6414c305400141486eb8c130004dd598268009827800a09a9112cc004cdc4000a40011480022b300130460018a400513259800982399b8600248012330010049800801ccdc18012400880222600330010049800801ccdc1980800124008802104c1b82002412c825a444653001001802400d0011112cc00400a200319800801cc15000a6600860a60040028019051496600266e1cdc6800a408110018b20929bad304d0029bab304d0019bae304d304e011982698251baa010488888888888888a6002444b300133712006900044cc04800800626602400200482d2444646600200200644b3001337120060031488100899b8b3301100500133002002301e00141712259800982a19b8600148012266e2d20fe033300d00233706002900244cdc5a400066e2ccc038008004cc034008cdc1980d800a400882ca601201330080089803803a444445300122225980099b890044800a2660333001004801c00500a00144cc06400a60026030009003800a014418522225980099b88004480122b300133710004900244cc0666002009003800a0144881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610089980ccc00401200748920000000000000000000000000000000000000000000000000000000000000000000402930013018002800d221200000000000000000000000000000000000000000000000000000000000000000004028830a2b300133712900200144cc065221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761009800980c002400e00280522660333001002800d22120000000000000000000000000000000000000000000000000000000000000000000402930013018004801d221200000000000000000000000000000000000000000000000000000000000000000004028830906148c0100064600600291111991199119194c00400609d3306b374e07a660d66e9c0fccc1acdd480925eb8297adef6c60a4001480029000200222222225980080345660026eb0c1c80162660e26e98010cc1c4dd4001998389ba8002330713750002660e260e460e660e600a97ae08b20e08cc004c1c801a60e600d30730059bac30720054888a6002444453001010804401600900380140050104dd6183b0014dd7183b183b8014c1d8c1ccdd5183b18399baa30693073375400891112cc004c1c4c1d8dd5000c56600266e3cdd7183d183b9baa0010648acc0040162d13322330550011323232332259800983b983e9baa0018994c004cc20404dd380419840809ba730830100b330810137526464b3001307a0018992cc004cdc799194c0040069000400d00111119192cc00400e2911200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b30013084010018994c0040126eb4c23c040066eb8c23c04c240040050051845809baa0028acc004c214040062646608466e2cdd69847809846009baa001375c6104026118026ea8004dd718281846009baa001308e01308f01308b0137540051323304233031375c611e020020106eb8c23c04c24004004c23c04c22c04dd50012112024224046112026ea8004c2300401226464b30013084010018994c0040126eb4c23c040066eb8c23c04c240040050051845809baa0028acc004c2140400626465300100b804c007300100a800c01500a4c24004c2440400902718031bad308f01001308b01375400513233223322980080740320039800806c006010806a61160266124026ea0cc10c008030cc24804dd49981a8010009984900984980984a0080225eb8102a1bae3091010023008001309001001375a611e020026116026ea8009089012112023089013754002611802008845008c2300400d08901111194c00402600f001cc0040220030044021002409860080046e00c118008dca0021817006c66002009376660fa66108026ea0018cc21004dd4003a5eb8200280da2c840008dd61842009840809baa0028acc004c1ec006264646644b3001307e308401375400513259800983f9842809baa0018991919912cc004c2380400e2b30013371f300100c8044019023181b00ac660020193766610a0266118026ea0cdc01bad308d01308a01375400a01c66118026ea0cdc01bad308001308a01375400a01e97ae080320468b2110028b211602375a6116020026eb4c22c04008c22c04004c21804dd5000c59084011844009842809baa0028b210602303c0013758610c02610e020046eb8c21404004c20404dd500145907f20fe307f375400261040201697ae0994c004006603c02b301e0064004444b30010028800c4ca6002009308701003cc00400a6eb8c208040066eacc20c0400644461020266110026e98ca6002003302600398130012002222598008014400626466453001006984800802cc8cc004004014896600200313309001337606ea4010dd4001a5eb7bdb1822653001375c611c02003375a611e0200330930100248896600266e4002000e2661280266ec0dd48041ba80070058acc004cdc7804001c4c9660026118026124026ea800626612a0266ec0dd4804984b009849809baa0010028801212202308d013309401375066e0001c0092f5c113309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280497ae041ac8020c21404009083014cdc00098024cdc000180956600266ebcc20804c1fcdd5001013c4cdc0008801c404507d201837660031641f0b300130750418800c4cdc199b8200104102741e860fe0073001001a40012298009bab307d002800c88c96600260f260fe6ea800626466e0000ccdc199b82375a6102020086eb4c21004004cc08d2014375a610802610a020026eb0c20c04c20004dd5000c5907e191919800800815912cc0040062980103d87a80008992cc004cdd79ba70043082010018983f1984280984180800a5eb82266006006610e02004840808c21404005083011984080983f0021984080983f00125eb8102a2050375660fa60fc00260f26ea8004c1ec014c96600260e060ee6ea8006260f660f06ea80062c83b0c1e8c1ecc1ecc1dcdd5183d183d983b9baa00841e119800806c03201700a804a00841d519800806c03201700a804a00841d420e02223322329800800d2000802200222259800800c4cc094cc0500140080122646644b3001306b002899194c00402a00f001cc00402200330780064021375c60ee60f00048078c008dd6983b00098391baa0038acc004c1b000a26465300100a803c0073001008800cc1e00190084c1dcc1e000900e18011bad307600130723754007132332298009bae30780029802000cc1e401d2229800807402e0059800806400a002806260e6660f46ea0cc0ac00cc0e8008cc1e8dd49980e8018011983d183d983e002a5eb810120c1dc004dd6983b00098391baa00341c08380c1bcdd50009b803030003307200141c06e5000cdca00111111198104c004016009302c003404130013301d005302c003cc0052000a40810015c6330014810290204005718cc005208001a40810015c6330014830006902040057184888896600266e24015200e899812cc00401600f003801400500c00244cc0940126002604000b007801c00a002806106d088888c96600330013370e0026eb4c1b8c1acdd5001528528a0d2899810cc00401a00b302d00440446644b3001337100069008456600266e200092010899811cc00400e00b002800a01248920b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a00899811cc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835a2b300133712900800144cc08d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980f001c016603c00500140251330239800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835906b1bad306e306b3754004660426eb8c184c1acdd50011bae302f306b37540051641a46603a00a605800644444b30013371200a900344cc07a600200b0048014005009001c4cc07800e6002603800b004801400500920cc22225980099b88004480222b300133710004900444cc0766002009003801400500724412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980ecc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004020832a2b300133712900400144cc0752212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980d802400e6036005001401d13301d980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402083290650304d001332259800982198249baa0018992cc004c110c128dd5000c4c8c8c8c96600260a6005133223304800122598008014566002609860a46ea8016264646644b3001305b00389982c9ba800833059374c00e660b3300159800991980080081e912cc00400629422b30013375e60b860b26ea8c17000402e294626600400460ba00282b905a44ca6002003010817a002222598008014528c5660033001375c60ba00502d9bae305d0015caa33001003982f0014c178005003452820b0416d14a082aa98103d87a8000a60103d8798000415497ae08b20b0375a60b00026eb8c160008c160004c14cdd5002c5905144c8c8c8cc896600260b8007132323322598009830001c4c028c18002e2c82e8dd6982e8009bad305d002305d001375860b000b1641646eb8c164004dd7182c801182c8009bac3053001305600241506eb4c148010dd59829001c5905018288009828800982800098259baa0018b2092304d304a37540031641206eb0c12c048c00406c8c966002608400314c103d87a80008992cc006600260866eb4c1280069429450484530103d87a800089822998261824800a5eb810484c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04a48896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034129001400c8238dc680098008009119800911191919bb032374e6609e60980026609e609a00297ae033760609600460960026098003300100691000c012007375a60960028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130440018cc004012007002918059ba800140391598009822800c6600200900399b80002480fe460166ea0c038cdc0a400000280722b30013370e004905f00c4c8cc0040048c030dd48009119803240044b3001300f001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014413119800802400e66e00009207f918059ba9001401c824904920928acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a66012012440032300e3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180799ba50030014034808904c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101412c825900e456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300b374e002804233001004801ccdc0001241fe0329800802c0126600e00e44003001918061ba700140288071049456600266e1c005200a8acc004cdc3801241fc0513232330010012300d374c002446600e900112cc004c0400062600497adef6c608919194c00401a4600c660aa004003375a60a40048030c8cdd8182a800982a982b0009bac30500019800804c0226020002802904d198030031100146600200900399b80002482fc0a464653001001801c8c038dd3000a0022225980099b89002480022600297adef6c608919194c00401a602a00b23005330560020019bad305300240186466ec0c158004c158c15c004dd61828800cc00402a01300140148270cc01c01c8800900e20928925ef6c610140000101200041248249049209233706002902011640e8303c001303b303b001303a303a303a001303930393039303930393039303900130380013033375400864b3001302b3032375400313036303337540031640c4606a606c606c60646ea8c0d40062c8198c8c8cc004004038896600200314bd7044cc8966002b30013375e6072606c6ea80080162646600200264660020026eacc0ecc0f0c0e0dd5002112cc004006297ae0899199119198008009bab303d0042259800800c400e264660826e9ccc104dd480299820981f00099820981f800a5eb80cc00c00cc10c008c10400503f1bae303900133003003303e002303c00140e844b30010018a508acc004cdc79bae303b3758607600206b14a3133002002303c00140d881ca294103444cc0e0008cc01001000626600800800281a0c0dc004c0e0005035181a18189baa30273031375400664b30013028302f375400313033303037540031640b8606460666066605e6ea8c0c8c0ccc0bcdd5000912cc004c0a8c0c0dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1180066eb8c11804a6eb8c1180466eb8c1180426eb8c11803e6eb8c11803a6eb8c1180366eb8c1180326eb8c11802e6eb4c1180266eb4c1180226eb0c11801e64b300130440018acc004cdc4a40086086003168981f1821800a0848b208a3754608c00d375a608c00b375a608c009375a608c007375c608c004911111111111111112cc004c16004a26606a60ae03626609600c44b300100281344c8c008c16c00cdd7182c80120ae8b20aa1823000982280098220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b00098189baa0028b205e30310038b205e1816000981580098131baa014899912cc004c0b00062646600a002264b300130233029375400313259800981218151baa0018acc004016264646600200201644b30010018a508acc004cdc79bae30310010038a518998010011819000a05840bc6eb8c0b8c0acdd5000c52820528b20523020302a3754605a60546ea80062c8140c0b0c0a4dd5000992cc004c084c0a0dd5000c4c0b0c0a4dd5000c5902718159816181618141baa302b302c3028375460560031640a46644b3001001801456600260580031325980098081bae302c001899b87375a6058605a0029000c528204e302c3758605600300240a4814852819198008009919800800803912cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a5eb8226644b30013371e6eb8c0b400805e2660586e9c008cc0100100062660080080028140dd618158009816000a05232323300100100d2259800800c52f5c11332259800acc004cdd7981718159baa302e302f302b375400400b132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009a0484090302430240023022004223259800980d000c4c8c8c966002605000513300830270030058b204a375c604c002604c00260426ea800e2b3001301b00189919192cc004c0a000a266010604e00600b1640946eb8c098004c098004c084dd5001c5660026032003132323259800981400144cc020c09c00c0162c8128dd71813000981300098109baa0038b203e407c80f8c07cdd500106eb8c058c04cdd50024590112022180918098021149a26cac8011", + "hash": "3e6116d91ea1e59a117633e541136c0dd1cac2a2fc88d1898dc59859" }, { "title": "l1_deposit_intent/spend_and_mint.l1_deposit_intent.else", @@ -68,8 +68,8 @@ } } ], - "compiledCode": "593117010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd500148888c8cc004004014896600200313301c337606ea4014dd300225eb7bdb1822653001375c603400337566036003301f00248896600266e4002400e26604066ec0dd48049ba60080058acc004cdc7804801c4c9660026030603c6ea800626604266ec0dd48051811180f9baa0010028801203a9800804c022004803a26604066ec0dd48019ba600233006006001407080e0603a00280da6e3d220100488888a6002603c00d3758603a00d2259800980a980d9baa002899191919912cc004c09400e266018604800826601800400d16408860440026eb8c08800cc088004c084004c070dd500145901a48c8cc004004008896600200314bd6f7b63044ca60026eb8c0740066eacc0780066600600660440049114c004006007323200432330010010042259800800c5268992cc0040062b30013004375a604a6050005149a2c811a26644b3001337206eb8c098008dd71813000c566002600c6eb4c09c00a26600a00a660520026056007164095164094605000460500028130c0a000502514c004c06c006942945020488990090c08000501e2444466446530013756604800337586048604a604a604a604a0033758604800f2259800980e18111baa00289919192cc004c0a800a26600e605200626603a00244b300100280344c8c8cc084dd59815001112cc00400a2600a606000d132332230043033005375c60580026eb4c0b4004c0bc00902d1bae3028001302b00240a516409c6eacc0a0004c0a0004c08cdd50014590214dd61812001a44444b3001301f00f8992cc004c0ac0062646644b3001302330293754005132323259800981880144cc038c0c000c4cc09000489660020051598009919198008009919800800980a803112cc004006297ae0899199119198008009bab30370042259800800c400e264660766e9ccc0ecdd48029981d981c0009981d981c800a5eb80cc00c00cc0f4008c0ec0050391bae3033001330030033038002303600140d044b30010018a518992cc004cdc49bad303630373037001332232598009818181a9baa0018a40011375a6072606c6ea8005034192cc004c0c0c0d4dd5000c530103d87a8000899198008009bab303a3037375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062606a66078607400497ae08a60103d87a800040e1133004004303e00340e06eb8c0e0004c0ec005039206832330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062606866076607200497ae08a60103d87a800040dd133004004303d00340dc6eb8c0dc004c0e80050381bae3036001375c606c606e00313300300330370028a5040c46eb0c0d40050331bab3025302f375401110068a5040b513232330283756606200444b300100289802981b80344c8cc88c010c0e8014dd718198009bad3034001303600240d06eb8c0bc004c0c800903045902e1bab302f001302f001302a37540051640a064b30013021302837540031302c3029375400316409c60566058605860506ea8004cc89660020030028acc004c0b8006264b30013012375c605c00313025375a605c605e00314a08148c0b8dd61816800c00902b205614a06466002002646600200201244b30010018a5eb82264664464660020026eacc0bc01089660020031003899198199ba733033375200a66066606000266066606200297ae0330030033035002303300140c46eb8c0ac004cc00c00cc0c0008c0b800502c112cc004006297ae0899912cc004cdc79bae302f0020198998171ba700233004004001899802002000a0543758605a002605c0028158c0a80062c8140c8c8cc00400400c896600200314bd7044cc8966002b30013375e605c60566ea80080162646600200264660020026eacc0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009c566002604001f132323298009bac302c0019bac302c302d0019919800800807912cc004006297ae0899912cc004c8cc004004c8cc004004dd59819181998179baa30323033302f375400844b30010018a5eb82264664464660020026eacc0d0010896600200310038991981c1ba733038375200a66070606a00266070606c00297ae033003003303a002303800140d86eb8c0c0004cc00c00cc0d4008c0cc005031112cc00400629422b30013371e6eb8c0c8dd618190008164528c4cc008008c0cc00502d206089981780119802002000c4cc01001000502b18170009817800a0589bac302c0039bae302c00248888966002606400713233223300100213259800981b000c4c8cc00c0044c8c8c8c8c8ca6002607a003303c0049bad303c002488966002606a60766ea800a33001230403041304100191112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc7244103020408003370000490189180119bca4a2003124bded8c10140000101200040f881f103e4dc024003370e907f01cdc02400522337600046ea0005222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c03c0164600a660a0004003375a609a0048030c12c0066002013008800a00e4121222232330010010022233006480089660026014003130024bd70448c8ca600200d230063304f0020019bad304c002401860940033001008803cc028005006208e91114c00401200700291980200091801800a0124888c8c8c8c8c8c8c8c8c9660026090609a6ea8c144c1480162b300132323300100132330010013034375660a800e44b30010018a5eb82264664464660020026eacc158010896600200310038991982d1ba73305a375200a660b460ae002660b460b000297ae033003003305c002305a00141606eb8c148004cc00c00cc15c008c154005053112cc0040062946264b3001337126eb4c154c158c158004cc88c966002609e60a86ea80062900044dd6982c182a9baa001414c64b3001304f3054375400314c0103d87a8000899198008009bab30593056375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660b660b200497ae08a60103d87a8000415d133004004305d003415c6eb8c15c004c16800505820a632330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660b460b000497ae08a60103d87a80004159133004004305c00341586eb8c158004c1640050571bae3055001375c60aa60ac00313300300330560028a5041406eb0c150005052191919800800815912cc004006297adef6c6089919912cc004c134c14cdd5001456600266e3cdd7182b982a1baa0020068994c004006005375660b060b260aa6ea80110011112cc00400a2003132332298008034c178016646600200200a44b300100189982f19bb037520086e9800d2f5bded8c113298009bae305c0019bab305d00198308012444b300133720010007133062337606ea4020dd3003802c56600266e3c02000e264b3001305a30603754003133063337606ea4024c190c184dd50008014400905f192cc0056600200314a314a083122980103d87a80008982e198319ba60014bd7020be329800800c022006800888966002005100189919914c00401a60d400b32330010010052259800800c4cc1a8cdd81ba9004375000697adef6c608994c004dd71834000cdd69834800cc1b40092225980099b9000800389983719bb037520106ea001c0162b30013371e01000713259800983318361baa00189983799bb0375201260e060da6ea800400a20048358c96600260cc00314c0103d87a800089834198379ba80014bd7020d63370000e00513306e337606ea400cdd400119803003000a0d441a8306b00141a48030dd718318009bad306400130660024191133062337606ea400cdd300119803003000a0bc4178305f00141748030dd7182b8009bab3058001305a0024161100141491001414864b3001304d305237540031304e3305530563053375400297ae08a60103d87a8000414460aa60a46ea8c154c148dd500099801801982b001182a000a0a4375c60a203515980099baf01c3232323232323232323232323230563305d305e00d3305d305e00c3305d305e00b3305d305e00a3305d305e0093305d305e0083305d305e0073305d305e0063305d305e0053305d305e0043305d305e0033305d305e0023305d305e0013305d375066e00080dd6982f0079982e9ba8337006eb4c17808cdd6982f0071982e9ba8337006eb4c178088dd6982f0081982e982f182f807182f982f982f982f982f800982f000982e800982e000982d800982d000982c800982c000982b800982b000982a800982a000982980098271baa01f8acc006600266e05200032330010010232259800800c520008980819801001182a000a0a28a5099198008009919800800817912cc004006297ae0899199119198008009bab30550042259800800c400e264660b26e9ccc164dd48029982c982b0009982c982b800a5eb80cc00c00cc16c008c1640050571bae30510013300300330560023054001414844b30010018a5eb8226644b30013371e6eb8c1540080fe2660a86e9c008cc0100100062660080080028280dd61829800982a000a0a24889660020030028acc004c154006264b30013039375c60aa00313370e6eb4c154c1580040122941050182a9bac305400180120a441488991919800800817112cc00400629422b30013371e6eb8c15000400e294626600400460aa00282790521bae3051304e3754646644b3001304a3050375400513259800982518289baa0018992cc004c130c148dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca600260d0003375c60d0025375c60d0023375c60d001f306800e9bae306800d9bae306800c9834005cdd718340054c1a00266eb8c1a002260d000f375c60d000d30680059bae30680049834001cc1a00092222222222222222259800983d00944cc1b4dd6183c810912cc00400a26605001e26605001826605001426605001026605000c2660500082b300130713077375400713232323298009bae307f0019bae307f0049bae307f0039bae307f002488896600261080200b159800983c983f9baa01b8992cc004c214040062660f06eb0c210040048966002005103189918011844008019bae308601002421005164208046100026ea806e2c83f22c84080860fe00260fc00260fa00260f06ea800e2c83b2264600460fa0066eb8c1ec0090794590770c1a0004c19c004c198004c194004c190004c18c004c188004c184004c180004c17c004c178004c174004c170004c16c004c168004c164004c160004c14cdd5000c59051182a98291baa0018b20a0301530513754608e60a26ea8c150c144dd500145904f1982101611825192cc004c12cc140dd5000c5200089bad3054305137540028278c966002609660a06ea80062980103d87a8000899198008009bab30553052375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0f0006260a0660ae60aa00497ae08a60103d87a8000414d1330040043059003414c6eb8c14c004c158005054209e32330010013756608e60a26ea8c11cc144dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062609e660ac60a800497ae08a60103d87a80004149133004004305800341486eb8c148004c154005053112cc004c128c140dd500144c8c8c96600260b000513303f3057003132598009827000c4c96600260b400313232598009828800c4c96600260ba003133044305c0010098b20b4305837540051598009829000c4c8c8ca60026eb4c1780066eb4c17800e6eb4c178009222598009831002403a2c82f860bc00260ba00260b06ea800a2c82b1056182b1baa00130590018b20ae305537540051598009827800c56600260aa6ea800a00b16415916414c8298c14cdd5000c59055182b000982b00098289baa0028b209e375c60a203714a08262294104c452820988a50413060a200260a0002609e003300122372866e280080066e0120039b804801e44b300130453370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a400890102094914c00400666e04dc6801000c0097189b804803e44b30010018a5eb7bdb182264664464660020026600c00c60a800a44b300100189982999bb037520086ea000d2f5bded8c113298009bae30510019bad3052001982b0012444b300133720010007133057337606ea4020dd4003802c56600266e3c02000e2660ae66ec0dd48041ba800700189982b99bb037520066ea0008cc01801800505320a6182a000a0a4375c60980026eb4c134004c13c00504d4896600200314bd6f7b63044c8cc88c8cc004004cc018018c1500148966002003133053337606ea4010dd3001a5eb7bdb1822653001375c60a2003375660a4003305600248896600266e4002000e2660ae66ec0dd48041ba60070058acc004cdc7804001c4cc15ccdd81ba9008374c00e003133057337606ea400cdd300119803003000a0a6414c305400141486eb8c130004dd598268009827800a09a9112cc004cdc4000a40011480022b300130460018a400513259800982399b8600248012330010049800801ccdc18012400880222600330010049800801ccdc1980800124008802104c1b82002412c825a444653001001802400d0011112cc00400a200319800801cc15000a6600860a60040028019051496600266e1cdc6800a408110018b20929bad304d0029bab304d0019bae304d304e011982698251baa010488888888888888a6002444b300133712006900044cc04800800626602400200482d2444646600200200644b3001337120060031488100899b8b3301100500133002002301e00141712259800982a19b8600148012266e2d20fe033300d00233706002900244cdc5a400066e2ccc038008004cc034008cdc1980d800a400882ca601201330080089803803a444445300122225980099b890044800a2660333001004801c00500a00144cc06400a60026030009003800a014418522225980099b88004480122b300133710004900244cc0666002009003800a0144881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610089980ccc00401200748920000000000000000000000000000000000000000000000000000000000000000000402930013018002800d221200000000000000000000000000000000000000000000000000000000000000000004028830a2b300133712900200144cc065221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761009800980c002400e00280522660333001002800d22120000000000000000000000000000000000000000000000000000000000000000000402930013018004801d221200000000000000000000000000000000000000000000000000000000000000000004028830906148c0100064600600291111991199119194c00400609d3306b374e07a660d66e9c0fccc1acdd480925eb8297adef6c60a4001480029000200222222225980080345660026eb0c1c80162660e26e98010cc1c4dd4001998389ba8002330713750002660e260e460e660e600a97ae08b20e08cc004c1c801a60e600d30730059bac30720054888a6002444453001010804401600900380140050104dd6183b0014dd7183b183b8014c1d8c1ccdd5183b18399baa30693073375400891112cc004c1c4c1d8dd5000c56600266e3cdd7183d183b9baa0010648acc0040162d13322330550011323232332259800983b983e9baa001899194c004cc20804dd380499841009ba730840100c330820137526464b3001307b0018992cc004cdc799194c0040069000400d00111119192cc00400e2911200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b30013085010018994c0040126eb4c240040066eb8c24004c244040050051846009baa0028acc004c218040062646608666e2cdd69848009846809baa001375c610602611a026ea8004dd718289846809baa001308f01309001308c0137540051323304333032375c6120020020106eb8c24004c24404004c24004c23004dd50012114024228046114026ea8004c2340401226464b30013085010018994c0040126eb4c240040066eb8c24004c244040050051846009baa0028acc004c2180400626465300100b804c007300100a800c01500a4c24404c2480400902818031bad309001001308c01375400513233223322980080740320039800806c006010806a61180266126026ea0cc110008030cc24c04dd49981b0010009984980984a00984a8080225eb8102b1bae3092010023008001309101001375a6120020026118026ea800908a01211402308a013754002611a02008845808c2340400d08a01111194c00402600f001cc0040220030044021002409c60080046e00c11c008dca0021817807466002009376660fc6610a026ea001ccc21404dd400425eb8200280e22c840808dd61842809841009baa0028acc004c1f0006264646644b3001307f3085013754005132598009840009843009baa0018991919912cc004c23c0400e2b30013371f300100c8044019024181b80b4660020193766610c026611a026ea0cdc01bad308e01308b01375400a01e6611a026ea0cdc01bad308101308b01375400a02097ae080320488b2112028b211802375a6118020026eb4c23004008c23004004c21c04dd5000c59085011844809843009baa0028b210802303d0013758610e026110020046eb8c21804004c20804dd500145908001210002308001375400261060201897ae0994c004006603e02d301f0074004444b30010028800c4ca6002009308801003cc00400a6eb8c20c040066eacc2100400644461040266112026e98ca6002003302700398138012002222598008014400626466453001006984880802cc8cc004004014896600200313309101337606ea4010dd4001a5eb7bdb1822653001375c611e02003375a61200200330940100248896600266e4002000e26612a0266ec0dd48041ba80070058acc004cdc7804001c4c966002611a026126026ea800626612c0266ec0dd4804984b80984a009baa0010028801212402308e013309501375066e0001c0092f5c113309501337606ea400cdd400119803003000a122024244043092010014240048030dd71845008009bad308b01001308d01002422c0497ae041b08020c21804009084014cdc000a002ccdc0002009d6600266ebc0080a2266e00048012202483f100d1bb3001308101307e37540031641f0b300130750418800c4cdc199b8200104102741e860fe0073001001a40012298009bab307d002800c88c96600260f260fe6ea800626466e0000ccdc199b82375a6102020086eb4c21004004cc08d2014375a610802610a020026eb0c20c04c20004dd5000c5907e191919800800815912cc004006298103d87a80008992cc004cdd79ba70043082010018983f1984280984180800a5eb82266006006610e02004840808c21404005083011984080983f0021984080983f00125eb8102a2050375660fa60fc00260f26ea8004c1ec014c96600260e060ee6ea8006260f660f06ea80062c83b0c1e8c1ecc1ecc1dcdd5183d183d983b9baa00841e119800806c03201700a804a00841d519800806c03201700a804a00841d420e02223322329800800d2000802200222259800800c4cc094cc0500140080122646644b3001306b002899194c00402a00f001cc00402200330780064021375c60ee60f00048078c008dd6983b00098391baa0038acc004c1b000a26465300100a803c0073001008800cc1e00190084c1dcc1e000900e18011bad307600130723754007132332298009bae30780029802000cc1e401d2229800807402e0059800806400a002806260e6660f46ea0cc0ac00cc0e8008cc1e8dd49980e8018011983d183d983e002a5eb810120c1dc004dd6983b00098391baa00341c08380c1bcdd50009b803030003307200141c06e5000cdca00111111198104c004016009302c003404130013301d005302c003cc0052000a40810015c6330014810290204005718cc005208001a40810015c6330014830006902040057184888896600266e24015200e899812cc00401600f003801400500c00244cc0940126002604000b007801c00a002806106d088888c96600330013370e0026eb4c1b8c1acdd5001528528a0d2899810cc00401a00b302d00440446644b3001337100069008456600266e200092010899811cc00400e00b002800a01248920b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a00899811cc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835a2b300133712900800144cc08d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980f001c016603c00500140251330239800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835906b1bad306e306b3754004660426eb8c184c1acdd50011bae302f306b37540051641a46603a00a605800644444b30013371200a900344cc07a600200b0048014005009001c4cc07800e6002603800b004801400500920cc22225980099b88004480222b300133710004900444cc0766002009003801400500724412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980ecc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004020832a2b300133712900400144cc0752212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980d802400e6036005001401d13301d980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402083290650304d001332259800982198249baa0018992cc004c110c128dd5000c4c8c8c8c96600260a6005133223304800122598008014566002609860a46ea8016264646644b3001305b00389982c9ba800833059374c00e660b3300159800991980080081e912cc00400629422b30013375e60b860b26ea8c17000402e294626600400460ba00282b905a44ca6002003010817a002222598008014528c5660033001375c60ba00502d9bae305d0015caa33001003982f0014c178005003452820b0416d14a082aa98103d87a8000a60103d8798000415497ae08b20b0375a60b00026eb8c160008c160004c14cdd5002c5905144c8c8c8cc896600260b8007132323322598009830001c4c028c18002e2c82e8dd6982e8009bad305d002305d001375860b000b1641646eb8c164004dd7182c801182c8009bac3053001305600241506eb4c148010dd59829001c5905018288009828800982800098259baa0018b2092304d304a37540031641206eb0c12c048c00406c8c966002608400314c103d87a80008992cc006600260866eb4c1280069429450484530103d87a800089822998261824800a5eb810484c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04a48896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034129001400c8238dc680098008009119800911191919bb032374e6609e60980026609e609a00297ae033760609600460960026098003300100691000c012007375a60960028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130440018cc004012007002918059ba800140391598009822800c6600200900399b80002480fe460166ea0c038cdc0a400000280722b30013370e004905f00c4c8cc0040048c030dd48009119803240044b3001300f001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014413119800802400e66e00009207f918059ba9001401c824904920928acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a66012012440032300e3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180799ba50030014034808904c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101412c825900e456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300b374e002804233001004801ccdc0001241fe0329800802c0126600e00e44003001918061ba700140288071049456600266e1c005200a8acc004cdc3801241fc0513232330010012300d374c002446600e900112cc004c0400062600497adef6c608919194c00401a4600c660aa004003375a60a40048030c8cdd8182a800982a982b0009bac30500019800804c0226020002802904d198030031100146600200900399b80002482fc0a464653001001801c8c038dd3000a0022225980099b89002480022600297adef6c608919194c00401a602a00b23005330560020019bad305300240186466ec0c158004c158c15c004dd61828800cc00402a01300140148270cc01c01c8800900e20928925ef6c610140000101200041248249049209233706002902011640e8303c001303b303b001303a303a303a001303930393039303930393039303900130380013033375400864b3001302b3032375400313036303337540031640c4606a606c606c60646ea8c0d40062c8198c8c8cc004004038896600200314bd7044cc8966002b30013375e6072606c6ea80080162646600200264660020026eacc0ecc0f0c0e0dd5002112cc004006297ae0899199119198008009bab303d0042259800800c400e264660826e9ccc104dd480299820981f00099820981f800a5eb80cc00c00cc10c008c10400503f1bae303900133003003303e002303c00140e844b30010018a508acc004cdc79bae303b3758607600206b14a3133002002303c00140d881ca294103444cc0e0008cc01001000626600800800281a0c0dc004c0e0005035181a18189baa30273031375400664b30013028302f375400313033303037540031640b8606460666066605e6ea8c0c8c0ccc0bcdd5000912cc004c0a8c0c0dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1180066eb8c11804a6eb8c1180466eb8c1180426eb8c11803e6eb8c11803a6eb8c1180366eb8c1180326eb8c11802e6eb4c1180266eb4c1180226eb0c11801e64b300130440018acc004cdc4a40086086003168981f1821800a0848b208a3754608c00d375a608c00b375a608c009375a608c007375c608c004911111111111111112cc004c16004a26606a60ae03626609600c44b300100281344c8c008c16c00cdd7182c80120ae8b20aa1823000982280098220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b00098189baa0028b205e30310038b205e1816000981580098131baa014899912cc004c0b00062646600a002264b300130233029375400313259800981218151baa0018acc004016264646600200201644b30010018a508acc004cdc79bae30310010038a518998010011819000a05840bc6eb8c0b8c0acdd5000c52820528b20523020302a3754605a60546ea80062c8140c0b0c0a4dd5000992cc004c084c0a0dd5000c4c0b0c0a4dd5000c5902718159816181618141baa302b302c3028375460560031640a46644b3001001801456600260580031325980098081bae302c001899b87375a6058605a0029000c528204e302c3758605600300240a4814852819198008009919800800803912cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a5eb8226644b30013371e6eb8c0b400805e2660586e9c008cc0100100062660080080028140dd618158009816000a05232323300100100d2259800800c52f5c11332259800acc004cdd7981718159baa302e302f302b375400400b132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009a0484090302430240023022004223259800980d000c4c8c8c966002605000513300830270030058b204a375c604c002604c00260426ea800e2b3001301b00189919192cc004c0a000a266010604e00600b1640946eb8c098004c098004c084dd5001c5660026032003132323259800981400144cc020c09c00c0162c8128dd71813000981300098109baa0038b203e407c80f8c07cdd500106eb8c058c04cdd50024590112022180918098021149a26cac8011", - "hash": "707d2c94ad4fbe1b4927825f66868178778c010dd2a6f7ca9fffc755" + "compiledCode": "593111010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd500148888c8cc004004014896600200313301c337606ea4014dd300225eb7bdb1822653001375c603400337566036003301f00248896600266e4002400e26604066ec0dd48049ba60080058acc004cdc7804801c4c9660026030603c6ea800626604266ec0dd48051811180f9baa0010028801203a9800804c022004803a26604066ec0dd48019ba600233006006001407080e0603a00280da6e3d220100488888a6002603c00d3758603a00d2259800980a980d9baa002899191919912cc004c09400e266018604800826601800400d16408860440026eb8c08800cc088004c084004c070dd500145901a48c8cc004004008896600200314bd6f7b63044ca60026eb8c0740066eacc0780066600600660440049114c004006007323200432330010010042259800800c5268992cc0040062b30013004375a604a6050005149a2c811a26644b3001337206eb8c098008dd71813000c566002600c6eb4c09c00a26600a00a660520026056007164095164094605000460500028130c0a000502514c004c06c006942945020488990090c08000501e2444466446530013756604800337586048604a604a604a604a0033758604800f2259800980e18111baa00289919192cc004c0a800a26600e605200626603a00244b300100280344c8c8cc084dd59815001112cc00400a2600a606000d132332230043033005375c60580026eb4c0b4004c0bc00902d1bae3028001302b00240a516409c6eacc0a0004c0a0004c08cdd50014590214dd61812001a44444b3001301f00f8992cc004c0ac0062646644b3001302330293754005132323259800981880144cc038c0c000c4cc09000489660020051598009919198008009919800800980a803112cc004006297ae0899199119198008009bab30370042259800800c400e264660766e9ccc0ecdd48029981d981c0009981d981c800a5eb80cc00c00cc0f4008c0ec0050391bae3033001330030033038002303600140d044b30010018a518992cc004cdc49bad303630373037001332232598009818181a9baa0018a40011375a6072606c6ea8005034192cc004c0c0c0d4dd5000c530103d87a8000899198008009bab303a3037375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062606a66078607400497ae08a60103d87a800040e1133004004303e00340e06eb8c0e0004c0ec005039206832330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062606866076607200497ae08a60103d87a800040dd133004004303d00340dc6eb8c0dc004c0e80050381bae3036001375c606c606e00313300300330370028a5040c46eb0c0d40050331bab3025302f375401110068a5040b513232330283756606200444b300100289802981b80344c8cc88c010c0e8014dd718198009bad3034001303600240d06eb8c0bc004c0c800903045902e1bab302f001302f001302a37540051640a064b30013021302837540031302c3029375400316409c60566058605860506ea8004cc89660020030028acc004c0b8006264b30013012375c605c00313025375a605c605e00314a08148c0b8dd61816800c00902b205614a06466002002646600200201244b30010018a5eb82264664464660020026eacc0bc01089660020031003899198199ba733033375200a66066606000266066606200297ae0330030033035002303300140c46eb8c0ac004cc00c00cc0c0008c0b800502c112cc004006297ae0899912cc004cdc79bae302f0020198998171ba700233004004001899802002000a0543758605a002605c0028158c0a80062c8140c8c8cc00400400c896600200314bd7044cc8966002b30013375e605c60566ea80080162646600200264660020026eacc0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009c566002604001f132323298009bac302c0019bac302c302d0019919800800807912cc004006297ae0899912cc004c8cc004004c8cc004004dd59819181998179baa30323033302f375400844b30010018a5eb82264664464660020026eacc0d0010896600200310038991981c1ba733038375200a66070606a00266070606c00297ae033003003303a002303800140d86eb8c0c0004cc00c00cc0d4008c0cc005031112cc00400629422b30013371e6eb8c0c8dd618190008164528c4cc008008c0cc00502d206089981780119802002000c4cc01001000502b18170009817800a0589bac302c0039bae302c00248888966002606400713233223300100213259800981b000c4c8cc00c0044c8c8c8c8c8ca6002607a003303c0049bad303c002488966002606a60766ea800a33001230403041304100191112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc7244103020408003370000490189180119bca4a2003124bded8c10140000101200040f881f103e4dc024003370e907f01cdc02400522337600046ea0005222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c03c0164600a660a0004003375a609a0048030c12c0066002013008800a00e4121222232330010010022233006480089660026014003130024bd70448c8ca600200d230063304f0020019bad304c002401860940033001008803cc028005006208e91114c00401200700291980200091801800a0124888c8c8c8c8c8c8c8c8c9660026090609a6ea8c144c1480162b300132323300100132330010013034375660a800e44b30010018a5eb82264664464660020026eacc158010896600200310038991982d1ba73305a375200a660b460ae002660b460b000297ae033003003305c002305a00141606eb8c148004cc00c00cc15c008c154005053112cc0040062946264b3001337126eb4c154c158c158004cc88c966002609e60a86ea80062900044dd6982c182a9baa001414c64b3001304f3054375400314c0103d87a8000899198008009bab30593056375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660b660b200497ae08a60103d87a8000415d133004004305d003415c6eb8c15c004c16800505820a632330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660b460b000497ae08a60103d87a80004159133004004305c00341586eb8c158004c1640050571bae3055001375c60aa60ac00313300300330560028a5041406eb0c150005052191919800800815912cc004006297adef6c6089919912cc004c134c14cdd5001456600266e3cdd7182b982a1baa0020068994c004006005375660b060b260aa6ea80110011112cc00400a2003132332298008034c178016646600200200a44b300100189982f19bb037520086e9800d2f5bded8c113298009bae305c0019bab305d00198308012444b300133720010007133062337606ea4020dd3003802c56600266e3c02000e264b3001305a30603754003133063337606ea4024c190c184dd50008014400905f192cc0056600200314a314a083122980103d87a80008982e198319ba60014bd7020be329800800c022006800888966002005100189919914c00401a60d400b32330010010052259800800c4cc1a8cdd81ba9004375000697adef6c608994c004dd71834000cdd69834800cc1b40092225980099b9000800389983719bb037520106ea001c0162b30013371e01000713259800983318361baa00189983799bb0375201260e060da6ea800400a20048358c96600260cc00314c0103d87a800089834198379ba80014bd7020d63370000e00513306e337606ea400cdd400119803003000a0d441a8306b00141a48030dd718318009bad306400130660024191133062337606ea400cdd300119803003000a0bc4178305f00141748030dd7182b8009bab3058001305a0024161100141491001414864b3001304d305237540031304e3305530563053375400297ae08a60103d87a8000414460aa60a46ea8c154c148dd500099801801982b001182a000a0a4375c60a203515980099baf01c3232323232323232323232323230563305d305e00d3305d305e00c3305d305e00b3305d305e00a3305d305e0093305d305e0083305d305e0073305d305e0063305d305e0053305d305e0043305d305e0033305d305e0023305d305e0013305d375066e00080dd6982f0079982e9ba8337006eb4c17808cdd6982f0071982e9ba8337006eb4c178088dd6982f0081982e982f182f807182f982f982f982f982f800982f000982e800982e000982d800982d000982c800982c000982b800982b000982a800982a000982980098271baa01f8acc006600266e05200032330010010232259800800c520008980819801001182a000a0a28a5099198008009919800800817912cc004006297ae0899199119198008009bab30550042259800800c400e264660b26e9ccc164dd48029982c982b0009982c982b800a5eb80cc00c00cc16c008c1640050571bae30510013300300330560023054001414844b30010018a5eb8226644b30013371e6eb8c1540080fe2660a86e9c008cc0100100062660080080028280dd61829800982a000a0a24889660020030028acc004c154006264b30013039375c60aa00313370e6eb4c154c1580040122941050182a9bac305400180120a441488991919800800817112cc00400629422b30013371e6eb8c15000400e294626600400460aa00282790521bae3051304e3754646644b3001304a3050375400513259800982518289baa0018992cc004c130c148dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca600260d0003375c60d0025375c60d0023375c60d001f306800e9bae306800d9bae306800c9834005cdd718340054c1a00266eb8c1a002260d000f375c60d000d30680059bae30680049834001cc1a00092222222222222222259800983d00944cc1b4dd6183c810912cc00400a26605001e26605001826605001426605001026605000c2660500082b300130713077375400713232323298009bae307f0019bae307f0049bae307f0039bae307f002488896600261080200b159800983c983f9baa01b8992cc004c214040062660f06eb0c210040048966002005103189918011844008019bae308601002421005164208046100026ea806e2c83f22c84080860fe00260fc00260fa00260f06ea800e2c83b2264600460fa0066eb8c1ec0090794590770c1a0004c19c004c198004c194004c190004c18c004c188004c184004c180004c17c004c178004c174004c170004c16c004c168004c164004c160004c14cdd5000c59051182a98291baa0018b20a0301530513754608e60a26ea8c150c144dd500145904f1982101611825192cc004c12cc140dd5000c5200089bad3054305137540028278c966002609660a06ea80062980103d87a8000899198008009bab30553052375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0f0006260a0660ae60aa00497ae08a60103d87a8000414d1330040043059003414c6eb8c14c004c158005054209e32330010013756608e60a26ea8c11cc144dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062609e660ac60a800497ae08a60103d87a80004149133004004305800341486eb8c148004c154005053112cc004c128c140dd500144c8c8c96600260b000513303f3057003132598009827000c4c96600260b400313232598009828800c4c96600260ba003133044305c0010098b20b4305837540051598009829000c4c8c8ca60026eb4c1780066eb4c17800e6eb4c178009222598009831002403a2c82f860bc00260ba00260b06ea800a2c82b1056182b1baa00130590018b20ae305537540051598009827800c56600260aa6ea800a00b16415916414c8298c14cdd5000c59055182b000982b00098289baa0028b209e375c60a203714a08262294104c452820988a50413060a200260a0002609e003300122372866e280080066e0120039b804801e44b300130453370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a400890102094914c00400666e04dc6801000c0097189b804803e44b30010018a5eb7bdb182264664464660020026600c00c60a800a44b300100189982999bb037520086ea000d2f5bded8c113298009bae30510019bad3052001982b0012444b300133720010007133057337606ea4020dd4003802c56600266e3c02000e2660ae66ec0dd48041ba800700189982b99bb037520066ea0008cc01801800505320a6182a000a0a4375c60980026eb4c134004c13c00504d4896600200314bd6f7b63044c8cc88c8cc004004cc018018c1500148966002003133053337606ea4010dd3001a5eb7bdb1822653001375c60a2003375660a4003305600248896600266e4002000e2660ae66ec0dd48041ba60070058acc004cdc7804001c4cc15ccdd81ba9008374c00e003133057337606ea400cdd300119803003000a0a6414c305400141486eb8c130004dd598268009827800a09a9112cc004cdc4000a40011480022b300130460018a400513259800982399b8600248012330010049800801ccdc18012400880222600330010049800801ccdc1980800124008802104c1b82002412c825a444653001001802400d0011112cc00400a200319800801cc15000a6600860a60040028019051496600266e1cdc6800a408110018b20929bad304d0029bab304d0019bae304d304e011982698251baa010488888888888888a6002444b300133712006900044cc04800800626602400200482d2444646600200200644b3001337120060031488100899b8b3301100500133002002301e00141712259800982a19b8600148012266e2d20fe033300d00233706002900244cdc5a400066e2ccc038008004cc034008cdc1980d800a400882ca601201330080089803803a444445300122225980099b890044800a2660333001004801c00500a00144cc06400a60026030009003800a014418522225980099b88004480122b300133710004900244cc0666002009003800a0144881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610089980ccc00401200748920000000000000000000000000000000000000000000000000000000000000000000402930013018002800d221200000000000000000000000000000000000000000000000000000000000000000004028830a2b300133712900200144cc065221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761009800980c002400e00280522660333001002800d22120000000000000000000000000000000000000000000000000000000000000000000402930013018004801d221200000000000000000000000000000000000000000000000000000000000000000004028830906148c0100064600600291111991199119194c00400609d3306b374e07a660d66e9c0fccc1acdd480925eb8297adef6c60a4001480029000200222222225980080345660026eb0c1c80162660e26e98010cc1c4dd4001998389ba8002330713750002660e260e460e660e600a97ae08b20e08cc004c1c801a60e600d30730059bac30720054888a6002444453001010804401600900380140050104dd6183b0014dd7183b183b8014c1d8c1ccdd5183b18399baa30693073375400891112cc004c1c4c1d8dd5000c56600266e3cdd7183d183b9baa0010648acc0040162d13322330550011323232332259800983b983e9baa0018994c004cc20404dd380419840809ba730830100b330810137526464b3001307a0018992cc004cdc799194c0040069000400d00111119192cc00400e2911200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b30013084010018994c0040126eb4c23c040066eb8c23c04c240040050051845809baa0028acc004c214040062646608466e2cdd69847809846009baa001375c6104026118026ea8004dd718281846009baa001308e01308f01308b0137540051323304233031375c611e020020106eb8c23c04c24004004c23c04c22c04dd50012112024224046112026ea8004c2300401226464b30013084010018994c0040126eb4c23c040066eb8c23c04c240040050051845809baa0028acc004c2140400626465300100b804c007300100a800c01500a4c24004c2440400902718031bad308f01001308b01375400513233223322980080740320039800806c006010806a61160266124026ea0cc10c008030cc24804dd49981a8010009984900984980984a0080225eb8102a1bae3091010023008001309001001375a611e020026116026ea8009089012112023089013754002611802008845008c2300400d08901111194c00402600f001cc0040220030044021002409860080046e00c118008dca0021817006c66002009376660fa66108026ea0018cc21004dd4003a5eb8200280da2c840008dd61842009840809baa0028acc004c1ec006264646644b3001307e308401375400513259800983f9842809baa0018991919912cc004c2380400e2b30013371f300100c8044019023181b00ac660020193766610a0266118026ea0cdc01bad308d01308a01375400a01c66118026ea0cdc01bad308001308a01375400a01e97ae080320468b2110028b211602375a6116020026eb4c22c04008c22c04004c21804dd5000c59084011844009842809baa0028b210602303c0013758610c02610e020046eb8c21404004c20404dd500145907f20fe307f375400261040201697ae0994c004006603c02b301e0064004444b30010028800c4ca6002009308701003cc00400a6eb8c208040066eacc20c0400644461020266110026e98ca6002003302600398130012002222598008014400626466453001006984800802cc8cc004004014896600200313309001337606ea4010dd4001a5eb7bdb1822653001375c611c02003375a611e0200330930100248896600266e4002000e2661280266ec0dd48041ba80070058acc004cdc7804001c4c9660026118026124026ea800626612a0266ec0dd4804984b009849809baa0010028801212202308d013309401375066e0001c0092f5c113309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280497ae041ac8020c21404009083014cdc00098024cdc000180956600266ebcc20804c1fcdd5001013c4cdc0008801c404507d201837660031641f0b300130750418800c4cdc199b8200104102741e860fe0073001001a40012298009bab307d002800c88c96600260f260fe6ea800626466e0000ccdc199b82375a6102020086eb4c21004004cc08d2014375a610802610a020026eb0c20c04c20004dd5000c5907e191919800800815912cc0040062980103d87a80008992cc004cdd79ba70043082010018983f1984280984180800a5eb82266006006610e02004840808c21404005083011984080983f0021984080983f00125eb8102a2050375660fa60fc00260f26ea8004c1ec014c96600260e060ee6ea8006260f660f06ea80062c83b0c1e8c1ecc1ecc1dcdd5183d183d983b9baa00841e119800806c03201700a804a00841d519800806c03201700a804a00841d420e02223322329800800d2000802200222259800800c4cc094cc0500140080122646644b3001306b002899194c00402a00f001cc00402200330780064021375c60ee60f00048078c008dd6983b00098391baa0038acc004c1b000a26465300100a803c0073001008800cc1e00190084c1dcc1e000900e18011bad307600130723754007132332298009bae30780029802000cc1e401d2229800807402e0059800806400a002806260e6660f46ea0cc0ac00cc0e8008cc1e8dd49980e8018011983d183d983e002a5eb810120c1dc004dd6983b00098391baa00341c08380c1bcdd50009b803030003307200141c06e5000cdca00111111198104c004016009302c003404130013301d005302c003cc0052000a40810015c6330014810290204005718cc005208001a40810015c6330014830006902040057184888896600266e24015200e899812cc00401600f003801400500c00244cc0940126002604000b007801c00a002806106d088888c96600330013370e0026eb4c1b8c1acdd5001528528a0d2899810cc00401a00b302d00440446644b3001337100069008456600266e200092010899811cc00400e00b002800a01248920b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a00899811cc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835a2b300133712900800144cc08d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980f001c016603c00500140251330239800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040293001301e003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835906b1bad306e306b3754004660426eb8c184c1acdd50011bae302f306b37540051641a46603a00a605800644444b30013371200a900344cc07a600200b0048014005009001c4cc07800e6002603800b004801400500920cc22225980099b88004480222b300133710004900444cc0766002009003801400500724412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980ecc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004020832a2b300133712900400144cc0752212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980d802400e6036005001401d13301d980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040213001301b004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402083290650304d001332259800982198249baa0018992cc004c110c128dd5000c4c8c8c8c96600260a6005133223304800122598008014566002609860a46ea8016264646644b3001305b00389982c9ba800833059374c00e660b3300159800991980080081e912cc00400629422b30013375e60b860b26ea8c17000402e294626600400460ba00282b905a44ca6002003010817a002222598008014528c5660033001375c60ba00502d9bae305d0015caa33001003982f0014c178005003452820b0416d14a082aa98103d87a8000a60103d8798000415497ae08b20b0375a60b00026eb8c160008c160004c14cdd5002c5905144c8c8c8cc896600260b8007132323322598009830001c4c028c18002e2c82e8dd6982e8009bad305d002305d001375860b000b1641646eb8c164004dd7182c801182c8009bac3053001305600241506eb4c148010dd59829001c5905018288009828800982800098259baa0018b2092304d304a37540031641206eb0c12c048c00406c8c966002608400314c103d87a80008992cc006600260866eb4c1280069429450484530103d87a800089822998261824800a5eb810484c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04a48896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034129001400c8238dc680098008009119800911191919bb032374e6609e60980026609e609a00297ae033760609600460960026098003300100691000c012007375a60960028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130440018cc004012007002918059ba800140391598009822800c6600200900399b80002480fe460166ea0c038cdc0a400000280722b30013370e004905f00c4c8cc0040048c030dd48009119803240044b3001300f001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014413119800802400e66e00009207f918059ba9001401c824904920928acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a66012012440032300e3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180799ba50030014034808904c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101412c825900e456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300b374e002804233001004801ccdc0001241fe0329800802c0126600e00e44003001918061ba700140288071049456600266e1c005200a8acc004cdc3801241fc0513232330010012300d374c002446600e900112cc004c0400062600497adef6c608919194c00401a4600c660aa004003375a60a40048030c8cdd8182a800982a982b0009bac30500019800804c0226020002802904d198030031100146600200900399b80002482fc0a464653001001801c8c038dd3000a0022225980099b89002480022600297adef6c608919194c00401a602a00b23005330560020019bad305300240186466ec0c158004c158c15c004dd61828800cc00402a01300140148270cc01c01c8800900e20928925ef6c610140000101200041248249049209233706002902011640e8303c001303b303b001303a303a303a001303930393039303930393039303900130380013033375400864b3001302b3032375400313036303337540031640c4606a606c606c60646ea8c0d40062c8198c8c8cc004004038896600200314bd7044cc8966002b30013375e6072606c6ea80080162646600200264660020026eacc0ecc0f0c0e0dd5002112cc004006297ae0899199119198008009bab303d0042259800800c400e264660826e9ccc104dd480299820981f00099820981f800a5eb80cc00c00cc10c008c10400503f1bae303900133003003303e002303c00140e844b30010018a508acc004cdc79bae303b3758607600206b14a3133002002303c00140d881ca294103444cc0e0008cc01001000626600800800281a0c0dc004c0e0005035181a18189baa30273031375400664b30013028302f375400313033303037540031640b8606460666066605e6ea8c0c8c0ccc0bcdd5000912cc004c0a8c0c0dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1180066eb8c11804a6eb8c1180466eb8c1180426eb8c11803e6eb8c11803a6eb8c1180366eb8c1180326eb8c11802e6eb4c1180266eb4c1180226eb0c11801e64b300130440018acc004cdc4a40086086003168981f1821800a0848b208a3754608c00d375a608c00b375a608c009375a608c007375c608c004911111111111111112cc004c16004a26606a60ae03626609600c44b300100281344c8c008c16c00cdd7182c80120ae8b20aa1823000982280098220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b00098189baa0028b205e30310038b205e1816000981580098131baa014899912cc004c0b00062646600a002264b300130233029375400313259800981218151baa0018acc004016264646600200201644b30010018a508acc004cdc79bae30310010038a518998010011819000a05840bc6eb8c0b8c0acdd5000c52820528b20523020302a3754605a60546ea80062c8140c0b0c0a4dd5000992cc004c084c0a0dd5000c4c0b0c0a4dd5000c5902718159816181618141baa302b302c3028375460560031640a46644b3001001801456600260580031325980098081bae302c001899b87375a6058605a0029000c528204e302c3758605600300240a4814852819198008009919800800803912cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a5eb8226644b30013371e6eb8c0b400805e2660586e9c008cc0100100062660080080028140dd618158009816000a05232323300100100d2259800800c52f5c11332259800acc004cdd7981718159baa302e302f302b375400400b132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000203514a3133002002303100140ac8172294102944cc0b4008cc0100100062660080080028148c0b0004c0b400502a1808009a0484090302430240023022004223259800980d000c4c8c8c966002605000513300830270030058b204a375c604c002604c00260426ea800e2b3001301b00189919192cc004c0a000a266010604e00600b1640946eb8c098004c098004c084dd5001c5660026032003132323259800981400144cc020c09c00c0162c8128dd71813000981300098109baa0038b203e407c80f8c07cdd500106eb8c058c04cdd50024590112022180918098021149a26cac8011", + "hash": "3e6116d91ea1e59a117633e541136c0dd1cac2a2fc88d1898dc59859" }, { "title": "l1_withdrawal_intent/spend_and_mint.l1_withdrawal_intent.spend", @@ -93,8 +93,8 @@ } } ], - "compiledCode": "592fed010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520a09c018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc0066002444b30010028a60103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444646530010018284cc1c8dd3823198391ba700533072307302a4bd7052000a400148002900052000400444444444b30010078acc004dd6183d00344cc1e4dd40029983c9ba8004330793750006660f26ea0008cc1e4dd40009983c983d183d983d80325eb822c83c233001307a007983d803cc1ec01a6eb0c1e8019222298009111114c00404a013006802c012007002800a0249bac307e0029bae307e307f002983f183d9baa307e307b375460e260f66ea8011222259800983c983f1baa0018acc004cdc79bae308201307f37540020d9159800802c5a2646644b3001307b30810137540051332233062001132323322598009840809843809baa00189919191919192cc0056600266e1e60026eacc21004c23804dd5006520009111192cc004c23004c24804dd5000c4c8cdc000199b83337040086eb4c25c04004cc0d52014375a612e026130020026eb0c25804c24c04dd5000c59091011981d0241984a009ba90043309401375200697ae040dc00313375e612202611c026ea8c24404c23804dd50061842009847009baa0068a504230051980099848009ba700d3309001374e612402024661200261220261240200897ae099b8001c00999b8001b00199b8001a375a612202005337000320075980099baf006043899b80018009880c211802404d164230046eb4c24004c244040056600266ebc01010626611c0298010100003308e01375000c97ae089919847809ba83370666e08004110084cc23c04dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802845808cdc0803000a11402375a611c020026464b30013084010018991919912cc004c22404c23c04dd500144c8cc10400456600266e1c030dd6984a009848809baa001899849809843809848809baa00133093013752b30013371f3001008802400902b182100a44cc0a002000a2c8478092f5c116423c046126026120026ea800a2c847008c13c004dd61848808011bae309001309101001308c013754005159800984300800c4c8c8cc8966002611202611e026ea800a264660820022b3001337120186eb4c25004c24404dd5000c4c8cc25004dd40009984a009ba99800982180ac0260070059bb3308d013309401375066e04dd6984a809849009baa00200d3309401375066e04dd69844009849009baa0020014bd7020564bd7019b83337046eb4c21c04c24404dd50008061bad309401309101375400316423c046126026120026ea800a2c847008c13c004dd61848809849008011bae309001001308c01375400516422804845008c22804dd50009846808071bb3001308b0130880137540031642180466e0ccdc100080d01e9844808011bad3088013089010013084013754002610a026104026ea8008c96600260f66104026ea80062610c026106026ea80062c840808c21404c21804c21804c20804dd51842809843009841009baa00b8b2100023301205d001308401006375a61040200a84000a3300100e806c03201700a804a00841f519800807403601900b805402500420fa1078180200204446644653001001a40010044004444b300100189980e9980800280100244c8cc896600260d4005132329800805401e0039800804400660ee00c80426eb8c1d8c1dc00900f18011bad307500130713754007159800983580144c8ca6002015007800e6002011001983b8032010983b183b801201c3002375a60ea00260e26ea800e26466453001375c60ee0053004001983c003a445300100e805c00b300100c801400500c4c1c8cc1e4dd41981180198228011983c9ba93301900300233079307a307b0054bd702024183b0009bad307500130713754006837906f18371baa0013700607600660e20028378dca0019b9400222222330189800802c012606e006806260026602a00a606e0079800a400148102002b8c66002902052040800ae319800a41000348102002b8c66002906000d2040800ae30911112cc004cdc4802a401d13301d9800802c01e007002800a01800489980e8024c004c06001600f003801400500c20d811111192cc006600266e1c004dd6983698351baa002a50a5141a11330199800803401660700088068cc896600266e2000d20108acc004cdc40012402113301b9800801c016005001402491120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", - "hash": "366e56090c06acb981e03299028b214fdfaca5dbefaa8415d276848a" + "compiledCode": "592ff9010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da6004004911114c004ca6002003039980301ba0022225980099b89001480022660ca980101800033065374e00497ae08acc00400a297ae110180008101800044c8cc198dd39983318338019bac306700133066306730680014bd704c00400e60ce0053031001400c8321061488896600266e240112002899809cc004012007001402000513301300298009809002400e0028041062488896600266e2001120048acc004cdc4001240091330139800802400e0028041221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d221200000000000000000000000000000000000000000000000000000000000000000004020831106248cc009201400148888cc88cc88c8cc88c8c8c8c8ca60026eb4c1cc0066eb8c1ccc1d00066eb4c1cc00d22259800983b80cc66002453001002a4001222232598009839983c9baa00189919b800033370666e08010dd6983f000980c1bad307e307f001375860fa60f46ea80062c83c0cc084014cc1ecdd48021983d9ba90034bd70203c99b80337020546eb4c1d802000666e00cdc09bad307602f00300148896600260e060ea6ea8c1e4c1e80ce2b30013370e66e04cc00cdd59836183b1baa306c3076375460f20380586600664660020020a844b30010018a5eb7bdb1822646644b30013074307a375400515980099b8f375c60fc60f66ea80080d226530010018014dd5983f984000983e1baa0044004444b30010028800c4c8cc8a600200d3085010059919800800802912cc00400626610a0266ec0dd48021ba60034bd6f7b63044ca60026eb8c20c040066eacc210040066110020049112cc004cdc8004001c4cc22404cdd81ba9008374c00e00b15980099b8f0080038992cc004c20404c21c04dd5000c4cc22804cdd81ba9009308b013088013754002005100242180464b300159800800c528c5282112028a60103d87a8000898418099845009ba60014bd70210c02329800800c022006800888966002005100189919914c00401a61220200b32330010010052259800800c4cc24404cdd81ba9004375000697adef6c608994c004dd7184780800cdd6984800800cc250040092225980099b9000800389984a8099bb037520106ea001c0162b30013371e010007132598009846809849809baa00189984b0099bb03752012612e026128026ea800400a2004849008c966002611a0200314c0103d87a800089847809984b009ba80014bd702124023370000e00513309501337606ea400cdd400119803003000a122024244043092010014240048030dd71845008009bad308b01001308d01002422c0513308901337606ea400cdd300119803003000a10a024214043086010014210048030dd7183f0009bab307f00130810100241fd100141e5100141e464b3001307430793754003130753307c307d307a375400297ae08a60103d87a800041e060f860f26ea8c1f0c1e4dd500099801801983e801183d800a0f202c375a60f201515980099baf046323232323232323232323232307d330840130850100c330840130850100b330840130850100a33084013085010093308401308501008330840130850100733084013085010063308401308501005330840130850100433084013085010033308401308501002330840130850100133084013085013086010013308401375001c66108026ea0034cc21004dd419b81375a610a0207a6eb4c21404050cc21004dd4992cc0040062b30013371202290004404a2c84080a2b30013087010018992cc004cdc4809240011013899912cc004c1fc006264b30013371e6603a006002607002d19800801cdd998410099844809ba801533089014c10100004bd70400501f459085011bac3089013086013754007159800984000800c4c8c8cc89660026106026112026ea800a2646607600233001303c01a803c00a0093766610c026611a026ea0cdc01bad308e01308b0137540020326611a026102026116026ea80052f5c08110c23404c22804dd50014590880118248009bac308b01308c01002375c611402002610c026ea800e2c842009084011bb30393083013754002841008c218040062c842009084011bac3085013086010223308401375066e00dd698428098430081e00825eb80c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1d8dd5024c566002b300133710900000344cdc499b82002375a60f206c66e0800520a09c018a5141d1159800cc004cdc0a4000603609914a13233001001323300100105a2259800800c52f5c113233223233001001375660fa00844b30010018801c4c8cc20404dd399840809ba90053308101307e0013308101307f0014bd7019801801984180801184080800a0fe375c60f20026600600660fc00460f800283d0896600200314bd7044cc896600266e3cdd7183e801033c4cc1f0dd380119802002000c4cc0100100050781bac307b001307c00141e49112cc004006005159800983e800c4c96600260c46eb8c1f4006266e1cdd6983e983f000802452820f0307d375860f800300241e883d115980099191980080082c912cc00400629422b30013371e6eb8c1f000400e294626600400460fa00283b907a1bae307930763754646644b3001307230783754005132598009839183c9baa0018992cc004c1d0c1e8dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002612002003375c612002025375c612002023375c61200201f30900100e9bae30900100d9bae30900100c984800805cdd71848008054c240040266eb8c2400402261200200f375c61200200d3090010059bae309001004984800801cc24004009222222222222222225980098510080944cc25404dd6185080810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309901309f01375400713232323298009bae30a7010019bae30a7010049bae30a7010039bae30a701002488896600261580200b1598009850809853809baa01b8992cc004c2b404006266140026eb0c2b0040048966002005103189918011858008019bae30ae0100242b0051642a8046150026ea806e2c85300a2c854808614e02002614c02002614a020026140026ea800e2c84f00a2646004614a020066eb8c28c040090a10145909f010c24004004c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1ecdd5000c59079183e983d1baa0018b20f0302c3079375460de60f26ea8c1f0c1e4dd50014590771983502b11839192cc004c1ccc1e0dd5000c5200089bad307c3079375400283b8c96600260e660f06ea8006298103d87a8000899198008009bab307d307a375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c194006260f0660fe60fa00497ae08a60103d87a800041ed13300400430810100341ec6eb8c1ec004c1f800507c20ee3233001001375660de60f26ea8c1bcc1e4dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b112cc004c1c8c1e0dd500144c8c8c966002610002005133067307f00313259800983b000c4c9660026104020031323259800983c800c4c966002610a0200313306c3084010010098b2104023080013754005159800983d000c4c8c8ca60026eb4c218040066eb4c2180400e6eb4c2180400922259800984500802403a2c843808610c02002610a020026100026ea800a2c83f107e183f1baa0013081010018b20fe307d3754005159800983b800c56600260fa6ea800a00b1641f91641ec83d8c1ecdd5000c5907d183f000983f000983c9baa0028b20ee375c60f208114a313232330010010592259800800c528456600266e3cdd7183e000801c528c4cc008008c1f400507720f4375c60f260ec6ea80a9074452820e88a5041d114a083a22941074452820e84590740c1cc004c1c8004c1c4004c1c00066002444b30010028a60103d87a80008acc004c19c006260d2660e060e200497ae08cc00400e60e4005303c001400c836106f4dd61837005cdd698370154dd69837016a444464653001001828ccc1ccdd3823998399ba700533073307402b4bd7052000a400148002900052000400444444444b30010078acc004dd6183d80344cc1e8dd40029983d1ba80043307a3750006660f46ea0008cc1e8dd40009983d183d983e183e00325eb822c83ca33001307b007983e003cc1f001a6eb0c1ec019222298009111114c00404a013006802c012007002800a0249bac307f0029bae307f308001002983f983e1baa307f307c375460e460f86ea8011222259800983d183f9baa0018acc004cdc79bae30830130800137540020db159800802c5a2646644b3001307c30820137540051332233063001132323322598009841009844009baa00189919199119192cc0056600266e1e60026eacc21404c23c04dd5006520009111192cc004c23404c24c04dd5000c4c8cdc000199b83337040086eb4c26004004c0c8dd6984c00984c808009bac309701309401375400316424804660760926612a026ea4010cc25404dd4801a5eb81038000c4cdd79849009847809baa309201308f013754018610a02611e026ea800e294108d0146600266122026e9c034cc24404dd39849808091984880984900984980802a5eb8266e0007002666e0006c00666e00068dd69849008014cdc000c80256600266ebc00c112266e00060026203084680901345908d011bad3091013092010015980099baf00104289984780a6010100003308f01375000c97ae089919848009ba83370666e08004114084cc24004dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802846008cdc0803001211602375a611c02002611c026116026ea800cc8c966002610802003132323322598009844809847809baa002899198208008acc004cdc38059bad309401309101375400313309301308701309101375400266126026ea56600266e3e60020110048012052304201389981380400145908f0125eb822c847808c24c04c24004dd500145908e0118278009bac309101002375c6120026122020026118026ea800a2b30013086010018991919912cc004c22404c23c04dd500144c8cc10400456600266e2402cdd6984a009848809baa0018991984a009ba80013309401375330013043014804c00e00b3766611a0266128026ea0cdc09bad309501309201375400401866128026ea0cdc09bad308801309201375400400297ae040a497ae03370666e08dd69843809848809baa00100b375a6128026122026ea80062c847808c24c04c24004dd500145908e0118278009bac309101309201002375c6120020026118026ea800a2c84500908a011845009baa001308d0100d376600316421c0466e0ccdc100080d01f1845008011bad308901308a010013085013754002610c026106026ea8008c96600260f86106026ea80062610e026108026ea80062c841008c21804c21c04c21c04c20c04dd51843009843809841809baa00b8b2102023301205e001308501006375a61060200a84080a3300100e806c03201700a804a00841f919800807403601900b805402500420fc107918020020888896600266e3e6002009002801a00c0058cc00401200300340191641b04464653001001a400100340044446464b30010038a45200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306d0018994c0040126eb4c1e00066eb8c1e0c1e4005005183a1baa0028acc004c1b80062646604866e2cdd6983c183a9baa001375c60d660ea6ea8004dd71814183a9baa00130773078307437540051323302433017375c60f00020106eb8c1e0c1e4004c1e0c1d0dd500120e441c860e46ea8004c1d401226464b3001306d0018994c0040126eb4c1e00066eb8c1e0c1e4005005183a1baa0028acc004c1b800626465300100b804c007300100a800c01500a4c1e4c1e800900f18031bad30780013074375400513233223322980080740320039800806c006010806a60e8660f66ea0cc094008030cc1ecdd49980d8010009983d983e183e80225eb810121bae307a00230080013079001375a60f000260e86ea800907220e43072375400260ea0088398c1d400d072111194c00402600f001cc0040220030044021002403860080046e00c0ec008dca0011111991194c004006900040110011112cc00400626603e6602400a004009132332259800983600144c8ca6002015007800e6002011001983c80320109bae30783079002403c60046eb4c1dc004c1ccdd5001c56600260da005132329800805401e0039800804400660f200c804260f060f20048070c008dd6983b80098399baa00389919914c004dd7183c8014c01000660f400e9114c00403a017002cc004032005001403130743307b37506604a006608e004660f66ea4cc06c00c008cc1ecc1f0c1f40152f5c0809060f00026eb4c1dc004c1ccdd5001a0e241c460e06ea8004dc0181e8019839800a0e237280066e5000888888cc06a600200b004981c801a01c98009980b802981c801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc07e600200b007801c00a002806001226603e0093001301a005803c00e005001403083704444464b3001980099b87001375a60de60d86ea800a94294506a44cc06e600200d005981d002201e33225980099b88003480422b300133710004900844cc07660020070058014005009244120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980ecc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013018002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883622b300133712900800144cc07522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980c001c0166030005001402513301d9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013018003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028836106c1bad306f306c3754004660366eb8c188c1b0dd50011bae301f306c37540051641a86602e00a607200644444b30013371200a900344cc062600200b0048014005008001c4cc06000e6002602c00b004801400500820ce22225980099b88004480222b300133710004900444cc05e6002009003801400500624412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980bcc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401d30013015002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401c83322b300133712900400144cc05d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980a802400e602a0050014019133017980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401d30013015004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401c833106608b20963042304c3754002609c60966ea800e2c82486092002608e004608e0026644b3001303c3042375400313259800981e98219baa0018991919192cc004c13000a266446608200244b30010028acc004c114c12cdd5002c4c8c8cc896600260a80071330523750010660a46e9801ccc14a6002b300132330010010312259800800c528456600266ebcc154c148dd5182a800805c528c4cc008008c15800505020a68994c00400602102a4004444b30010028a518acc00660026eb8c15800a051375c60ac002b954660020073057002982b800a0068a50414482a2294104e530103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", + "hash": "c808d98d4b07bb9d7a170c8afe6c8075ac11f4b5f3710344ab96df19" }, { "title": "l1_withdrawal_intent/spend_and_mint.l1_withdrawal_intent.mint", @@ -112,8 +112,8 @@ } } ], - "compiledCode": "592fed010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520a09c018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc0066002444b30010028a60103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444646530010018284cc1c8dd3823198391ba700533072307302a4bd7052000a400148002900052000400444444444b30010078acc004dd6183d00344cc1e4dd40029983c9ba8004330793750006660f26ea0008cc1e4dd40009983c983d183d983d80325eb822c83c233001307a007983d803cc1ec01a6eb0c1e8019222298009111114c00404a013006802c012007002800a0249bac307e0029bae307e307f002983f183d9baa307e307b375460e260f66ea8011222259800983c983f1baa0018acc004cdc79bae308201307f37540020d9159800802c5a2646644b3001307b30810137540051332233062001132323322598009840809843809baa00189919191919192cc0056600266e1e60026eacc21004c23804dd5006520009111192cc004c23004c24804dd5000c4c8cdc000199b83337040086eb4c25c04004cc0d52014375a612e026130020026eb0c25804c24c04dd5000c59091011981d0241984a009ba90043309401375200697ae040dc00313375e612202611c026ea8c24404c23804dd50061842009847009baa0068a504230051980099848009ba700d3309001374e612402024661200261220261240200897ae099b8001c00999b8001b00199b8001a375a612202005337000320075980099baf006043899b80018009880c211802404d164230046eb4c24004c244040056600266ebc01010626611c0298010100003308e01375000c97ae089919847809ba83370666e08004110084cc23c04dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802845808cdc0803000a11402375a611c020026464b30013084010018991919912cc004c22404c23c04dd500144c8cc10400456600266e1c030dd6984a009848809baa001899849809843809848809baa00133093013752b30013371f3001008802400902b182100a44cc0a002000a2c8478092f5c116423c046126026120026ea800a2c847008c13c004dd61848808011bae309001309101001308c013754005159800984300800c4c8c8cc8966002611202611e026ea800a264660820022b3001337120186eb4c25004c24404dd5000c4c8cc25004dd40009984a009ba99800982180ac0260070059bb3308d013309401375066e04dd6984a809849009baa00200d3309401375066e04dd69844009849009baa0020014bd7020564bd7019b83337046eb4c21c04c24404dd50008061bad309401309101375400316423c046126026120026ea800a2c847008c13c004dd61848809849008011bae309001001308c01375400516422804845008c22804dd50009846808071bb3001308b0130880137540031642180466e0ccdc100080d01e9844808011bad3088013089010013084013754002610a026104026ea8008c96600260f66104026ea80062610c026106026ea80062c840808c21404c21804c21804c20804dd51842809843009841009baa00b8b2100023301205d001308401006375a61040200a84000a3300100e806c03201700a804a00841f519800807403601900b805402500420fa1078180200204446644653001001a40010044004444b300100189980e9980800280100244c8cc896600260d4005132329800805401e0039800804400660ee00c80426eb8c1d8c1dc00900f18011bad307500130713754007159800983580144c8ca6002015007800e6002011001983b8032010983b183b801201c3002375a60ea00260e26ea800e26466453001375c60ee0053004001983c003a445300100e805c00b300100c801400500c4c1c8cc1e4dd41981180198228011983c9ba93301900300233079307a307b0054bd702024183b0009bad307500130713754006837906f18371baa0013700607600660e20028378dca0019b9400222222330189800802c012606e006806260026602a00a606e0079800a400148102002b8c66002902052040800ae319800a41000348102002b8c66002906000d2040800ae30911112cc004cdc4802a401d13301d9800802c01e007002800a01800489980e8024c004c06001600f003801400500c20d811111192cc006600266e1c004dd6983698351baa002a50a5141a11330199800803401660700088068cc896600266e2000d20108acc004cdc40012402113301b9800801c016005001402491120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", - "hash": "366e56090c06acb981e03299028b214fdfaca5dbefaa8415d276848a" + "compiledCode": "592ff9010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da6004004911114c004ca6002003039980301ba0022225980099b89001480022660ca980101800033065374e00497ae08acc00400a297ae110180008101800044c8cc198dd39983318338019bac306700133066306730680014bd704c00400e60ce0053031001400c8321061488896600266e240112002899809cc004012007001402000513301300298009809002400e0028041062488896600266e2001120048acc004cdc4001240091330139800802400e0028041221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d221200000000000000000000000000000000000000000000000000000000000000000004020831106248cc009201400148888cc88cc88c8cc88c8c8c8c8ca60026eb4c1cc0066eb8c1ccc1d00066eb4c1cc00d22259800983b80cc66002453001002a4001222232598009839983c9baa00189919b800033370666e08010dd6983f000980c1bad307e307f001375860fa60f46ea80062c83c0cc084014cc1ecdd48021983d9ba90034bd70203c99b80337020546eb4c1d802000666e00cdc09bad307602f00300148896600260e060ea6ea8c1e4c1e80ce2b30013370e66e04cc00cdd59836183b1baa306c3076375460f20380586600664660020020a844b30010018a5eb7bdb1822646644b30013074307a375400515980099b8f375c60fc60f66ea80080d226530010018014dd5983f984000983e1baa0044004444b30010028800c4c8cc8a600200d3085010059919800800802912cc00400626610a0266ec0dd48021ba60034bd6f7b63044ca60026eb8c20c040066eacc210040066110020049112cc004cdc8004001c4cc22404cdd81ba9008374c00e00b15980099b8f0080038992cc004c20404c21c04dd5000c4cc22804cdd81ba9009308b013088013754002005100242180464b300159800800c528c5282112028a60103d87a8000898418099845009ba60014bd70210c02329800800c022006800888966002005100189919914c00401a61220200b32330010010052259800800c4cc24404cdd81ba9004375000697adef6c608994c004dd7184780800cdd6984800800cc250040092225980099b9000800389984a8099bb037520106ea001c0162b30013371e010007132598009846809849809baa00189984b0099bb03752012612e026128026ea800400a2004849008c966002611a0200314c0103d87a800089847809984b009ba80014bd702124023370000e00513309501337606ea400cdd400119803003000a122024244043092010014240048030dd71845008009bad308b01001308d01002422c0513308901337606ea400cdd300119803003000a10a024214043086010014210048030dd7183f0009bab307f00130810100241fd100141e5100141e464b3001307430793754003130753307c307d307a375400297ae08a60103d87a800041e060f860f26ea8c1f0c1e4dd500099801801983e801183d800a0f202c375a60f201515980099baf046323232323232323232323232307d330840130850100c330840130850100b330840130850100a33084013085010093308401308501008330840130850100733084013085010063308401308501005330840130850100433084013085010033308401308501002330840130850100133084013085013086010013308401375001c66108026ea0034cc21004dd419b81375a610a0207a6eb4c21404050cc21004dd4992cc0040062b30013371202290004404a2c84080a2b30013087010018992cc004cdc4809240011013899912cc004c1fc006264b30013371e6603a006002607002d19800801cdd998410099844809ba801533089014c10100004bd70400501f459085011bac3089013086013754007159800984000800c4c8c8cc89660026106026112026ea800a2646607600233001303c01a803c00a0093766610c026611a026ea0cdc01bad308e01308b0137540020326611a026102026116026ea80052f5c08110c23404c22804dd50014590880118248009bac308b01308c01002375c611402002610c026ea800e2c842009084011bb30393083013754002841008c218040062c842009084011bac3085013086010223308401375066e00dd698428098430081e00825eb80c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1d8dd5024c566002b300133710900000344cdc499b82002375a60f206c66e0800520a09c018a5141d1159800cc004cdc0a4000603609914a13233001001323300100105a2259800800c52f5c113233223233001001375660fa00844b30010018801c4c8cc20404dd399840809ba90053308101307e0013308101307f0014bd7019801801984180801184080800a0fe375c60f20026600600660fc00460f800283d0896600200314bd7044cc896600266e3cdd7183e801033c4cc1f0dd380119802002000c4cc0100100050781bac307b001307c00141e49112cc004006005159800983e800c4c96600260c46eb8c1f4006266e1cdd6983e983f000802452820f0307d375860f800300241e883d115980099191980080082c912cc00400629422b30013371e6eb8c1f000400e294626600400460fa00283b907a1bae307930763754646644b3001307230783754005132598009839183c9baa0018992cc004c1d0c1e8dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002612002003375c612002025375c612002023375c61200201f30900100e9bae30900100d9bae30900100c984800805cdd71848008054c240040266eb8c2400402261200200f375c61200200d3090010059bae309001004984800801cc24004009222222222222222225980098510080944cc25404dd6185080810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309901309f01375400713232323298009bae30a7010019bae30a7010049bae30a7010039bae30a701002488896600261580200b1598009850809853809baa01b8992cc004c2b404006266140026eb0c2b0040048966002005103189918011858008019bae30ae0100242b0051642a8046150026ea806e2c85300a2c854808614e02002614c02002614a020026140026ea800e2c84f00a2646004614a020066eb8c28c040090a10145909f010c24004004c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1ecdd5000c59079183e983d1baa0018b20f0302c3079375460de60f26ea8c1f0c1e4dd50014590771983502b11839192cc004c1ccc1e0dd5000c5200089bad307c3079375400283b8c96600260e660f06ea8006298103d87a8000899198008009bab307d307a375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c194006260f0660fe60fa00497ae08a60103d87a800041ed13300400430810100341ec6eb8c1ec004c1f800507c20ee3233001001375660de60f26ea8c1bcc1e4dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b112cc004c1c8c1e0dd500144c8c8c966002610002005133067307f00313259800983b000c4c9660026104020031323259800983c800c4c966002610a0200313306c3084010010098b2104023080013754005159800983d000c4c8c8ca60026eb4c218040066eb4c2180400e6eb4c2180400922259800984500802403a2c843808610c02002610a020026100026ea800a2c83f107e183f1baa0013081010018b20fe307d3754005159800983b800c56600260fa6ea800a00b1641f91641ec83d8c1ecdd5000c5907d183f000983f000983c9baa0028b20ee375c60f208114a313232330010010592259800800c528456600266e3cdd7183e000801c528c4cc008008c1f400507720f4375c60f260ec6ea80a9074452820e88a5041d114a083a22941074452820e84590740c1cc004c1c8004c1c4004c1c00066002444b30010028a60103d87a80008acc004c19c006260d2660e060e200497ae08cc00400e60e4005303c001400c836106f4dd61837005cdd698370154dd69837016a444464653001001828ccc1ccdd3823998399ba700533073307402b4bd7052000a400148002900052000400444444444b30010078acc004dd6183d80344cc1e8dd40029983d1ba80043307a3750006660f46ea0008cc1e8dd40009983d183d983e183e00325eb822c83ca33001307b007983e003cc1f001a6eb0c1ec019222298009111114c00404a013006802c012007002800a0249bac307f0029bae307f308001002983f983e1baa307f307c375460e460f86ea8011222259800983d183f9baa0018acc004cdc79bae30830130800137540020db159800802c5a2646644b3001307c30820137540051332233063001132323322598009841009844009baa00189919199119192cc0056600266e1e60026eacc21404c23c04dd5006520009111192cc004c23404c24c04dd5000c4c8cdc000199b83337040086eb4c26004004c0c8dd6984c00984c808009bac309701309401375400316424804660760926612a026ea4010cc25404dd4801a5eb81038000c4cdd79849009847809baa309201308f013754018610a02611e026ea800e294108d0146600266122026e9c034cc24404dd39849808091984880984900984980802a5eb8266e0007002666e0006c00666e00068dd69849008014cdc000c80256600266ebc00c112266e00060026203084680901345908d011bad3091013092010015980099baf00104289984780a6010100003308f01375000c97ae089919848009ba83370666e08004114084cc24004dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802846008cdc0803001211602375a611c02002611c026116026ea800cc8c966002610802003132323322598009844809847809baa002899198208008acc004cdc38059bad309401309101375400313309301308701309101375400266126026ea56600266e3e60020110048012052304201389981380400145908f0125eb822c847808c24c04c24004dd500145908e0118278009bac309101002375c6120026122020026118026ea800a2b30013086010018991919912cc004c22404c23c04dd500144c8cc10400456600266e2402cdd6984a009848809baa0018991984a009ba80013309401375330013043014804c00e00b3766611a0266128026ea0cdc09bad309501309201375400401866128026ea0cdc09bad308801309201375400400297ae040a497ae03370666e08dd69843809848809baa00100b375a6128026122026ea80062c847808c24c04c24004dd500145908e0118278009bac309101309201002375c6120020026118026ea800a2c84500908a011845009baa001308d0100d376600316421c0466e0ccdc100080d01f1845008011bad308901308a010013085013754002610c026106026ea8008c96600260f86106026ea80062610e026108026ea80062c841008c21804c21c04c21c04c20c04dd51843009843809841809baa00b8b2102023301205e001308501006375a61060200a84080a3300100e806c03201700a804a00841f919800807403601900b805402500420fc107918020020888896600266e3e6002009002801a00c0058cc00401200300340191641b04464653001001a400100340044446464b30010038a45200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306d0018994c0040126eb4c1e00066eb8c1e0c1e4005005183a1baa0028acc004c1b80062646604866e2cdd6983c183a9baa001375c60d660ea6ea8004dd71814183a9baa00130773078307437540051323302433017375c60f00020106eb8c1e0c1e4004c1e0c1d0dd500120e441c860e46ea8004c1d401226464b3001306d0018994c0040126eb4c1e00066eb8c1e0c1e4005005183a1baa0028acc004c1b800626465300100b804c007300100a800c01500a4c1e4c1e800900f18031bad30780013074375400513233223322980080740320039800806c006010806a60e8660f66ea0cc094008030cc1ecdd49980d8010009983d983e183e80225eb810121bae307a00230080013079001375a60f000260e86ea800907220e43072375400260ea0088398c1d400d072111194c00402600f001cc0040220030044021002403860080046e00c0ec008dca0011111991194c004006900040110011112cc00400626603e6602400a004009132332259800983600144c8ca6002015007800e6002011001983c80320109bae30783079002403c60046eb4c1dc004c1ccdd5001c56600260da005132329800805401e0039800804400660f200c804260f060f20048070c008dd6983b80098399baa00389919914c004dd7183c8014c01000660f400e9114c00403a017002cc004032005001403130743307b37506604a006608e004660f66ea4cc06c00c008cc1ecc1f0c1f40152f5c0809060f00026eb4c1dc004c1ccdd5001a0e241c460e06ea8004dc0181e8019839800a0e237280066e5000888888cc06a600200b004981c801a01c98009980b802981c801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc07e600200b007801c00a002806001226603e0093001301a005803c00e005001403083704444464b3001980099b87001375a60de60d86ea800a94294506a44cc06e600200d005981d002201e33225980099b88003480422b300133710004900844cc07660020070058014005009244120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980ecc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013018002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883622b300133712900800144cc07522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980c001c0166030005001402513301d9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013018003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028836106c1bad306f306c3754004660366eb8c188c1b0dd50011bae301f306c37540051641a86602e00a607200644444b30013371200a900344cc062600200b0048014005008001c4cc06000e6002602c00b004801400500820ce22225980099b88004480222b300133710004900444cc05e6002009003801400500624412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980bcc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401d30013015002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401c83322b300133712900400144cc05d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980a802400e602a0050014019133017980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401d30013015004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401c833106608b20963042304c3754002609c60966ea800e2c82486092002608e004608e0026644b3001303c3042375400313259800981e98219baa0018991919192cc004c13000a266446608200244b30010028acc004c114c12cdd5002c4c8c8cc896600260a80071330523750010660a46e9801ccc14a6002b300132330010010312259800800c528456600266ebcc154c148dd5182a800805c528c4cc008008c15800505020a68994c00400602102a4004444b30010028a518acc00660026eb8c15800a051375c60ac002b954660020073057002982b800a0068a50414482a2294104e530103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", + "hash": "c808d98d4b07bb9d7a170c8afe6c8075ac11f4b5f3710344ab96df19" }, { "title": "l1_withdrawal_intent/spend_and_mint.l1_withdrawal_intent.else", @@ -128,8 +128,8 @@ } } ], - "compiledCode": "592fed010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da600400491111199119911991194c004888896600266e3e6002009002801a00c0058cc00401200300340191641a9329800800c102601a07c80088896600266e24005200089983626010180003306c374e00497ae08acc00400a297ae110180008101800044c8cc1b4dd39983698370019bac306e0013306d306e306f0014bd704c00400e60dc0053038001400c8359068488c8ca6002003480020068008888c8c9660020071489200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b00062646604466e2cdd6983b18399baa001375c60d260e66ea8004dd7181318399baa00130753076307237540051323302233015375c60ec0020106eb8c1d8c1dc004c1d8c1c8dd500120e041c060e06ea8004c1cc01226464b3001306b0018994c0040126eb4c1d80066eb8c1d8c1dc00500518391baa0028acc004c1b000626465300100b804c007300100a800c01500a4c1dcc1e000900f18031bad30760013072375400513233223322980080740320039800806c006010806a60e4660f26ea0cc08c008030cc1e4dd49980c8010009983c983d183d80225eb810121bae307800230080013077001375a60ec00260e46ea800907020e03070375400260e60088388c1cc00d070111194c00402600f001cc0040220030044021002403860080046e00c0e4008dca001244464646464653001375a60e4003375c60e460e6003375a60e40069112cc004c1d806233001229800801520009111192cc004c1c8c1e0dd5000c4c8cdc000199b83337040086eb4c1f4004cc06d2014375a60fa60fc0026eb0c1f0c1e4dd5000c59077198100029983d1ba90043307a375200697ae040753370066e040a4dd6983a804000ccdc019b81375a60ea05c0060029112cc004c1bcc1d0dd5183c183c819456600266e1ccdc0998019bab306b3075375460d660ea6ea8c1e006c0accc00cc8cc00400414c896600200314bd6f7b63044c8cc896600260e660f26ea800a2b30013371e6eb8c1f4c1e8dd5001019c4ca60020030029bab307e307f307b3754008800888966002005100189919914c00401a61080200b32330010010052259800800c4cc21004cdd81ba9004374c00697adef6c608994c004dd7184100800cdd5984180800cc21c040092225980099b900080038998440099bb037520106e9801c0162b30013371e010007132598009840009843009baa0018998448099bb03752012611402610e026ea800400a2004842808c966002b30010018a518a5042200514c103d87a8000898410099844809ba60014bd70210a02329800800c022006800888966002005100189919914c00401a61200200b32330010010052259800800c4cc24004cdd81ba9004375000697adef6c608994c004dd7184700800cdd6984780800cc24c040092225980099b9000800389984a0099bb037520106ea001c0162b30013371e010007132598009846009849009baa00189984a8099bb03752012612c026126026ea800400a2004848808c96600261180200314c0103d87a800089847009984a809ba80014bd702122023370000e00513309401337606ea400cdd400119803003000a12002424004309101001423c048030dd71844808009bad308a01001308c0100242280513308801337606ea400cdd300119803003000a10802421004308501001420c048030dd7183e8009bab307e00130800100241f9100141e1100141e064b3001307330783754003130743307b307c3079375400297ae08a60103d87a800041dc60f660f06ea8c1ecc1e0dd500099801801983e001183d000a0f002b375a60f001515980099baf045323232323232323232323232307c330830130840100c330830130840100b330830130840100a33083013084010093308301308401008330830130840100733083013084010063308301308401005330830130840100433083013084010033308301308401002330830130840100133083013084013085010013308301375001c66106026ea0034cc20c04dd419b81375a6108020786eb4c21004050cc20c04dd4992cc0040062b30013371202290004404a2c84000a2b30013086010018992cc004cdc4809240011013899912cc004c1f8006264b30013371e6603a006002606e02d19800801cdd998408099844009ba801533088014c10100004bd704005020459084011bac3088013085013754007159800983f800c4c8c8cc89660026104026110026ea800a2646607400233001303b01a803c00a0093766610a0266118026ea0cdc01bad308d01308a01375400203266118026100026114026ea80052f5c08118c23004c22404dd50014590870118240009bac308a01308b01002375c611202002610a026ea800e2c841809083011bb30383082013754002840808c214040062c841809083011bac3084013085010193308301375066e00dd698420098428081d80825eb80c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1e8004c1d4dd50244566002b300133710900000344cdc499b82002375a60f006a66e0800520a09c018a5141cd159800cc004cdc0a4000603409714a1323300100132330010010592259800800c52f5c113233223233001001375660f800844b30010018801c4c8cc20004dd399840009ba90053308001307d0013308001307e0014bd7019801801984100801184000800a0fc375c60f00026600600660fa00460f600283c8896600200314bd7044cc896600266e3cdd7183e00103344cc1ecdd380119802002000c4cc0100100050771bac307a001307b00141e09112cc004006005159800983e000c4c96600260c26eb8c1f0006266e1cdd6983e183e800802452820ee307c375860f600300241e483c915980099191980080082c112cc00400629422b30013371e6eb8c1ec00400e294626600400460f800283b10791bae307830753754646644b3001307130773754005132598009838983c1baa0018992cc004c1ccc1e4dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002611e02003375c611e02025375c611e02023375c611e0201f308f0100e9bae308f0100d9bae308f0100c984780805cdd71847808054c23c040266eb8c23c04022611e0200f375c611e0200d308f010059bae308f01004984780801cc23c04009222222222222222225980098508080944cc25004dd6185000810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309801309e01375400713232323298009bae30a6010019bae30a6010049bae30a6010039bae30a601002488896600261560200b1598009850009853009baa01b8992cc004c2b00400626613e026eb0c2ac040048966002005103189918011857808019bae30ad0100242ac051642a404614e026ea806e2c85280a2c854008614c02002614a02002614802002613e026ea800e2c84e80a26460046148020066eb8c288040090a00145909e010c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1e8dd5000c59078183e183c9baa0018b20ee302b3078375460dc60f06ea8c1ecc1e0dd50014590761983482a91838992cc004c1c8c1dcdd5000c5200089bad307b3078375400283b0c96600260e460ee6ea8006298103d87a8000899198008009bab307c3079375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c190006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b20ec3233001001375660dc60f06ea8c1b8c1e0dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ec660fa60f600497ae08a60103d87a800041e5133004004307f00341e46eb8c1e4004c1f000507a112cc004c1c4c1dcdd500144c8c8c96600260fe005133066307e00313259800983a800c4c9660026102020031323259800983c000c4c96600261080200313306b3083010010098b210202307f3754005159800983c800c4c8c8ca60026eb4c214040066eb4c2140400e6eb4c2140400922259800984480802403a2c843008610a0200261080200260fe6ea800a2c83e907d183e9baa0013080010018b20fc307c3754005159800983b000c56600260f86ea800a00b1641f51641e883d0c1e8dd5000c5907c183e800983e800983c1baa0028b20ec375c60f007f14a313232330010010582259800800c528456600266e3cdd7183d800801c528c4cc008008c1f000507620f2375c60f060ea6ea80a5073452820e68a5041cd14a0839a2941073452820e64590730c1c8004c1c4004c1c0004c1bc0066002444b30010028a60103d87a80008acc004c198006260d0660de60e000497ae08cc00400e60e2005303b001400c835906e4dd618368014dd69836814cdd6983681624444646530010018284cc1c8dd3823198391ba700533072307302a4bd7052000a400148002900052000400444444444b30010078acc004dd6183d00344cc1e4dd40029983c9ba8004330793750006660f26ea0008cc1e4dd40009983c983d183d983d80325eb822c83c233001307a007983d803cc1ec01a6eb0c1e8019222298009111114c00404a013006802c012007002800a0249bac307e0029bae307e307f002983f183d9baa307e307b375460e260f66ea8011222259800983c983f1baa0018acc004cdc79bae308201307f37540020d9159800802c5a2646644b3001307b30810137540051332233062001132323322598009840809843809baa00189919191919192cc0056600266e1e60026eacc21004c23804dd5006520009111192cc004c23004c24804dd5000c4c8cdc000199b83337040086eb4c25c04004cc0d52014375a612e026130020026eb0c25804c24c04dd5000c59091011981d0241984a009ba90043309401375200697ae040dc00313375e612202611c026ea8c24404c23804dd50061842009847009baa0068a504230051980099848009ba700d3309001374e612402024661200261220261240200897ae099b8001c00999b8001b00199b8001a375a612202005337000320075980099baf006043899b80018009880c211802404d164230046eb4c24004c244040056600266ebc01010626611c0298010100003308e01375000c97ae089919847809ba83370666e08004110084cc23c04dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802845808cdc0803000a11402375a611c020026464b30013084010018991919912cc004c22404c23c04dd500144c8cc10400456600266e1c030dd6984a009848809baa001899849809843809848809baa00133093013752b30013371f3001008802400902b182100a44cc0a002000a2c8478092f5c116423c046126026120026ea800a2c847008c13c004dd61848808011bae309001309101001308c013754005159800984300800c4c8c8cc8966002611202611e026ea800a264660820022b3001337120186eb4c25004c24404dd5000c4c8cc25004dd40009984a009ba99800982180ac0260070059bb3308d013309401375066e04dd6984a809849009baa00200d3309401375066e04dd69844009849009baa0020014bd7020564bd7019b83337046eb4c21c04c24404dd50008061bad309401309101375400316423c046126026120026ea800a2c847008c13c004dd61848809849008011bae309001001308c01375400516422804845008c22804dd50009846808071bb3001308b0130880137540031642180466e0ccdc100080d01e9844808011bad3088013089010013084013754002610a026104026ea8008c96600260f66104026ea80062610c026106026ea80062c840808c21404c21804c21804c20804dd51842809843009841009baa00b8b2100023301205d001308401006375a61040200a84000a3300100e806c03201700a804a00841f519800807403601900b805402500420fa1078180200204446644653001001a40010044004444b300100189980e9980800280100244c8cc896600260d4005132329800805401e0039800804400660ee00c80426eb8c1d8c1dc00900f18011bad307500130713754007159800983580144c8ca6002015007800e6002011001983b8032010983b183b801201c3002375a60ea00260e26ea800e26466453001375c60ee0053004001983c003a445300100e805c00b300100c801400500c4c1c8cc1e4dd41981180198228011983c9ba93301900300233079307a307b0054bd702024183b0009bad307500130713754006837906f18371baa0013700607600660e20028378dca0019b9400222222330189800802c012606e006806260026602a00a606e0079800a400148102002b8c66002902052040800ae319800a41000348102002b8c66002906000d2040800ae30911112cc004cdc4802a401d13301d9800802c01e007002800a01800489980e8024c004c06001600f003801400500c20d811111192cc006600266e1c004dd6983698351baa002a50a5141a11330199800803401660700088068cc896600266e2000d20108acc004cdc40012402113301b9800801c016005001402491120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980dcc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883522b300133712900800144cc06d22120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980b001c016602c005001402513301b9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013016003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028835106a1bad306d306a3754004660326eb8c180c1a8dd50011bae301d306a37540051641a06602a00a606e00644444b30013371200a900344cc05a600200b0048014005007001c4cc05800e6002602800b004801400500720ca22225980099b88004480222b300133710004900444cc0566002009003801400500524412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980acc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401883222b300133712900400144cc0552212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009809802400e60260050014015133015980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401930013013004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004018832106411112cc004cdc4802240051330139800802400e002804000a26602600530013012004801c00500820c422225980099b88004480122b300133710004900244cc04e6002009003800a0104881200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d2212000000000000000000000000000000000000000000000000000000000000000000040208311062116412c608460986ea8004c138c12cdd5001c590490c124004c11c008c11c004cc8966002607860846ea8006264b3001303d3043375400313232323259800982600144cc88cc1040048966002005159800982298259baa0058991919912cc004c15000e2660a46ea0020cc148dd3003998294c00566002646600200206244b30010018a508acc004cdd7982a98291baa305500100b8a51899801001182b000a0a0414d1329800800c04205480088896600200514a3159800cc004dd7182b00140a26eb8c15800572a8cc00400e60ae0053057001400d14a082890544528209ca60103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", - "hash": "366e56090c06acb981e03299028b214fdfaca5dbefaa8415d276848a" + "compiledCode": "592ff9010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013374a90004dc3a4005370e90004dc3a400922323300100100322330030013002002918041804800a44444453001300f0079807003c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260166602400297ae0899801801980a001201c301200140412232598009803800c4c8c8cc8966002602c0070068b2026375c60260026eb4c04c008c04c004c038dd5001c5660026010003132332259800980a800c4c966002601660226ea800626464653001375c6030003375a6030007375c60300049112cc004c070012019164064301800130170013012375400316404060280031640486eb4c048004c04c004c038dd5001c566002600c003132323298009bae30140019bad30140039bae301400248896600260300090088b202a180a000980980098071baa0038b201840308060c030dd500124444653001300f37540032232598009806000c56600260266ea800e0051640511598009806800c4c8c8c8ca60026eb0c0680066eb8c06800e6eb0c06800922259800980f00244cc044dd6180e803912cc00400a26602600644b300100289980a803912cc00400a01f132332259800980e00144c966002605000313301b3758604e00244b300100280244cc060c0a40084c004c0a800902745902518119baa0038acc004c07400a2646644b3001302a00189980e9bac30290012259800801401a2660346056004260026058004814a2c8138dd71813800981400098119baa0038acc004c06c00a2646464b3001302a00289980e9bac30290032259800801401a2660346056004260026058004814a2c8138dd71814000981400098119baa0038b204240848108c080dd500089801181280198118012042899180118118019bae3021002407d13230023021003375a603e00480ea2c80d860340026032002603000260266ea800e2b3001300b0018acc004c04cdd5001c00a2c80a22c80890112022301137540053013005488966002601a00713233223322598009808980b9baa0028992cc004c04cc060dd5000c4c8c966002602860346ea8006264660160022b30013016301b375400314a314a080d0c078c06cdd5000c5901919198008009bab301e301f301f301f301f301f301f301f301f301f0062259800800c530103d87a80008992cc004cdd7802180e000c4c060cc07cc0740052f5c11330030033021002406c603e00280e8c050cc06cc070c064dd5000a5eb822c80b8c06cc060dd5180d980c1baa300e30183754603660306ea800a2c80b0cc024dd6180c800919baf301a3017375400200660326034006602e00260286ea8020c04cdd5002456600260180071323300300219800980a1baa00891192cc004c04000626464b3001301d00280245901a1bae301b001301737540071598009808800c4c8c966002603a0050048b2034375c6036002602e6ea800e2c80a9015180a9baa002918081980b99ba548008cc05cdd4800a5eb80cc05d300103d87a80004bd704c04cdd50014dc7a44100488888cc88cc88ca60026eacc0840066eb0c084c088c088c088c0880066eb0c08402a6eb0c08401644b30013019301f3754005132323259800981380144cc01cc09800c0122c8120dd69812800981280098101baa0028b203c9bac3021003488888966002603a01b132598009814800c4cc89660026040604c6ea80062646464b3001302e00289980718168018acc004cdc42400000310058a5040a11640ac6eb4c0b0004c0b0004c09cdd5000c5902519912cc0040060051598009815800c4c96600260206eb8c0ac006260446eb4c0acc0b0006294102618159bac302a001801205040a02940c8cc004004c8cc004004024896600200314bd7044c8cc88c8cc004004dd59816002112cc004006200713233030374e660606ea4014cc0c0c0b4004cc0c0c0b80052f5c066006006606400460600028170dd718140009980180198168011815800a0522259800800c52f5c1133225980099b8f375c605800402d13302b374e00466008008003133004004001409c6eb0c0a8004c0ac005028192cc004c078c094dd5000c4c0a4c098dd5000c5902418141814981498129baa30280018b204c3232330010010032259800800c52f5c11332259800acc004cdd7981618149baa0020058991980080099198008009bab302e302f302b375400844b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d112cc00400629422b30013371e6eb8c0b8dd6181700080c4528c4cc008008c0bc00502920588a50409d13302b00233004004001899802002000a04e302a001302b00140a0601c023159800980f006c4c8c8ca60026eb0c0a80066eb0c0a8c0ac006646600200201044b30010018a5eb8226644b300132330010013233001001375660606062605a6ea8c0c0c0c4c0b4dd5002112cc004006297ae0899199119198008009bab30320042259800800c400e2646606c6e9ccc0d8dd48029981b18198009981b181a000a5eb80cc00c00cc0e0008c0d80050341bae302e001330030033033002303100140bc44b30010018a508acc004cdc79bae30303758606000205514a3133002002303100140ac817226605a0046600800800313300400400140a46058002605a00281526eb0c0a800e6eb8c0a800922222598009818001c4c8cc88cc0040084c9660026068003132330030011980091112cc004cdc400124061130010028acc004cdc380124061133004480088c0080062b300133710004901c44cc00ccdc724503020408003370000490189180119bca4a2003124bded8c10140000101200040cc81990334dc024003370e907f01cdc02400522337600046ea000660626ea8011222222980091111194c0040060070024004444b300133712004900044c0052f5c112323298008034c0400164600a6608a004003375a60840048030c1000066002013008800a00e40f5222232330010010022233006480089660026016003130024bd70448c8ca600200d23006330440020019bad30410024018607e0033001008803cc02c005006207891114c00401200700291980200091801800a014981d800a444466446644664466446644653001304a0019bae304900c98248054dd698248024dd59824801a44444b30013044304a37540071323259800982318261baa0018cc0048c144c148c14800644b30010018a40011301b330020023053001414125980099b87371a0029020440062c826244b30013048304e375400513232332259800982b801c0162c82a0dd6982a0009bad30540023054001304f375400516413522372866e280080066e0120039b804801e44b300130483370c002900244cdc199b8e0023370600290022404113370c66e38008cdc1800a40089010209a914c00400666e04dc6801000c0097189b804803e444646600200200844b3001001880244c8cc88cc88cc008008004896600200310038994c0040166eb8c15c0066eb4c1600066600600660b80048048c1680050581bab3055003375c60a40026600600660ae00460aa002829a44646600200200644b30010018a6103d87a80008992cc004cdd79ba70043051001898269982a1829000a5eb8226600600660ac0048280c15000505248896600266e2000520008a40011598009824800c520028992cc004c128cdc300124009198008024c00400e66e0c009200440111300198008024c00400e66e0cc07c009200440108278dc1001209c413932323300100102f2259800800c52f5c11332259800acc004cdd7982a98291baa305530563052375400400b132330010013233001001375660ae60b060a86ea8c15cc160c150dd5002112cc004006297ae0899199119198008009bab30590042259800800c400e264660ba6e9ccc174dd48029982e982d0009982e982d800a5eb80cc00c00cc17c008c17400505b1bae305500133003003305a0023058001415844b30010018a508acc004cdc79bae3057375860ae0020a314a31330020023058001414882aa294105044cc150008cc0100100062660080080028280c14c004c150005051181b8032444444444444453001300d00d9112cc004cdc4801a400113300d00200189980680080120b89111919800800801912cc004cdc4801800c522100899b8b3300c00500133002002302c00141792259800982b19b8600148012266e2d20fe033300800233706002900244cdc5a400066e2ccc024008004cc020008cdc19814800a400882da6004004911114c004ca6002003039980301ba0022225980099b89001480022660ca980101800033065374e00497ae08acc00400a297ae110180008101800044c8cc198dd39983318338019bac306700133066306730680014bd704c00400e60ce0053031001400c8321061488896600266e240112002899809cc004012007001402000513301300298009809002400e0028041062488896600266e2001120048acc004cdc4001240091330139800802400e0028041221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100899809cc00401200748920000000000000000000000000000000000000000000000000000000000000000000402130013012002800d22120000000000000000000000000000000000000000000000000000000000000000000402083122b300133712900200144cc04d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009809002400e00280422660273001002800d22120000000000000000000000000000000000000000000000000000000000000000000402130013012004801d221200000000000000000000000000000000000000000000000000000000000000000004020831106248cc009201400148888cc88cc88c8cc88c8c8c8c8ca60026eb4c1cc0066eb8c1ccc1d00066eb4c1cc00d22259800983b80cc66002453001002a4001222232598009839983c9baa00189919b800033370666e08010dd6983f000980c1bad307e307f001375860fa60f46ea80062c83c0cc084014cc1ecdd48021983d9ba90034bd70203c99b80337020546eb4c1d802000666e00cdc09bad307602f00300148896600260e060ea6ea8c1e4c1e80ce2b30013370e66e04cc00cdd59836183b1baa306c3076375460f20380586600664660020020a844b30010018a5eb7bdb1822646644b30013074307a375400515980099b8f375c60fc60f66ea80080d226530010018014dd5983f984000983e1baa0044004444b30010028800c4c8cc8a600200d3085010059919800800802912cc00400626610a0266ec0dd48021ba60034bd6f7b63044ca60026eb8c20c040066eacc210040066110020049112cc004cdc8004001c4cc22404cdd81ba9008374c00e00b15980099b8f0080038992cc004c20404c21c04dd5000c4cc22804cdd81ba9009308b013088013754002005100242180464b300159800800c528c5282112028a60103d87a8000898418099845009ba60014bd70210c02329800800c022006800888966002005100189919914c00401a61220200b32330010010052259800800c4cc24404cdd81ba9004375000697adef6c608994c004dd7184780800cdd6984800800cc250040092225980099b9000800389984a8099bb037520106ea001c0162b30013371e010007132598009846809849809baa00189984b0099bb03752012612e026128026ea800400a2004849008c966002611a0200314c0103d87a800089847809984b009ba80014bd702124023370000e00513309501337606ea400cdd400119803003000a122024244043092010014240048030dd71845008009bad308b01001308d01002422c0513308901337606ea400cdd300119803003000a10a024214043086010014210048030dd7183f0009bab307f00130810100241fd100141e5100141e464b3001307430793754003130753307c307d307a375400297ae08a60103d87a800041e060f860f26ea8c1f0c1e4dd500099801801983e801183d800a0f202c375a60f201515980099baf046323232323232323232323232307d330840130850100c330840130850100b330840130850100a33084013085010093308401308501008330840130850100733084013085010063308401308501005330840130850100433084013085010033308401308501002330840130850100133084013085013086010013308401375001c66108026ea0034cc21004dd419b81375a610a0207a6eb4c21404050cc21004dd4992cc0040062b30013371202290004404a2c84080a2b30013087010018992cc004cdc4809240011013899912cc004c1fc006264b30013371e6603a006002607002d19800801cdd998410099844809ba801533089014c10100004bd70400501f459085011bac3089013086013754007159800984000800c4c8c8cc89660026106026112026ea800a2646607600233001303c01a803c00a0093766610c026611a026ea0cdc01bad308e01308b0137540020326611a026102026116026ea80052f5c08110c23404c22804dd50014590880118248009bac308b01308c01002375c611402002610c026ea800e2c842009084011bb30393083013754002841008c218040062c842009084011bac3085013086010223308401375066e00dd698428098430081e00825eb80c21404004c21004004c20c04004c20804004c20404004c20004004c1fc004c1f8004c1f4004c1f0004c1ec004c1d8dd5024c566002b300133710900000344cdc499b82002375a60f206c66e0800520a09c018a5141d1159800cc004cdc0a4000603609914a13233001001323300100105a2259800800c52f5c113233223233001001375660fa00844b30010018801c4c8cc20404dd399840809ba90053308101307e0013308101307f0014bd7019801801984180801184080800a0fe375c60f20026600600660fc00460f800283d0896600200314bd7044cc896600266e3cdd7183e801033c4cc1f0dd380119802002000c4cc0100100050781bac307b001307c00141e49112cc004006005159800983e800c4c96600260c46eb8c1f4006266e1cdd6983e983f000802452820f0307d375860f800300241e883d115980099191980080082c912cc00400629422b30013371e6eb8c1f000400e294626600400460fa00283b907a1bae307930763754646644b3001307230783754005132598009839183c9baa0018992cc004c1d0c1e8dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca6002612002003375c612002025375c612002023375c61200201f30900100e9bae30900100d9bae30900100c984800805cdd71848008054c240040266eb8c2400402261200200f375c61200200d3090010059bae309001004984800801cc24004009222222222222222225980098510080944cc25404dd6185080810912cc00400a26605001e26605001826605001426605001026605000c2660500082b3001309901309f01375400713232323298009bae30a7010019bae30a7010049bae30a7010039bae30a701002488896600261580200b1598009850809853809baa01b8992cc004c2b404006266140026eb0c2b0040048966002005103189918011858008019bae30ae0100242b0051642a8046150026ea806e2c85300a2c854808614e02002614c02002614a020026140026ea800e2c84f00a2646004614a020066eb8c28c040090a10145909f010c24004004c23c04004c23804004c23404004c23004004c22c04004c22804004c22404004c22004004c21c04004c21804004c21404004c21004004c20c04004c20804004c20404004c20004004c1ecdd5000c59079183e983d1baa0018b20f0302c3079375460de60f26ea8c1f0c1e4dd50014590771983502b11839192cc004c1ccc1e0dd5000c5200089bad307c3079375400283b8c96600260e660f06ea8006298103d87a8000899198008009bab307d307a375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c194006260f0660fe60fa00497ae08a60103d87a800041ed13300400430810100341ec6eb8c1ec004c1f800507c20ee3233001001375660de60f26ea8c1bcc1e4dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c018006260ee660fc60f800497ae08a60103d87a800041e913300400430800100341e86eb8c1e8004c1f400507b112cc004c1c8c1e0dd500144c8c8c966002610002005133067307f00313259800983b000c4c9660026104020031323259800983c800c4c966002610a0200313306c3084010010098b2104023080013754005159800983d000c4c8c8ca60026eb4c218040066eb4c2180400e6eb4c2180400922259800984500802403a2c843808610c02002610a020026100026ea800a2c83f107e183f1baa0013081010018b20fe307d3754005159800983b800c56600260fa6ea800a00b1641f91641ec83d8c1ecdd5000c5907d183f000983f000983c9baa0028b20ee375c60f208114a313232330010010592259800800c528456600266e3cdd7183e000801c528c4cc008008c1f400507720f4375c60f260ec6ea80a9074452820e88a5041d114a083a22941074452820e84590740c1cc004c1c8004c1c4004c1c00066002444b30010028a60103d87a80008acc004c19c006260d2660e060e200497ae08cc00400e60e4005303c001400c836106f4dd61837005cdd698370154dd69837016a444464653001001828ccc1ccdd3823998399ba700533073307402b4bd7052000a400148002900052000400444444444b30010078acc004dd6183d80344cc1e8dd40029983d1ba80043307a3750006660f46ea0008cc1e8dd40009983d183d983e183e00325eb822c83ca33001307b007983e003cc1f001a6eb0c1ec019222298009111114c00404a013006802c012007002800a0249bac307f0029bae307f308001002983f983e1baa307f307c375460e460f86ea8011222259800983d183f9baa0018acc004cdc79bae30830130800137540020db159800802c5a2646644b3001307c30820137540051332233063001132323322598009841009844009baa00189919199119192cc0056600266e1e60026eacc21404c23c04dd5006520009111192cc004c23404c24c04dd5000c4c8cdc000199b83337040086eb4c26004004c0c8dd6984c00984c808009bac309701309401375400316424804660760926612a026ea4010cc25404dd4801a5eb81038000c4cdd79849009847809baa309201308f013754018610a02611e026ea800e294108d0146600266122026e9c034cc24404dd39849808091984880984900984980802a5eb8266e0007002666e0006c00666e00068dd69849008014cdc000c80256600266ebc00c112266e00060026203084680901345908d011bad3091013092010015980099baf00104289984780a6010100003308f01375000c97ae089919848009ba83370666e08004114084cc24004dd419b810070014bd70192cc004cdc4800a4001148002266e0ccdc1000810241413802846008cdc0803001211602375a611c02002611c026116026ea800cc8c966002610802003132323322598009844809847809baa002899198208008acc004cdc38059bad309401309101375400313309301308701309101375400266126026ea56600266e3e60020110048012052304201389981380400145908f0125eb822c847808c24c04c24004dd500145908e0118278009bac309101002375c6120026122020026118026ea800a2b30013086010018991919912cc004c22404c23c04dd500144c8cc10400456600266e2402cdd6984a009848809baa0018991984a009ba80013309401375330013043014804c00e00b3766611a0266128026ea0cdc09bad309501309201375400401866128026ea0cdc09bad308801309201375400400297ae040a497ae03370666e08dd69843809848809baa00100b375a6128026122026ea80062c847808c24c04c24004dd500145908e0118278009bac309101309201002375c6120020026118026ea800a2c84500908a011845009baa001308d0100d376600316421c0466e0ccdc100080d01f1845008011bad308901308a010013085013754002610c026106026ea8008c96600260f86106026ea80062610e026108026ea80062c841008c21804c21c04c21c04c20c04dd51843009843809841809baa00b8b2102023301205e001308501006375a61060200a84080a3300100e806c03201700a804a00841f919800807403601900b805402500420fc107918020020888896600266e3e6002009002801a00c0058cc00401200300340191641b04464653001001a400100340044446464b30010038a45200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001306d0018994c0040126eb4c1e00066eb8c1e0c1e4005005183a1baa0028acc004c1b80062646604866e2cdd6983c183a9baa001375c60d660ea6ea8004dd71814183a9baa00130773078307437540051323302433017375c60f00020106eb8c1e0c1e4004c1e0c1d0dd500120e441c860e46ea8004c1d401226464b3001306d0018994c0040126eb4c1e00066eb8c1e0c1e4005005183a1baa0028acc004c1b800626465300100b804c007300100a800c01500a4c1e4c1e800900f18031bad30780013074375400513233223322980080740320039800806c006010806a60e8660f66ea0cc094008030cc1ecdd49980d8010009983d983e183e80225eb810121bae307a00230080013079001375a60f000260e86ea800907220e43072375400260ea0088398c1d400d072111194c00402600f001cc0040220030044021002403860080046e00c0ec008dca0011111991194c004006900040110011112cc00400626603e6602400a004009132332259800983600144c8ca6002015007800e6002011001983c80320109bae30783079002403c60046eb4c1dc004c1ccdd5001c56600260da005132329800805401e0039800804400660f200c804260f060f20048070c008dd6983b80098399baa00389919914c004dd7183c8014c01000660f400e9114c00403a017002cc004032005001403130743307b37506604a006608e004660f66ea4cc06c00c008cc1ecc1f0c1f40152f5c0809060f00026eb4c1dc004c1ccdd5001a0e241c460e06ea8004dc0181e8019839800a0e237280066e5000888888cc06a600200b004981c801a01c98009980b802981c801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc07e600200b007801c00a002806001226603e0093001301a005803c00e005001403083704444464b3001980099b87001375a60de60d86ea800a94294506a44cc06e600200d005981d002201e33225980099b88003480422b300133710004900844cc07660020070058014005009244120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980ecc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013018002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402883622b300133712900800144cc07522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a009800980c001c0166030005001402513301d9800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402930013018003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a441200000000000000000000000000000000000000000000000000000000000000000004028836106c1bad306f306c3754004660366eb8c188c1b0dd50011bae301f306c37540051641a86602e00a607200644444b30013371200a900344cc062600200b0048014005008001c4cc06000e6002602c00b004801400500820ce22225980099b88004480222b300133710004900444cc05e6002009003801400500624412085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10089980bcc004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401d30013015002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401c83322b300133712900400144cc05d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1009800980a802400e602a0050014019133017980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401d30013015004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401c833106608b20963042304c3754002609c60966ea800e2c82486092002608e004608e0026644b3001303c3042375400313259800981e98219baa0018991919192cc004c13000a266446608200244b30010028acc004c114c12cdd5002c4c8c8cc896600260a80071330523750010660a46e9801ccc14a6002b300132330010010312259800800c528456600266ebcc154c148dd5182a800805c528c4cc008008c15800505020a68994c00400602102a4004444b30010028a518acc00660026eb8c15800a051375c60ac002b954660020073057002982b800a0068a50414482a2294104e530103d87a8000a60103d8798000413897ae08b20a2375a60a20026eb8c144008c144004c130dd5002c5904a44c8c8c8cc896600260aa00713232332259800982c801c4c028c16402e2c82b0dd6982b0009bad30560023056001375860a200b1641486eb8c148004dd7182900118290009bac304c001304f00241346eb4c12c010dd59825801c5904918250009825000982480098221baa0018b20843046304337540031641046eb0c110c114c114c114c114c114c114c114c114c114c114c114c104dd500a180100b1822982298228009192cc004c0e80062980103d87a80008992cc006600260766eb4c1080069429450404530103d87a80008981e998221820800a5eb810404c00488006444b3001337120029000452f7b63010140000101200089980119b8e0053370200800266e0400400d04248896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e00ab8c19b810010034109001401081f8dc68009821800980100118208009119800911191919bb032374e6608a60840026608a608600297ae033760608200460820026084003300100691000c012007375a60820028032600200b22001801c00a002802888cc00920022325980099b89001480122b3001303a0018cc004012007002918069ba80014041159800981d800c6600200900399b80002480fe4601a6ea0c040cdc0a400000280822b30013370e004905f00c4c8cc0040048c038dd48009119803240044b30013011001898012441008cc00401e00d33700002903fc8cc0100108c010cdc5001000a016410919800802400e66e00009207f918069ba9001402081f903f207e8acc004cdc3800a401919800802400e66e0000920ff02919802a40044b30013370e004906600c492f7b63001014000010120008992cc004cdc38012417c0519800803c01a6601201244003230103374a0040028062330010078034cdc0001241fe0329800804401e66014014440030019180899ba5003001403880990422cc004cdc4a41002800513370066e0000920ff134803a266e0000920f10141048209010456600266e1c00520088acc004cdc38012417c0519800802400e6600c00c440032300d374e002804a33001004801ccdc0001241fe0329800802c0126600e00e44003001918071ba7001402c808103f456600266e1c005200a8acc004cdc3801241fc0513232330010012300f374c002446600e900112cc004c0480062600497adef6c608919194c00401a4600c66096004003375a60900048030c8cdd81825800982598260009bac30460019800804c02260240028029043198030031100146600200900399b80002482fc0a464653001001801c8c040dd3000a0022225980099b89002480022600297adef6c608919194c00401a602e00b230053304c0020019bad304900240186466ec0c130004c130c134004dd61823800cc00402a01300140148220cc01c01c88009010207e8925ef6c610140000101200040fc81f903f207e337060029020181f981f981f981f981f981f981f800864b300130293030375400313034303137540031640bc60666068606860606ea8c0cc0062c8188c8c8cc004004038896600200314bd7044cc8966002b30013375e606e60686ea80080162646600200264660020026eacc0e4c0e8c0d8dd5002112cc004006297ae0899199119198008009bab303b0042259800800c400e2646607e6e9ccc0fcdd48029981f981e0009981f981e800a5eb80cc00c00cc104008c0fc00503d1bae303700133003003303c002303a00140e044b30010018a508acc004cdc79bae30393758607200206714a3133002002303a00140d081ba294103244cc0d8008cc0100100062660080080028190c0d4004c0d8005033181918179baa3025302f375400664b30013026302d375400313031302e37540031640b0606060626062605a6ea8c0c0c0c4c0b4dd5000912cc004c0a0c0b8dd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1100066eb8c11004a6eb8c1100466eb8c1100426eb8c11003e6eb8c11003a6eb8c1100366eb8c1100326eb8c11002e6eb4c1100266eb4c1100226eb0c11001e64b300130420018acc004cdc4a40086082003168981e1820800a0808b20863754608800d375a608800b375a6088009375a6088007375c6088004911111111111111112cc004c15804a26606c60aa03626609200c44b300100281344c8c008c16400cdd7182b80120aa8b20a618220009821800982100098208009820000981f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a00098179baa0028b205a302f0038b205a1815000981480098121baa012899912cc004c0a80062646600a002264b300130213027375400313259800981118141baa0018acc004016264646600200201844b30010018a508acc004cdc79bae302f0010038a518998010011818000a05440b46eb8c0b0c0a4dd5000c528204e8b204e301e30283754605660506ea80062c8130c0a8c09cdd5000992cc004c07cc098dd5000c4c0a8c09cdd5000c5902518149815181518131baa3029302a30263754605200316409c6644b3001001801456600260540031325980098079bae302a001899b87375a605460560029000c528204a302a37586052003002409c813852819198008009919800800804112cc004006297ae0899199119198008009bab302b0042259800800c400e2646605e6e9ccc0bcdd4802998179816000998179816800a5eb80cc00c00cc0c4008c0bc00502d1bae302700133003003302c002302a00140a044b30010018a5eb8226644b30013371e6eb8c0ac0080562660546e9c008cc0100100062660080080028130dd618148009815000a04e3232330010010062259800800c52f5c11332259800acc004cdd7981618149baa302c302d3029375400400b1323300100132330010013756605c605e60566ea8c0b8c0bcc0acdd5002112cc004006297ae0899199119198008009bab30300042259800800c400e264660686e9ccc0d0dd48029981a18188009981a1819000a5eb80cc00c00cc0d8008c0d00050321bae302c001330030033031002302f00140b444b30010018a508acc004cdc79bae302e3758605c00203114a3133002002302f00140a48162294102744cc0ac008cc0100100062660080080028138c0a8004c0ac0050281807008a044408830213021002301f002223259800980b800c4c8c8c966002604a00513300730240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c566002602c003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001180e802912cc004c050c068dd500144c8c8c8cc8966002604800713300b302300413300b0020068b20423021001375c60420066042002604000260366ea800a2c80c86eb8c058c04cdd50024590112022180918098021149a26cac80101", + "hash": "c808d98d4b07bb9d7a170c8afe6c8075ac11f4b5f3710344ab96df19" }, { "title": "l2_deposit_intent/spend_and_mint.l2_deposit_intent.spend", @@ -159,8 +159,8 @@ } } ], - "compiledCode": "590f070101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae00248888888896600330013005375401523009300a0019ba5480026e1d20009b8748009222223232980098059baa001911919800800801912cc004006298103d87a80008992cc004c010006260146602600297ae0899801801980a801201e30130014045300f007980780124444b30013007004899199119912cc004c034c050dd500144c966002601a602a6ea80062646644b3001002800c566002603a0051337106eb4c070c074c074dd6180e00124001001406880d0c8cc004004c8cc004004dd5980e180e980e980e980e803912cc004006297ae08991991199119801001000912cc004006200713233022374e660446ea4014cc088c07c004cc088c0800052f5c066006006604800460440028100dd5980e8019bae301a00133003003301f002301d001406c44b30010018a5eb8226644b30013371e6eb8c07800801626603a6e9c008cc01001000626600800800280c8dd6180e000980e800a03414a06eb8c064c058dd5000c59014180c180a9baa301830153754601e602a6ea8c060c054dd5001459013198031bac301600123375e602e60286ea800400cc058c05c00cc050004c044dd500198081baa0058acc004c020012266446644b3001300c0018acc004c050dd5002c00a2c80aa2b3001300b0018acc004c050dd5002c00a2c80aa2b300130030018acc004c050dd5002c00a2c80aa2c8091012202419800980b18091baa00491192cc004c03400626464b3001301b0028024590181bae3019001301537540071598009806000c4c8c96600260360050048b2030375c6032002602a6ea800e2c809901318099baa0029b8f4890098089baa003911919800800801911980180098010012444453001301b0059bac301a005912cc004c044c060dd500144c8c8c8cc8966002604400713300b302100413300b0020068b203e301f001375c603e006603e002603c00260326ea800a2c80ba44b3001301130183754005132323259800981000144cc024c07c00c4c966002602a003132598009811000c4c8c9660026030003132598009812800c4cc038c0900040262c8110c080dd50014566002602e003132323298009bad30260019bad30260039bad3026002488966002605400900e8b204e1813000981280098101baa0028b203c4078603c6ea8004c0840062c80f8c074dd500145660026028003159800980e9baa002802c5901e45901b2036301b3754003164074603c002603c00260326ea800a2c80b9222233223298009bac30210019bac302100791192cc004c064c080dd5000c4c966002603460426ea800626464646464646464646464653001375c6062003375c6062019375c6062017375c6062013375c606201130310079bae30310069818802cdd718188024dd71818801cdd71818801244444444444b3001303d00c89980e981e00a89980f80309980f802080c45903a0c0c4004c0c0004c0bc004c0b8004c0b4004c0b0004c0ac004c0a8004c0a4004c0a0004c09c004c088dd5000c5902019192cc004c06c0062d159800980d000c5a2604c60466ea80090212042302137540026048604a604a60426ea8c06cc084dd5181218109baa0018b203e33013002230183259800980c98109baa0018a40011375a604a60446ea8005020192cc004c064c084dd5000c5300103d87a8000899198008009bab30263023375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0480062603e66050604c00497ae08a60103d87a80004091133004004302a00340906eb8c090004c09c005025204032330010013756603860446ea8c070c088dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062603c6604e604a00497ae08a60103d87a8000408d1330040043029003408c6eb8c08c004c0980050244dd59810801a4444b3001301a00d8992cc004c09c00626644b3001301d3024375400313232323259800981680144cc88cc03c0044cc05400c8966002005159800981298161baa0038992cc004c098c0b4dd5000c56600266e3c0140ae2b30019800acc00401a2946294102f528528a0588acc00402e264646600200202444b30010018a508acc004cdc79bae30340010038a51899801001181a800a05e40c86eb8c0c4c0b8dd5000c52820588a5040b114a081622c8160c09cc0b4dd5181818169baa0038b2056899191980c9bab302f002225980080144c014c0d401a26466446008607000a6eb8c0c4004dd69819000981a0012064375c605a00260600048170dd718160021816001c5902a1bab302b001302b001302a0013025375400316408c6644b3001001801456600260520031325980098091bae30290018980e9bad3029302a0018a50409060526eb0c0a000600481310260a50323300100132330010010042259800800c52f5c1132332232330010013756605400844b30010018801c4c8cc0b8dd3998171ba90053302e302b0013302e302c0014bd701980180198180011817000a058375c604c00266006006605600460520028138896600200314bd7044cc896600266e3cdd7181500100bc4cc0a4dd380119802002000c4cc0100100050251bac30280013029001409864b30013013302337540031302730243754003164088604c604e604e60466ea8c0980062c8120c8c8cc004004014896600200314bd7044cc8966002b30013375e6054604e6ea80080162646600200264660020026eacc0b0c0b4c0a4dd5002112cc004006297ae0899199119198008009bab302e0042259800800c400e264660646e9ccc0c8dd4802998191817800998191818000a5eb80cc00c00cc0d0008c0c80050301bae302a00133003003302f002302d00140ac44b30010018a508acc004cdc79bae302c3758605800203314a3133002002302d001409c8152294102544cc0a4008cc0100100062660080080028128c0a0004c0a4005026180d9981219ba548008cc090dd480925eb80cc091300103d87a80004bd704566002603201b13259800980d98111baa001899914c00488c9660026040003132598009816800c4cc04cdd61816000912cc00400a00b133007302e00213001302f00240b11640a860506ea800e2b3001301f00189919912cc004c0bc00626602a6eb0c0b800489660020050078998049818001098009818801205c8b2058375c6058002605a00260506ea800e2b3001301700189919192cc004c0bc00a26602a6eb0c0b800c89660020050078998049818001098009818801205c8b2058375c605a002605a00260506ea800e2c8131026204c3026375400515980099912cc0040060051598009815800c4c96600260286eb8c0ac006266e1cdd698159816000a400314a08130c0acdd61815000c009028205014a06466002002646600200200c44b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc004006297ae0899912cc004cdc79bae302c0020198998159ba700233004004001899802002000a04e37586054002605600281422b3001301c3024375400514a314a0811a29410234c090dd50012444b300130200018992cc004c0b400626601a60580020071640a860506ea80162b3001301f0018991919194c004c0bc0066eb8c0bc0126eacc0bc00922259800981980244cc064dd61819003112cc00400a26603600644b3001002899807003806c4c8c8ca60026eb8c0e40066eb8c0d400e6eb8c0e400922259800981e80244c01cc0f40222c81d060720026eb0c0d0004c0d800903444c8c008c0d800cdd7181a00120648b206018178009817000981680098141baa0058acc004c05c00626464646465300130300019bae30300059bab3030003981800124444b3001303500589980d9bac3034008225980080144cc0740108966002005133010005132598009817000c4c9660026076003133012303a0010118b2070303637540131598009816800c566002606c6ea80260211640dd1640d081a0c0d0dd500444c8c8ca60026eb8c0ec0066eb8c0dc00e6eb8c0ec00922259800981f80244c01cc0fc0222c81e060760026eb0c0d8004c0e000903644c8c008c0e000cdd7181b00120688b2064181800098178009817000981680098141baa0058b204c40988130604c60466ea800488c966002603c003132323322598009817001c01a2c8158dd718158009bad302b002302b00130263754007159800980e800c4c8cc8966002605a00313259800981118149baa00189919194c004dd71818000cdd69818001cdd718180012444b300130340048064590310c0c0004c0bc004c0a8dd5000c590281816000c5902a1bad302a001302b00130263754007159800980a800c4c8c8ca60026eb8c0b00066eb4c0b000e6eb8c0b000922259800981800240222c816860580026056002604c6ea800e2c81210242048302437540051640846464660020026eacc09cc0a001c896600200314c0103d87a80008992cc004cdd78021812800c4c07ccc0a0c0980052f5c1133003003302a002409060500028130cdd2a40086604866e952002330243025302630263026302630263026302630263026302237546600401403c97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302b302c3028375400844b30010018a5eb82264664464660020026eacc0b401089660020031003899198189ba733031375200a66062605c00266062605e00297ae0330030033033002303100140bc6eb8c0a4004cc00c00cc0b8008c0b000502a112cc00400629422b30013371e6eb8c0acdd6181580080c4528c4cc008008c0b0005026205289981400119802002000c4cc01001000502418138009814000a04a8a518a50408d13232330010010062259800800c528456600266e3cdd71814000801c528c4cc008008c0a4005023204c375c604a60446ea8cc00802807a2941020204040803021302130213021002301f301f004223259800980b000c4c8c8c966002604a00513300830240030058b2044375c60460026046002603c6ea800e2b3001301500189919192cc004c09400a266010604800600b1640886eb8c08c004c08c004c078dd5001c566002601a003132323259800981280144cc020c09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001060226ea800cdd7180998081baa005370e900245900e201c180718078009807002a29344d95900301", - "hash": "482c2129ed7e89a3d10e5db170761e799b36fde5a1acd2d8b69ae9ac" + "compiledCode": "590e5e0101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae002488888888966003300130053754015370e90014dd2a400123009300a0019b87480012222298009807002cc03401644464b30013008300d375400314800226eb4c044c038dd5000a0183259800980418069baa0018a6103d87a8000899198008009bab3012300f375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062601666028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c005011201832330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466026602200497ae08a60103d87a8000403d1330040043015003403c6eb8c03c004c048005010488c8cc00400400c896600200314c0103d87a80008992cc004c010006260106602200297ae08998018019809801201a3011001403c91111919912cc004c02c00a26466446644b3001300d30153754005132598009808980b1baa001899b8898009bab301a301b301b301b301b0049bae301a30173754003488100402c9000459015180c980b1baa301930163754601c602c6ea8c064c058dd5001459014198039bac301700123375e6030602a6ea800400cc05cc06000cc054004c048dd500398089baa0038acc004c02000a266446644b3001300c0018acc004c054dd5002c00a2c80b22b3001300f0018acc004c054dd5002c00a2c80b22b300130030018acc004c054dd5002c00a2c80b22c8099013202619800980b98099baa00891192cc004c03400626464b3001301c0028024590191bae301a001301637540071598009808000c4c8c96600260380050048b2032375c6034002602c6ea800e2c80a1014180a1baa00298091baa00391191980080080191198018009801001244453001301b0049bac301a004912cc004c040c060dd500144c8c8c8cc8966002604400713300a302100413300a0020068b203e301f001375c603e006603e002603c00260326ea800a2c80ba44b3001301030183754005132323259800981000144cc020c07c00c4c9660026028003132598009811000c4c8c966002602e003132598009812800c4cc034c0900040262c8110c080dd500145660026034003132323298009bad30260019bad30260039bad3026002488966002605400900e8b204e1813000981280098101baa0028b203c4078603c6ea8004c0840062c80f8c074dd50014566002602e003159800980e9baa002802c5901e45901b2036301b3754003164074603c002603c00260326ea800a2c80b9222233223298009bac30210019bac302100791192cc004c060c080dd5000c4c966002603260426ea800626464646464646464646464653001375c6062003375c6062019375c6062017375c6062013375c606201130310079bae30310069818802cdd718188024dd71818801cdd71818801244444444444b3001303d00c89980e981e00a89980f80309980f802080c45903a0c0c4004c0c0004c0bc004c0b8004c0b4004c0b0004c0ac004c0a8004c0a4004c0a0004c09c004c088dd5000c5902019192cc004c0680062d159800980e800c5a2604c60466ea80090212042302137540026048604a604a60426ea8c064c084dd5181218109baa0018b203e330130022301b98009bab301930213754603260426ea80060054890040553756604200691112cc004c064036264b30013027001899912cc004c070c090dd5000c4c8c8c8c966002605a005133223300f00113301500322598008014566002604860586ea800e264b30013025302d375400315980099b8f00502b8acc0066002b30010068a518a5040bd4a14a281622b300100b8991919800800809112cc00400629422b30013371e6eb8c0d000400e2946266004004606a00281790321bae3031302e375400314a08162294102c452820588b20583025302d37546060605a6ea800e2c815a26464660326eacc0bc008896600200513005303500689919911802181c0029bae3031001375a606400260680048190dd718168009818001205c375c605800860580071640a86eacc0ac004c0ac004c0a8004c094dd5000c5902319912cc0040060051598009814800c4c96600266e3cdd71814800a4500898101bad3029302a0018a50409060526eb0c0a000600481310260a50323300100132330010010042259800800c52f5c1132332232330010013756605400844b30010018801c4c8cc0b8dd3998171ba90053302e302b0013302e302c0014bd701980180198180011817000a058375c604c00266006006605600460520028138896600200314bd7044cc896600266e3cdd7181500100b44cc0a4dd380119802002000c4cc0100100050251bac30280013029001409864b30013012302337540031302730243754003164088604c604e604e60466ea8c0980062c8120c8c8cc004004014896600200314bd7044cc8966002b30013375e6054604e6ea80080162646600200264660020026eacc0b0c0b4c0a4dd5002112cc004006297ae0899199119198008009bab302e0042259800800c400e264660646e9ccc0c8dd4802998191817800998191818000a5eb80cc00c00cc0d0008c0c80050301bae302a00133003003302f002302d00140ac44b30010018a508acc004cdc79bae302c3758605800203114a3133002002302d001409c8152294102544cc0a4008cc0100100062660080080028128c0a0004c0a4005026180d9981219ba548008cc090dd4808a5eb80cc091300103d87a80004bd704566002603801b13259800980d18111baa001899914c00488c966002603e003132598009816800c4cc04cdd61816000912cc00400a00b133007302e00213001302f00240b11640a860506ea800e2b3001302200189919912cc004c0bc00626602a6eb0c0b800489660020050078998049818001098009818801205c8b2058375c6058002605a00260506ea800e2b3001301600189919192cc004c0bc00a26602a6eb0c0b800c89660020050078998049818001098009818801205c8b2058375c605a002605a00260506ea800e2c8131026204c3026375400515980099912cc0040060051598009815800c4c96600266e3cdd71815800a4500899b87375a605660580029000c528204c302b3758605400300240a0814052819198008009919800800803112cc004006297ae0899199119198008009bab302c0042259800800c400e264660606e9ccc0c0dd4802998181816800998181817000a5eb80cc00c00cc0c8008c0c000502e1bae302800133003003302d002302b00140a444b30010018a5eb8226644b30013371e6eb8c0b00080622660566e9c008cc0100100062660080080028138dd618150009815800a0508acc004c07cc090dd50014528c52820468a50408d302437540049112cc004c07c006264b3001302d0018998069816000801c5902a18141baa0058acc004c0880062646464653001302f0019bae302f0049bab302f00248896600260660091330193758606400c44b300100289980d801912cc00400a26601c00e01b132323298009bae30390019bae30350039bae3039002488966002607a00913007303d0088b2074181c8009bac3034001303600240d113230023036003375c606800481922c8180605e002605c002605a00260506ea80162b30013016001899191919194c004c0c00066eb8c0c00166eacc0c000e606000491112cc004c0d40162660366eb0c0d0020896600200513301d004225980080144cc0400144c966002605a00313259800981d800c4cc048c0e80040462c81c0c0d8dd5004c5660026060003159800981b1baa009808459037459034206830343754011132323298009bae303b0019bae30370039bae303b002488966002607e00913007303f0088b2078181d8009bac3036001303800240d913230023038003375c606c00481a22c81906060002605e002605c002605a00260506ea80162c8131026204c181318119baa001223259800980e800c4c8c8cc8966002605c0070068b2056375c60560026eb4c0ac008c0ac004c098dd5001c56600260400031323322598009816800c4c966002604260526ea800626464653001375c6060003375a6060007375c60600049112cc004c0d00120191640c43030001302f001302a37540031640a060580031640a86eb4c0a8004c0ac004c098dd5001c5660026028003132323298009bae302c0019bad302c0039bae302c00248896600260600090088b205a1816000981580098131baa0038b204840908120c090dd50014590211919198008009bab302730280072259800800c5300103d87a80008992cc004cdd78021812800c4c07ccc0a0c0980052f5c1133003003302a002409060500028130cdd2a40086604866e952002330243025302630263026302630263026302630263026302237546600401403c97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302b302c3028375400844b30010018a5eb82264664464660020026eacc0b401089660020031003899198189ba733031375200a66062605c00266062605e00297ae0330030033033002303100140bc6eb8c0a4004cc00c00cc0b8008c0b000502a112cc00400629422b30013371e6eb8c0acdd6181580080bc528c4cc008008c0b0005026205289981400119802002000c4cc01001000502418138009814000a04a8a518a50408d13232330010010062259800800c528456600266e3cdd71814000801c528c4cc008008c0a4005023204c375c604a60446ea8cc00802807a2941020204040803021302130213021002301f301f004223259800980a800c4c8c8c966002604a00513300830240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a266010604800600b1640886eb8c08c004c08c004c078dd5001c5660026018003132323259800981280144cc020c09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001060246ea800cdd7180a18089baa003370e900245900f201e300e3754002602400a60226024008452689b2b20061", + "hash": "b06415cbe679ef3abe2ec1d979e26ae38de8291d8febc09a99806954" }, { "title": "l2_deposit_intent/spend_and_mint.l2_deposit_intent.mint", @@ -184,8 +184,8 @@ } } ], - "compiledCode": "590f070101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae00248888888896600330013005375401523009300a0019ba5480026e1d20009b8748009222223232980098059baa001911919800800801912cc004006298103d87a80008992cc004c010006260146602600297ae0899801801980a801201e30130014045300f007980780124444b30013007004899199119912cc004c034c050dd500144c966002601a602a6ea80062646644b3001002800c566002603a0051337106eb4c070c074c074dd6180e00124001001406880d0c8cc004004c8cc004004dd5980e180e980e980e980e803912cc004006297ae08991991199119801001000912cc004006200713233022374e660446ea4014cc088c07c004cc088c0800052f5c066006006604800460440028100dd5980e8019bae301a00133003003301f002301d001406c44b30010018a5eb8226644b30013371e6eb8c07800801626603a6e9c008cc01001000626600800800280c8dd6180e000980e800a03414a06eb8c064c058dd5000c59014180c180a9baa301830153754601e602a6ea8c060c054dd5001459013198031bac301600123375e602e60286ea800400cc058c05c00cc050004c044dd500198081baa0058acc004c020012266446644b3001300c0018acc004c050dd5002c00a2c80aa2b3001300b0018acc004c050dd5002c00a2c80aa2b300130030018acc004c050dd5002c00a2c80aa2c8091012202419800980b18091baa00491192cc004c03400626464b3001301b0028024590181bae3019001301537540071598009806000c4c8c96600260360050048b2030375c6032002602a6ea800e2c809901318099baa0029b8f4890098089baa003911919800800801911980180098010012444453001301b0059bac301a005912cc004c044c060dd500144c8c8c8cc8966002604400713300b302100413300b0020068b203e301f001375c603e006603e002603c00260326ea800a2c80ba44b3001301130183754005132323259800981000144cc024c07c00c4c966002602a003132598009811000c4c8c9660026030003132598009812800c4cc038c0900040262c8110c080dd50014566002602e003132323298009bad30260019bad30260039bad3026002488966002605400900e8b204e1813000981280098101baa0028b203c4078603c6ea8004c0840062c80f8c074dd500145660026028003159800980e9baa002802c5901e45901b2036301b3754003164074603c002603c00260326ea800a2c80b9222233223298009bac30210019bac302100791192cc004c064c080dd5000c4c966002603460426ea800626464646464646464646464653001375c6062003375c6062019375c6062017375c6062013375c606201130310079bae30310069818802cdd718188024dd71818801cdd71818801244444444444b3001303d00c89980e981e00a89980f80309980f802080c45903a0c0c4004c0c0004c0bc004c0b8004c0b4004c0b0004c0ac004c0a8004c0a4004c0a0004c09c004c088dd5000c5902019192cc004c06c0062d159800980d000c5a2604c60466ea80090212042302137540026048604a604a60426ea8c06cc084dd5181218109baa0018b203e33013002230183259800980c98109baa0018a40011375a604a60446ea8005020192cc004c064c084dd5000c5300103d87a8000899198008009bab30263023375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0480062603e66050604c00497ae08a60103d87a80004091133004004302a00340906eb8c090004c09c005025204032330010013756603860446ea8c070c088dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062603c6604e604a00497ae08a60103d87a8000408d1330040043029003408c6eb8c08c004c0980050244dd59810801a4444b3001301a00d8992cc004c09c00626644b3001301d3024375400313232323259800981680144cc88cc03c0044cc05400c8966002005159800981298161baa0038992cc004c098c0b4dd5000c56600266e3c0140ae2b30019800acc00401a2946294102f528528a0588acc00402e264646600200202444b30010018a508acc004cdc79bae30340010038a51899801001181a800a05e40c86eb8c0c4c0b8dd5000c52820588a5040b114a081622c8160c09cc0b4dd5181818169baa0038b2056899191980c9bab302f002225980080144c014c0d401a26466446008607000a6eb8c0c4004dd69819000981a0012064375c605a00260600048170dd718160021816001c5902a1bab302b001302b001302a0013025375400316408c6644b3001001801456600260520031325980098091bae30290018980e9bad3029302a0018a50409060526eb0c0a000600481310260a50323300100132330010010042259800800c52f5c1132332232330010013756605400844b30010018801c4c8cc0b8dd3998171ba90053302e302b0013302e302c0014bd701980180198180011817000a058375c604c00266006006605600460520028138896600200314bd7044cc896600266e3cdd7181500100bc4cc0a4dd380119802002000c4cc0100100050251bac30280013029001409864b30013013302337540031302730243754003164088604c604e604e60466ea8c0980062c8120c8c8cc004004014896600200314bd7044cc8966002b30013375e6054604e6ea80080162646600200264660020026eacc0b0c0b4c0a4dd5002112cc004006297ae0899199119198008009bab302e0042259800800c400e264660646e9ccc0c8dd4802998191817800998191818000a5eb80cc00c00cc0d0008c0c80050301bae302a00133003003302f002302d00140ac44b30010018a508acc004cdc79bae302c3758605800203314a3133002002302d001409c8152294102544cc0a4008cc0100100062660080080028128c0a0004c0a4005026180d9981219ba548008cc090dd480925eb80cc091300103d87a80004bd704566002603201b13259800980d98111baa001899914c00488c9660026040003132598009816800c4cc04cdd61816000912cc00400a00b133007302e00213001302f00240b11640a860506ea800e2b3001301f00189919912cc004c0bc00626602a6eb0c0b800489660020050078998049818001098009818801205c8b2058375c6058002605a00260506ea800e2b3001301700189919192cc004c0bc00a26602a6eb0c0b800c89660020050078998049818001098009818801205c8b2058375c605a002605a00260506ea800e2c8131026204c3026375400515980099912cc0040060051598009815800c4c96600260286eb8c0ac006266e1cdd698159816000a400314a08130c0acdd61815000c009028205014a06466002002646600200200c44b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc004006297ae0899912cc004cdc79bae302c0020198998159ba700233004004001899802002000a04e37586054002605600281422b3001301c3024375400514a314a0811a29410234c090dd50012444b300130200018992cc004c0b400626601a60580020071640a860506ea80162b3001301f0018991919194c004c0bc0066eb8c0bc0126eacc0bc00922259800981980244cc064dd61819003112cc00400a26603600644b3001002899807003806c4c8c8ca60026eb8c0e40066eb8c0d400e6eb8c0e400922259800981e80244c01cc0f40222c81d060720026eb0c0d0004c0d800903444c8c008c0d800cdd7181a00120648b206018178009817000981680098141baa0058acc004c05c00626464646465300130300019bae30300059bab3030003981800124444b3001303500589980d9bac3034008225980080144cc0740108966002005133010005132598009817000c4c9660026076003133012303a0010118b2070303637540131598009816800c566002606c6ea80260211640dd1640d081a0c0d0dd500444c8c8ca60026eb8c0ec0066eb8c0dc00e6eb8c0ec00922259800981f80244c01cc0fc0222c81e060760026eb0c0d8004c0e000903644c8c008c0e000cdd7181b00120688b2064181800098178009817000981680098141baa0058b204c40988130604c60466ea800488c966002603c003132323322598009817001c01a2c8158dd718158009bad302b002302b00130263754007159800980e800c4c8cc8966002605a00313259800981118149baa00189919194c004dd71818000cdd69818001cdd718180012444b300130340048064590310c0c0004c0bc004c0a8dd5000c590281816000c5902a1bad302a001302b00130263754007159800980a800c4c8c8ca60026eb8c0b00066eb4c0b000e6eb8c0b000922259800981800240222c816860580026056002604c6ea800e2c81210242048302437540051640846464660020026eacc09cc0a001c896600200314c0103d87a80008992cc004cdd78021812800c4c07ccc0a0c0980052f5c1133003003302a002409060500028130cdd2a40086604866e952002330243025302630263026302630263026302630263026302237546600401403c97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302b302c3028375400844b30010018a5eb82264664464660020026eacc0b401089660020031003899198189ba733031375200a66062605c00266062605e00297ae0330030033033002303100140bc6eb8c0a4004cc00c00cc0b8008c0b000502a112cc00400629422b30013371e6eb8c0acdd6181580080c4528c4cc008008c0b0005026205289981400119802002000c4cc01001000502418138009814000a04a8a518a50408d13232330010010062259800800c528456600266e3cdd71814000801c528c4cc008008c0a4005023204c375c604a60446ea8cc00802807a2941020204040803021302130213021002301f301f004223259800980b000c4c8c8c966002604a00513300830240030058b2044375c60460026046002603c6ea800e2b3001301500189919192cc004c09400a266010604800600b1640886eb8c08c004c08c004c078dd5001c566002601a003132323259800981280144cc020c09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001060226ea800cdd7180998081baa005370e900245900e201c180718078009807002a29344d95900301", - "hash": "482c2129ed7e89a3d10e5db170761e799b36fde5a1acd2d8b69ae9ac" + "compiledCode": "590e5e0101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae002488888888966003300130053754015370e90014dd2a400123009300a0019b87480012222298009807002cc03401644464b30013008300d375400314800226eb4c044c038dd5000a0183259800980418069baa0018a6103d87a8000899198008009bab3012300f375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062601666028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c005011201832330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466026602200497ae08a60103d87a8000403d1330040043015003403c6eb8c03c004c048005010488c8cc00400400c896600200314c0103d87a80008992cc004c010006260106602200297ae08998018019809801201a3011001403c91111919912cc004c02c00a26466446644b3001300d30153754005132598009808980b1baa001899b8898009bab301a301b301b301b301b0049bae301a30173754003488100402c9000459015180c980b1baa301930163754601c602c6ea8c064c058dd5001459014198039bac301700123375e6030602a6ea800400cc05cc06000cc054004c048dd500398089baa0038acc004c02000a266446644b3001300c0018acc004c054dd5002c00a2c80b22b3001300f0018acc004c054dd5002c00a2c80b22b300130030018acc004c054dd5002c00a2c80b22c8099013202619800980b98099baa00891192cc004c03400626464b3001301c0028024590191bae301a001301637540071598009808000c4c8c96600260380050048b2032375c6034002602c6ea800e2c80a1014180a1baa00298091baa00391191980080080191198018009801001244453001301b0049bac301a004912cc004c040c060dd500144c8c8c8cc8966002604400713300a302100413300a0020068b203e301f001375c603e006603e002603c00260326ea800a2c80ba44b3001301030183754005132323259800981000144cc020c07c00c4c9660026028003132598009811000c4c8c966002602e003132598009812800c4cc034c0900040262c8110c080dd500145660026034003132323298009bad30260019bad30260039bad3026002488966002605400900e8b204e1813000981280098101baa0028b203c4078603c6ea8004c0840062c80f8c074dd50014566002602e003159800980e9baa002802c5901e45901b2036301b3754003164074603c002603c00260326ea800a2c80b9222233223298009bac30210019bac302100791192cc004c060c080dd5000c4c966002603260426ea800626464646464646464646464653001375c6062003375c6062019375c6062017375c6062013375c606201130310079bae30310069818802cdd718188024dd71818801cdd71818801244444444444b3001303d00c89980e981e00a89980f80309980f802080c45903a0c0c4004c0c0004c0bc004c0b8004c0b4004c0b0004c0ac004c0a8004c0a4004c0a0004c09c004c088dd5000c5902019192cc004c0680062d159800980e800c5a2604c60466ea80090212042302137540026048604a604a60426ea8c064c084dd5181218109baa0018b203e330130022301b98009bab301930213754603260426ea80060054890040553756604200691112cc004c064036264b30013027001899912cc004c070c090dd5000c4c8c8c8c966002605a005133223300f00113301500322598008014566002604860586ea800e264b30013025302d375400315980099b8f00502b8acc0066002b30010068a518a5040bd4a14a281622b300100b8991919800800809112cc00400629422b30013371e6eb8c0d000400e2946266004004606a00281790321bae3031302e375400314a08162294102c452820588b20583025302d37546060605a6ea800e2c815a26464660326eacc0bc008896600200513005303500689919911802181c0029bae3031001375a606400260680048190dd718168009818001205c375c605800860580071640a86eacc0ac004c0ac004c0a8004c094dd5000c5902319912cc0040060051598009814800c4c96600266e3cdd71814800a4500898101bad3029302a0018a50409060526eb0c0a000600481310260a50323300100132330010010042259800800c52f5c1132332232330010013756605400844b30010018801c4c8cc0b8dd3998171ba90053302e302b0013302e302c0014bd701980180198180011817000a058375c604c00266006006605600460520028138896600200314bd7044cc896600266e3cdd7181500100b44cc0a4dd380119802002000c4cc0100100050251bac30280013029001409864b30013012302337540031302730243754003164088604c604e604e60466ea8c0980062c8120c8c8cc004004014896600200314bd7044cc8966002b30013375e6054604e6ea80080162646600200264660020026eacc0b0c0b4c0a4dd5002112cc004006297ae0899199119198008009bab302e0042259800800c400e264660646e9ccc0c8dd4802998191817800998191818000a5eb80cc00c00cc0d0008c0c80050301bae302a00133003003302f002302d00140ac44b30010018a508acc004cdc79bae302c3758605800203114a3133002002302d001409c8152294102544cc0a4008cc0100100062660080080028128c0a0004c0a4005026180d9981219ba548008cc090dd4808a5eb80cc091300103d87a80004bd704566002603801b13259800980d18111baa001899914c00488c966002603e003132598009816800c4cc04cdd61816000912cc00400a00b133007302e00213001302f00240b11640a860506ea800e2b3001302200189919912cc004c0bc00626602a6eb0c0b800489660020050078998049818001098009818801205c8b2058375c6058002605a00260506ea800e2b3001301600189919192cc004c0bc00a26602a6eb0c0b800c89660020050078998049818001098009818801205c8b2058375c605a002605a00260506ea800e2c8131026204c3026375400515980099912cc0040060051598009815800c4c96600266e3cdd71815800a4500899b87375a605660580029000c528204c302b3758605400300240a0814052819198008009919800800803112cc004006297ae0899199119198008009bab302c0042259800800c400e264660606e9ccc0c0dd4802998181816800998181817000a5eb80cc00c00cc0c8008c0c000502e1bae302800133003003302d002302b00140a444b30010018a5eb8226644b30013371e6eb8c0b00080622660566e9c008cc0100100062660080080028138dd618150009815800a0508acc004c07cc090dd50014528c52820468a50408d302437540049112cc004c07c006264b3001302d0018998069816000801c5902a18141baa0058acc004c0880062646464653001302f0019bae302f0049bab302f00248896600260660091330193758606400c44b300100289980d801912cc00400a26601c00e01b132323298009bae30390019bae30350039bae3039002488966002607a00913007303d0088b2074181c8009bac3034001303600240d113230023036003375c606800481922c8180605e002605c002605a00260506ea80162b30013016001899191919194c004c0c00066eb8c0c00166eacc0c000e606000491112cc004c0d40162660366eb0c0d0020896600200513301d004225980080144cc0400144c966002605a00313259800981d800c4cc048c0e80040462c81c0c0d8dd5004c5660026060003159800981b1baa009808459037459034206830343754011132323298009bae303b0019bae30370039bae303b002488966002607e00913007303f0088b2078181d8009bac3036001303800240d913230023038003375c606c00481a22c81906060002605e002605c002605a00260506ea80162c8131026204c181318119baa001223259800980e800c4c8c8cc8966002605c0070068b2056375c60560026eb4c0ac008c0ac004c098dd5001c56600260400031323322598009816800c4c966002604260526ea800626464653001375c6060003375a6060007375c60600049112cc004c0d00120191640c43030001302f001302a37540031640a060580031640a86eb4c0a8004c0ac004c098dd5001c5660026028003132323298009bae302c0019bad302c0039bae302c00248896600260600090088b205a1816000981580098131baa0038b204840908120c090dd50014590211919198008009bab302730280072259800800c5300103d87a80008992cc004cdd78021812800c4c07ccc0a0c0980052f5c1133003003302a002409060500028130cdd2a40086604866e952002330243025302630263026302630263026302630263026302237546600401403c97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302b302c3028375400844b30010018a5eb82264664464660020026eacc0b401089660020031003899198189ba733031375200a66062605c00266062605e00297ae0330030033033002303100140bc6eb8c0a4004cc00c00cc0b8008c0b000502a112cc00400629422b30013371e6eb8c0acdd6181580080bc528c4cc008008c0b0005026205289981400119802002000c4cc01001000502418138009814000a04a8a518a50408d13232330010010062259800800c528456600266e3cdd71814000801c528c4cc008008c0a4005023204c375c604a60446ea8cc00802807a2941020204040803021302130213021002301f301f004223259800980a800c4c8c8c966002604a00513300830240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a266010604800600b1640886eb8c08c004c08c004c078dd5001c5660026018003132323259800981280144cc020c09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001060246ea800cdd7180a18089baa003370e900245900f201e300e3754002602400a60226024008452689b2b20061", + "hash": "b06415cbe679ef3abe2ec1d979e26ae38de8291d8febc09a99806954" }, { "title": "l2_deposit_intent/spend_and_mint.l2_deposit_intent.else", @@ -206,8 +206,8 @@ } } ], - "compiledCode": "590f070101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae00248888888896600330013005375401523009300a0019ba5480026e1d20009b8748009222223232980098059baa001911919800800801912cc004006298103d87a80008992cc004c010006260146602600297ae0899801801980a801201e30130014045300f007980780124444b30013007004899199119912cc004c034c050dd500144c966002601a602a6ea80062646644b3001002800c566002603a0051337106eb4c070c074c074dd6180e00124001001406880d0c8cc004004c8cc004004dd5980e180e980e980e980e803912cc004006297ae08991991199119801001000912cc004006200713233022374e660446ea4014cc088c07c004cc088c0800052f5c066006006604800460440028100dd5980e8019bae301a00133003003301f002301d001406c44b30010018a5eb8226644b30013371e6eb8c07800801626603a6e9c008cc01001000626600800800280c8dd6180e000980e800a03414a06eb8c064c058dd5000c59014180c180a9baa301830153754601e602a6ea8c060c054dd5001459013198031bac301600123375e602e60286ea800400cc058c05c00cc050004c044dd500198081baa0058acc004c020012266446644b3001300c0018acc004c050dd5002c00a2c80aa2b3001300b0018acc004c050dd5002c00a2c80aa2b300130030018acc004c050dd5002c00a2c80aa2c8091012202419800980b18091baa00491192cc004c03400626464b3001301b0028024590181bae3019001301537540071598009806000c4c8c96600260360050048b2030375c6032002602a6ea800e2c809901318099baa0029b8f4890098089baa003911919800800801911980180098010012444453001301b0059bac301a005912cc004c044c060dd500144c8c8c8cc8966002604400713300b302100413300b0020068b203e301f001375c603e006603e002603c00260326ea800a2c80ba44b3001301130183754005132323259800981000144cc024c07c00c4c966002602a003132598009811000c4c8c9660026030003132598009812800c4cc038c0900040262c8110c080dd50014566002602e003132323298009bad30260019bad30260039bad3026002488966002605400900e8b204e1813000981280098101baa0028b203c4078603c6ea8004c0840062c80f8c074dd500145660026028003159800980e9baa002802c5901e45901b2036301b3754003164074603c002603c00260326ea800a2c80b9222233223298009bac30210019bac302100791192cc004c064c080dd5000c4c966002603460426ea800626464646464646464646464653001375c6062003375c6062019375c6062017375c6062013375c606201130310079bae30310069818802cdd718188024dd71818801cdd71818801244444444444b3001303d00c89980e981e00a89980f80309980f802080c45903a0c0c4004c0c0004c0bc004c0b8004c0b4004c0b0004c0ac004c0a8004c0a4004c0a0004c09c004c088dd5000c5902019192cc004c06c0062d159800980d000c5a2604c60466ea80090212042302137540026048604a604a60426ea8c06cc084dd5181218109baa0018b203e33013002230183259800980c98109baa0018a40011375a604a60446ea8005020192cc004c064c084dd5000c5300103d87a8000899198008009bab30263023375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0480062603e66050604c00497ae08a60103d87a80004091133004004302a00340906eb8c090004c09c005025204032330010013756603860446ea8c070c088dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062603c6604e604a00497ae08a60103d87a8000408d1330040043029003408c6eb8c08c004c0980050244dd59810801a4444b3001301a00d8992cc004c09c00626644b3001301d3024375400313232323259800981680144cc88cc03c0044cc05400c8966002005159800981298161baa0038992cc004c098c0b4dd5000c56600266e3c0140ae2b30019800acc00401a2946294102f528528a0588acc00402e264646600200202444b30010018a508acc004cdc79bae30340010038a51899801001181a800a05e40c86eb8c0c4c0b8dd5000c52820588a5040b114a081622c8160c09cc0b4dd5181818169baa0038b2056899191980c9bab302f002225980080144c014c0d401a26466446008607000a6eb8c0c4004dd69819000981a0012064375c605a00260600048170dd718160021816001c5902a1bab302b001302b001302a0013025375400316408c6644b3001001801456600260520031325980098091bae30290018980e9bad3029302a0018a50409060526eb0c0a000600481310260a50323300100132330010010042259800800c52f5c1132332232330010013756605400844b30010018801c4c8cc0b8dd3998171ba90053302e302b0013302e302c0014bd701980180198180011817000a058375c604c00266006006605600460520028138896600200314bd7044cc896600266e3cdd7181500100bc4cc0a4dd380119802002000c4cc0100100050251bac30280013029001409864b30013013302337540031302730243754003164088604c604e604e60466ea8c0980062c8120c8c8cc004004014896600200314bd7044cc8966002b30013375e6054604e6ea80080162646600200264660020026eacc0b0c0b4c0a4dd5002112cc004006297ae0899199119198008009bab302e0042259800800c400e264660646e9ccc0c8dd4802998191817800998191818000a5eb80cc00c00cc0d0008c0c80050301bae302a00133003003302f002302d00140ac44b30010018a508acc004cdc79bae302c3758605800203314a3133002002302d001409c8152294102544cc0a4008cc0100100062660080080028128c0a0004c0a4005026180d9981219ba548008cc090dd480925eb80cc091300103d87a80004bd704566002603201b13259800980d98111baa001899914c00488c9660026040003132598009816800c4cc04cdd61816000912cc00400a00b133007302e00213001302f00240b11640a860506ea800e2b3001301f00189919912cc004c0bc00626602a6eb0c0b800489660020050078998049818001098009818801205c8b2058375c6058002605a00260506ea800e2b3001301700189919192cc004c0bc00a26602a6eb0c0b800c89660020050078998049818001098009818801205c8b2058375c605a002605a00260506ea800e2c8131026204c3026375400515980099912cc0040060051598009815800c4c96600260286eb8c0ac006266e1cdd698159816000a400314a08130c0acdd61815000c009028205014a06466002002646600200200c44b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc004006297ae0899912cc004cdc79bae302c0020198998159ba700233004004001899802002000a04e37586054002605600281422b3001301c3024375400514a314a0811a29410234c090dd50012444b300130200018992cc004c0b400626601a60580020071640a860506ea80162b3001301f0018991919194c004c0bc0066eb8c0bc0126eacc0bc00922259800981980244cc064dd61819003112cc00400a26603600644b3001002899807003806c4c8c8ca60026eb8c0e40066eb8c0d400e6eb8c0e400922259800981e80244c01cc0f40222c81d060720026eb0c0d0004c0d800903444c8c008c0d800cdd7181a00120648b206018178009817000981680098141baa0058acc004c05c00626464646465300130300019bae30300059bab3030003981800124444b3001303500589980d9bac3034008225980080144cc0740108966002005133010005132598009817000c4c9660026076003133012303a0010118b2070303637540131598009816800c566002606c6ea80260211640dd1640d081a0c0d0dd500444c8c8ca60026eb8c0ec0066eb8c0dc00e6eb8c0ec00922259800981f80244c01cc0fc0222c81e060760026eb0c0d8004c0e000903644c8c008c0e000cdd7181b00120688b2064181800098178009817000981680098141baa0058b204c40988130604c60466ea800488c966002603c003132323322598009817001c01a2c8158dd718158009bad302b002302b00130263754007159800980e800c4c8cc8966002605a00313259800981118149baa00189919194c004dd71818000cdd69818001cdd718180012444b300130340048064590310c0c0004c0bc004c0a8dd5000c590281816000c5902a1bad302a001302b00130263754007159800980a800c4c8c8ca60026eb8c0b00066eb4c0b000e6eb8c0b000922259800981800240222c816860580026056002604c6ea800e2c81210242048302437540051640846464660020026eacc09cc0a001c896600200314c0103d87a80008992cc004cdd78021812800c4c07ccc0a0c0980052f5c1133003003302a002409060500028130cdd2a40086604866e952002330243025302630263026302630263026302630263026302237546600401403c97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302b302c3028375400844b30010018a5eb82264664464660020026eacc0b401089660020031003899198189ba733031375200a66062605c00266062605e00297ae0330030033033002303100140bc6eb8c0a4004cc00c00cc0b8008c0b000502a112cc00400629422b30013371e6eb8c0acdd6181580080c4528c4cc008008c0b0005026205289981400119802002000c4cc01001000502418138009814000a04a8a518a50408d13232330010010062259800800c528456600266e3cdd71814000801c528c4cc008008c0a4005023204c375c604a60446ea8cc00802807a2941020204040803021302130213021002301f301f004223259800980b000c4c8c8c966002604a00513300830240030058b2044375c60460026046002603c6ea800e2b3001301500189919192cc004c09400a266010604800600b1640886eb8c08c004c08c004c078dd5001c566002601a003132323259800981280144cc020c09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001060226ea800cdd7180998081baa005370e900245900e201c180718078009807002a29344d95900301", - "hash": "482c2129ed7e89a3d10e5db170761e799b36fde5a1acd2d8b69ae9ac" + "compiledCode": "590e5e0101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae002488888888966003300130053754015370e90014dd2a400123009300a0019b87480012222298009807002cc03401644464b30013008300d375400314800226eb4c044c038dd5000a0183259800980418069baa0018a6103d87a8000899198008009bab3012300f375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062601666028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c005011201832330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466026602200497ae08a60103d87a8000403d1330040043015003403c6eb8c03c004c048005010488c8cc00400400c896600200314c0103d87a80008992cc004c010006260106602200297ae08998018019809801201a3011001403c91111919912cc004c02c00a26466446644b3001300d30153754005132598009808980b1baa001899b8898009bab301a301b301b301b301b0049bae301a30173754003488100402c9000459015180c980b1baa301930163754601c602c6ea8c064c058dd5001459014198039bac301700123375e6030602a6ea800400cc05cc06000cc054004c048dd500398089baa0038acc004c02000a266446644b3001300c0018acc004c054dd5002c00a2c80b22b3001300f0018acc004c054dd5002c00a2c80b22b300130030018acc004c054dd5002c00a2c80b22c8099013202619800980b98099baa00891192cc004c03400626464b3001301c0028024590191bae301a001301637540071598009808000c4c8c96600260380050048b2032375c6034002602c6ea800e2c80a1014180a1baa00298091baa00391191980080080191198018009801001244453001301b0049bac301a004912cc004c040c060dd500144c8c8c8cc8966002604400713300a302100413300a0020068b203e301f001375c603e006603e002603c00260326ea800a2c80ba44b3001301030183754005132323259800981000144cc020c07c00c4c9660026028003132598009811000c4c8c966002602e003132598009812800c4cc034c0900040262c8110c080dd500145660026034003132323298009bad30260019bad30260039bad3026002488966002605400900e8b204e1813000981280098101baa0028b203c4078603c6ea8004c0840062c80f8c074dd50014566002602e003159800980e9baa002802c5901e45901b2036301b3754003164074603c002603c00260326ea800a2c80b9222233223298009bac30210019bac302100791192cc004c060c080dd5000c4c966002603260426ea800626464646464646464646464653001375c6062003375c6062019375c6062017375c6062013375c606201130310079bae30310069818802cdd718188024dd71818801cdd71818801244444444444b3001303d00c89980e981e00a89980f80309980f802080c45903a0c0c4004c0c0004c0bc004c0b8004c0b4004c0b0004c0ac004c0a8004c0a4004c0a0004c09c004c088dd5000c5902019192cc004c0680062d159800980e800c5a2604c60466ea80090212042302137540026048604a604a60426ea8c064c084dd5181218109baa0018b203e330130022301b98009bab301930213754603260426ea80060054890040553756604200691112cc004c064036264b30013027001899912cc004c070c090dd5000c4c8c8c8c966002605a005133223300f00113301500322598008014566002604860586ea800e264b30013025302d375400315980099b8f00502b8acc0066002b30010068a518a5040bd4a14a281622b300100b8991919800800809112cc00400629422b30013371e6eb8c0d000400e2946266004004606a00281790321bae3031302e375400314a08162294102c452820588b20583025302d37546060605a6ea800e2c815a26464660326eacc0bc008896600200513005303500689919911802181c0029bae3031001375a606400260680048190dd718168009818001205c375c605800860580071640a86eacc0ac004c0ac004c0a8004c094dd5000c5902319912cc0040060051598009814800c4c96600266e3cdd71814800a4500898101bad3029302a0018a50409060526eb0c0a000600481310260a50323300100132330010010042259800800c52f5c1132332232330010013756605400844b30010018801c4c8cc0b8dd3998171ba90053302e302b0013302e302c0014bd701980180198180011817000a058375c604c00266006006605600460520028138896600200314bd7044cc896600266e3cdd7181500100b44cc0a4dd380119802002000c4cc0100100050251bac30280013029001409864b30013012302337540031302730243754003164088604c604e604e60466ea8c0980062c8120c8c8cc004004014896600200314bd7044cc8966002b30013375e6054604e6ea80080162646600200264660020026eacc0b0c0b4c0a4dd5002112cc004006297ae0899199119198008009bab302e0042259800800c400e264660646e9ccc0c8dd4802998191817800998191818000a5eb80cc00c00cc0d0008c0c80050301bae302a00133003003302f002302d00140ac44b30010018a508acc004cdc79bae302c3758605800203114a3133002002302d001409c8152294102544cc0a4008cc0100100062660080080028128c0a0004c0a4005026180d9981219ba548008cc090dd4808a5eb80cc091300103d87a80004bd704566002603801b13259800980d18111baa001899914c00488c966002603e003132598009816800c4cc04cdd61816000912cc00400a00b133007302e00213001302f00240b11640a860506ea800e2b3001302200189919912cc004c0bc00626602a6eb0c0b800489660020050078998049818001098009818801205c8b2058375c6058002605a00260506ea800e2b3001301600189919192cc004c0bc00a26602a6eb0c0b800c89660020050078998049818001098009818801205c8b2058375c605a002605a00260506ea800e2c8131026204c3026375400515980099912cc0040060051598009815800c4c96600266e3cdd71815800a4500899b87375a605660580029000c528204c302b3758605400300240a0814052819198008009919800800803112cc004006297ae0899199119198008009bab302c0042259800800c400e264660606e9ccc0c0dd4802998181816800998181817000a5eb80cc00c00cc0c8008c0c000502e1bae302800133003003302d002302b00140a444b30010018a5eb8226644b30013371e6eb8c0b00080622660566e9c008cc0100100062660080080028138dd618150009815800a0508acc004c07cc090dd50014528c52820468a50408d302437540049112cc004c07c006264b3001302d0018998069816000801c5902a18141baa0058acc004c0880062646464653001302f0019bae302f0049bab302f00248896600260660091330193758606400c44b300100289980d801912cc00400a26601c00e01b132323298009bae30390019bae30350039bae3039002488966002607a00913007303d0088b2074181c8009bac3034001303600240d113230023036003375c606800481922c8180605e002605c002605a00260506ea80162b30013016001899191919194c004c0c00066eb8c0c00166eacc0c000e606000491112cc004c0d40162660366eb0c0d0020896600200513301d004225980080144cc0400144c966002605a00313259800981d800c4cc048c0e80040462c81c0c0d8dd5004c5660026060003159800981b1baa009808459037459034206830343754011132323298009bae303b0019bae30370039bae303b002488966002607e00913007303f0088b2078181d8009bac3036001303800240d913230023038003375c606c00481a22c81906060002605e002605c002605a00260506ea80162c8131026204c181318119baa001223259800980e800c4c8c8cc8966002605c0070068b2056375c60560026eb4c0ac008c0ac004c098dd5001c56600260400031323322598009816800c4c966002604260526ea800626464653001375c6060003375a6060007375c60600049112cc004c0d00120191640c43030001302f001302a37540031640a060580031640a86eb4c0a8004c0ac004c098dd5001c5660026028003132323298009bae302c0019bad302c0039bae302c00248896600260600090088b205a1816000981580098131baa0038b204840908120c090dd50014590211919198008009bab302730280072259800800c5300103d87a80008992cc004cdd78021812800c4c07ccc0a0c0980052f5c1133003003302a002409060500028130cdd2a40086604866e952002330243025302630263026302630263026302630263026302237546600401403c97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302b302c3028375400844b30010018a5eb82264664464660020026eacc0b401089660020031003899198189ba733031375200a66062605c00266062605e00297ae0330030033033002303100140bc6eb8c0a4004cc00c00cc0b8008c0b000502a112cc00400629422b30013371e6eb8c0acdd6181580080bc528c4cc008008c0b0005026205289981400119802002000c4cc01001000502418138009814000a04a8a518a50408d13232330010010062259800800c528456600266e3cdd71814000801c528c4cc008008c0a4005023204c375c604a60446ea8cc00802807a2941020204040803021302130213021002301f301f004223259800980a800c4c8c8c966002604a00513300830240030058b2044375c60460026046002603c6ea800e2b3001301800189919192cc004c09400a266010604800600b1640886eb8c08c004c08c004c078dd5001c5660026018003132323259800981280144cc020c09000c0162c8110dd718118009811800980f1baa0038b2038407080e0c070dd5001060246ea800cdd7180a18089baa003370e900245900f201e300e3754002602400a60226024008452689b2b20061", + "hash": "b06415cbe679ef3abe2ec1d979e26ae38de8291d8febc09a99806954" }, { "title": "l2_withdrawal_intent/spend_and_mint.l2_withdrawal_intent.spend", @@ -237,8 +237,8 @@ } } ], - "compiledCode": "590eb90101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae00248888888896600330013005375401523009300a0019ba5480026e1d20009b8748009222223232980098059baa001911919800800801912cc004006298103d87a80008992cc004c010006260146602600297ae0899801801980a801201e30130014045300f007980780124444b30013007004899199119912cc004c034c050dd500144c966002601a602a6ea80062646644b3001002800c566002603a0051337106eb4c070c074c074dd6180e00124001001406880d0c8cc004004c8cc004004dd5980e180e980e980e980e803912cc004006297ae08991991199119801001000912cc004006200713233022374e660446ea4014cc088c07c004cc088c0800052f5c066006006604800460440028100dd5980e8019bae301a00133003003301f002301d001406c44b30010018a5eb8226644b30013371e6eb8c07800801626603a6e9c008cc01001000626600800800280c8dd6180e000980e800a03414a06eb8c064c058dd5000c59014180c180a9baa301830153754601e602a6ea8c060c054dd5001459013198031bac301600123375e602e60286ea800400cc058c05c00cc050004c044dd500198081baa0058acc004c020012266446644b3001300c0018acc004c050dd5002c00a2c80aa2b3001300b0018acc004c050dd5002c00a2c80aa2b300130030018acc004c050dd5002c00a2c80aa2c8091012202419800980b18091baa00491192cc004c03400626464b3001301b0028024590181bae3019001301537540071598009806000c4c8c96600260360050048b2030375c6032002602a6ea800e2c809901318099baa0029b8f4890098089baa0034888a600260340093758603200922598009808180b9baa002899191919912cc004c08400e266014604000826601400400d164078603c0026eb8c07800cc078004c074004c060dd5001459016489660026020602e6ea800a2646464b3001301f002899804180f0018992cc004c050006264b30013021001899192cc004c05c006264b300130240018998069811800804c59021180f9baa0028acc004c05800626464653001375a604a003375a604a007375a604a0049112cc004c0a401201d16409830250013024001301f375400516407480e8c074dd50009810000c5901e180e1baa0028acc004c04c0062b3001301c37540050058b203a8b2034406860346ea80062c80e0c074004c074004c060dd5001459016244446644653001375860400033758604000f223259800980c180f9baa0018992cc004c064c080dd5000c4c8c8c8c8c8c8c8c8c8c8c8ca60026eb8c0c00066eb8c0c00326eb8c0c002e6eb8c0c00266eb8c0c0022606000f375c606000d30300059bae30300049bae30300039bae303000248888888888966002607801913301d303b01513301f00613301f00410188b20721818000981780098170009816800981600098158009815000981480098140009813800981300098109baa0018b203e323259800980d000c5a2b300130190018b44c094c088dd50012040408060406ea8004c08cc090c090c080dd5180d18101baa302330203754003164078660240044602e64b300130183020375400314800226eb4c090c084dd5000a03e3259800980c18101baa0018a60103d87a8000899198008009bab30253022375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0440062603c6604e604a00497ae08a60103d87a8000408d1330040043029003408c6eb8c08c004c098005024203e32330010013756603660426ea8c06cc084dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062603a6604c604800497ae08a60103d87a80004089133004004302800340886eb8c088004c0940050234dd59810001a4444b3001301900c8992cc004c09800626644b3001301c3023375400313232323259800981600144cc88cc03c004566002604460526ea8006264b30013023302a375400315980099b8f0030288acc004cdc424000009159800804c4c8c8cc004004040896600200314a115980099b8f375c606200200714a3133002002303200140b08178dd7181718159baa0018a5040a514a0814a2941029459029181218151baa302d302a37540031640a06eb8c0ac010c0ac00e2c8148dd698150009815000981480098121baa0018b2044332259800800c00a2b300130280018992cc004c044dd71814000c4c070dd698141814800c528204630283758604e0030024094812852819198008009919800800802112cc004006297ae0899199119198008009bab30290042259800800c400e2646605a6e9ccc0b4dd4802998169815000998169815800a5eb80cc00c00cc0bc008c0b400502b1bae302500133003003302a0023028001409844b30010018a5eb8226644b30013371e6eb8c0a400805a2660506e9c008cc0100100062660080080028120dd618138009814000a04a3259800980918111baa0018981318119baa0018b204230253026302630223754604a00316408c64646600200200a44b30010018a5eb8226644b30015980099baf30293026375400400b13233001001323300100137566056605860506ea8010896600200314bd7044c8cc88c8cc004004dd59816802112cc004006200713233031374e660626ea4014cc0c4c0b8004cc0c4c0bc0052f5c066006006606600460620028178dd718148009980180198170011816000a0542259800800c528456600266e3cdd718159bac302b0010188a518998010011816000a04c40a514a08122266050004660080080031330040040014090604e00260500028128c068cc08ccdd2a4004660466ea40452f5c06604698103d87a80004bd704566002603001913259800980d18109baa0018cc004c094c088dd5000c88c966002603a003132323322598009816801c01a2c8150dd718150009bad302a002302a00130253754007159800980e000c4c8cc8966002605800313259800981098141baa00189919194c004dd71817800cdd69817801cdd718178012444b300130330048064590300c0bc004c0b8004c0a4dd5000c590271815800c590291bad3029001302a00130253754007159800980a000c4c8c8ca60026eb8c0ac0066eb4c0ac00e6eb8c0ac00922259800981780240222c816060560026054002604a6ea800e2c811902320463023375400522323300100100322330030013002002488a60024464b300130200018992cc004c0b400626600a6eb0c0b00048966002005005899804181700109800981780120588b205430283754007159800980f800c4c8cc8966002605e0031330073758605c00244b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302c001302d00130283754007159800980b800c4c8c8c966002605e0051330073758605c00644b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302d001302d00130283754007164098813102618131baa0028acc004cc89660020030028acc004c0ac006264b30013014375c605600313370e6eb4c0acc0b000520018a50409860566eb0c0a800600481410280a50323300100132330010010072259800800c52f5c1132332232330010013756605800844b30010018801c4c8cc0c0dd3998181ba900533030302d00133030302e0014bd701980180198190011818000a05c375c605000266006006605a00460560028148896600200314bd7044cc896600266e3cdd7181600100cc4cc0acdd380119802002000c4cc0100100050271bac302a001302b00140a1159800980a18121baa0038a518a50408d14a0811a60486ea800d222598009810000c4c966002605a00313300e302c0010038b20543028375400d159800980f800c4c8c8c8ca6002605e003375c605e0093756605e0049112cc004c0cc0122660166eb0c0c8018896600200513300d003225980080144cc03801c03626464653001375c6072003375c606a007375c60720049112cc004c0f40122600e607a0111640e8303900137586068002606c00481a22646004606c0066eb8c0d00090324590300c0bc004c0b8004c0b4004c0a0dd50034566002602e0031323232323298009818000cdd71818002cdd59818001cc0c0009222259800981a802c4cc034dd6181a004112cc00400a26601e00844b30010028998080028992cc004c0b8006264b3001303b001899809181d000808c59038181b1baa0098acc004c0b40062b3001303637540130108b206e8b206840d060686ea802226464653001375c6076003375c606e007375c60760049112cc004c0fc0122600e607e0111640f0303b0013758606c002607000481b2264600460700066eb8c0d80090344590320c0c0004c0bc004c0b8004c0b4004c0a0dd5003459026204c40984590201919198008009bab302630270072259800800c530103d87a80008992cc004cdd78021812000c4c078cc09cc0940052f5c11330030033029002408c604e0028128cdd2a40086604666e952002330233024302530253025302530253025302530253025302137546600401403a97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302a302b3027375400844b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc00400629422b30013371e6eb8c0a8dd6181500080bc528c4cc008008c0ac005025205089981380119802002000c4cc01001000502318130009813800a0488a518a50408913232330010010062259800800c528456600266e3cdd71813800801c528c4cc008008c0a0005022204a375c604860426ea8cc008028076294101f203e407c3020302030203020002301e301e004223259800980a800c4c8c8c966002604800513300830230030058b2042375c60440026044002603a6ea800e2b3001301400189919192cc004c09000a266010604600600b1640846eb8c088004c088004c074dd5001c5660026018003132323259800981200144cc020c08c00c0162c8108dd718110009811000980e9baa0038b2036406c80d8c06cdd5001060226ea800cdd7180998081baa005370e900245900e201c180718078009807002a29344d95900301", - "hash": "d24abf6dd42140dcd979a6570e8526597702e62815c21114d849b510" + "compiledCode": "590e110101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae002488888888966003300130053754015370e90014dd2a400123009300a0019b87480012222298009807002cc03401644464b30013008300d375400314800226eb4c044c038dd5000a0183259800980418069baa0018a6103d87a8000899198008009bab3012300f375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062601666028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c005011201832330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466026602200497ae08a60103d87a8000403d1330040043015003403c6eb8c03c004c048005010488c8cc00400400c896600200314c0103d87a80008992cc004c010006260106602200297ae08998018019809801201a3011001403c91111919912cc004c02c00a26466446644b3001300d30153754005132598009808980b1baa001899b8898009bab301a301b301b301b301b0049bae301a30173754003488100402c9000459015180c980b1baa301930163754601c602c6ea8c064c058dd5001459014198039bac301700123375e6030602a6ea800400cc05cc06000cc054004c048dd500398089baa0038acc004c02000a266446644b3001300c0018acc004c054dd5002c00a2c80b22b3001300f0018acc004c054dd5002c00a2c80b22b300130030018acc004c054dd5002c00a2c80b22c80990132026133229800980c8014dd6180c00148966002601c602c6ea800a26464646644b30013020003899804180f80209980400100345901d180e8009bae301d003301d001301c0013017375400516405522598009807180b1baa00289919192cc004c07800a26600c603a006264b300130120018992cc004c08000626464b300130150018992cc004c08c0062660166044002013164080603c6ea800a2b3001301800189919194c004dd69812000cdd69812001cdd698120012444b300130280048074590250c090004c08c004c078dd500145901c2038301c3754002603e00316407460366ea800a2b300130150018acc004c06cdd500140162c80e22c80c9019180c9baa0018b2036301c001301c0013017375400516405491111991194c004dd6180f800cc06cdd50064dd6180f803c88c966002602c603c6ea8006264b30013017301f3754003132323232323232323232323298009bae302f0019bae302f00c9bae302f00b9bae302f0099bae302f0089817803cdd718178034c0bc0166eb8c0bc0126eb8c0bc00e6eb8c0bc0092222222222259800981d80644cc074c0e80544cc07c0184cc07c01040622c81c0605e002605c002605a00260580026056002605400260520026050002604e002604c002604a00260406ea80062c80f0c8c9660026030003168acc004c06c0062d130243021375400480f901f180f9baa001302230233023301f3754602e603e6ea8c088c07cdd5000c5901d198088011180ccc004dd5980b980f9baa3017301f3754003002a44100404d3756603e006911112cc004c060012264b30013026001899912cc004c06cc08cdd5000c4c8c8c8c96600260580051332233010001159800981098149baa0018992cc004c088c0a8dd5000c56600266e3c00c0a22b3001337109000002456600201313232330010010112259800800c528456600266e3cdd71818800801c528c4cc008008c0c800502c205e375c605c60566ea80062941029452820528a5040a51640a4604460546ea8c0b4c0a8dd5000c590281bae302b004302b0038b2052375a60540026054002605200260486ea80062c8110cc89660020030028acc004c0a0006264b30013371e6eb8c0a00052201008980f9bad302830290018a50408c60506eb0c09c00600481290250a50323300100132330010010042259800800c52f5c1132332232330010013756605200844b30010018801c4c8cc0b4dd3998169ba90053302d302a0013302d302b0014bd701980180198178011816800a056375c604a00266006006605400460500028130896600200314bd7044cc896600266e3cdd7181480100ac4cc0a0dd380119802002000c4cc0100100050241bac30270013028001409464b30013011302237540031302630233754003164084604a604c604c60446ea8c0940062c8118c8c8cc004004014896600200314bd7044cc8966002b30013375e6052604c6ea80080162646600200264660020026eacc0acc0b0c0a0dd5002112cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a508acc004cdc79bae302b3758605600202f14a3133002002302c0014098814a294102444cc0a0008cc0100100062660080080028120c09c004c0a0005025180d1981199ba548008cc08cdd480825eb80cc08d300103d87a80004bd704566002603600913259800980c98109baa0018cc004c094c088dd5000c88c9660026038003132323322598009816801c01a2c8150dd718150009bad302a002302a00130253754007159800980f800c4c8cc8966002605800313259800981018141baa00189919194c004dd71817800cdd69817801cdd718178012444b300130330048064590300c0bc004c0b8004c0a4dd5000c590271815800c590291bad3029001302a001302537540071598009809800c4c8c8ca60026eb8c0ac0066eb4c0ac00e6eb8c0ac00922259800981780240222c816060560026054002604a6ea800e2c811902320463023375400522323300100100322330030013002002488a60024464b3001301f0018992cc004c0b400626600a6eb0c0b00048966002005005899804181700109800981780120588b2054302837540071598009811000c4c8cc8966002605e0031330073758605c00244b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302c001302d00130283754007159800980b000c4c8c8c966002605e0051330073758605c00644b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302d001302d00130283754007164098813102618131baa0028acc004cc89660020030028acc004c0ac006264b30013371e6eb8c0ac00522100899b87375a605660580029000c528204c302b3758605400300240a0814052819198008009919800800803912cc004006297ae0899199119198008009bab302c0042259800800c400e264660606e9ccc0c0dd4802998181816800998181817000a5eb80cc00c00cc0c8008c0c000502e1bae302800133003003302d002302b00140a444b30010018a5eb8226644b30013371e6eb8c0b00080622660566e9c008cc0100100062660080080028138dd618150009815800a0508acc004c04cc090dd5001c528c52820468a50408d302437540069112cc004c07c006264b3001302d0018998079816000801c5902a18141baa0068acc004c0880062646464653001302f0019bae302f0049bab302f002488966002606600913300b3758606400c44b3001002899806801912cc00400a26601c00e01b132323298009bae30390019bae30350039bae3039002488966002607a00913007303d0088b2074181c8009bac3034001303600240d113230023036003375c606800481922c8180605e002605c002605a00260506ea801a2b30013016001899191919194c004c0c00066eb8c0c00166eacc0c000e606000491112cc004c0d401626601a6eb0c0d0020896600200513300f004225980080144cc0400144c966002605a00313259800981d800c4cc048c0e80040462c81c0c0d8dd5004c5660026060003159800981b1baa009808459037459034206830343754011132323298009bae303b0019bae30370039bae303b002488966002607e00913007303f0088b2078181d8009bac3036001303800240d913230023038003375c606c00481a22c81906060002605e002605c002605a00260506ea801a2c8131026204c22c8100c8c8cc004004dd598131813804112cc004006298103d87a80008992cc004cdd78021812000c4c078cc09cc0940052f5c11330030033029002408c604e0028128cdd2a40086604666e952002330233024302530253025302530253025302530253025302137546600401603a97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302a302b3027375400844b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc00400629422b30013371e6eb8c0a8dd6181500080b4528c4cc008008c0ac005025205089981380119802002000c4cc01001000502318130009813800a0488a518a50408913232330010010072259800800c528456600266e3cdd71813800801c528c4cc008008c0a0005022204a375c604860426ea8cc00802c076294101f203e407c301f301f301f301f002301d301d0042232598009809800c4c8c8c966002604600513300830220030058b2040375c6042002604200260386ea800e2b3001301600189919192cc004c08c00a266010604400600b1640806eb8c084004c084004c070dd5001c5660026014003132323259800981180144cc020c08800c0162c8100dd718108009810800980e1baa0038b2034406880d0c068dd50010c05cc04cdd500411192cc004c03400626464b3001301c0028024590191bae301a001301637540071598009808000c4c8c96600260380050048b2032375c6034002602c6ea800e2c80a1014180a1baa002301237540066eb8c050c044dd50019b87480122c807900f18071baa001301200530113012004229344d95900301", + "hash": "e9383e3269cdbd5eae47d107bcd904614e66ab76e051fd1ed27f3f34" }, { "title": "l2_withdrawal_intent/spend_and_mint.l2_withdrawal_intent.mint", @@ -262,8 +262,8 @@ } } ], - "compiledCode": "590eb90101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae00248888888896600330013005375401523009300a0019ba5480026e1d20009b8748009222223232980098059baa001911919800800801912cc004006298103d87a80008992cc004c010006260146602600297ae0899801801980a801201e30130014045300f007980780124444b30013007004899199119912cc004c034c050dd500144c966002601a602a6ea80062646644b3001002800c566002603a0051337106eb4c070c074c074dd6180e00124001001406880d0c8cc004004c8cc004004dd5980e180e980e980e980e803912cc004006297ae08991991199119801001000912cc004006200713233022374e660446ea4014cc088c07c004cc088c0800052f5c066006006604800460440028100dd5980e8019bae301a00133003003301f002301d001406c44b30010018a5eb8226644b30013371e6eb8c07800801626603a6e9c008cc01001000626600800800280c8dd6180e000980e800a03414a06eb8c064c058dd5000c59014180c180a9baa301830153754601e602a6ea8c060c054dd5001459013198031bac301600123375e602e60286ea800400cc058c05c00cc050004c044dd500198081baa0058acc004c020012266446644b3001300c0018acc004c050dd5002c00a2c80aa2b3001300b0018acc004c050dd5002c00a2c80aa2b300130030018acc004c050dd5002c00a2c80aa2c8091012202419800980b18091baa00491192cc004c03400626464b3001301b0028024590181bae3019001301537540071598009806000c4c8c96600260360050048b2030375c6032002602a6ea800e2c809901318099baa0029b8f4890098089baa0034888a600260340093758603200922598009808180b9baa002899191919912cc004c08400e266014604000826601400400d164078603c0026eb8c07800cc078004c074004c060dd5001459016489660026020602e6ea800a2646464b3001301f002899804180f0018992cc004c050006264b30013021001899192cc004c05c006264b300130240018998069811800804c59021180f9baa0028acc004c05800626464653001375a604a003375a604a007375a604a0049112cc004c0a401201d16409830250013024001301f375400516407480e8c074dd50009810000c5901e180e1baa0028acc004c04c0062b3001301c37540050058b203a8b2034406860346ea80062c80e0c074004c074004c060dd5001459016244446644653001375860400033758604000f223259800980c180f9baa0018992cc004c064c080dd5000c4c8c8c8c8c8c8c8c8c8c8c8ca60026eb8c0c00066eb8c0c00326eb8c0c002e6eb8c0c00266eb8c0c0022606000f375c606000d30300059bae30300049bae30300039bae303000248888888888966002607801913301d303b01513301f00613301f00410188b20721818000981780098170009816800981600098158009815000981480098140009813800981300098109baa0018b203e323259800980d000c5a2b300130190018b44c094c088dd50012040408060406ea8004c08cc090c090c080dd5180d18101baa302330203754003164078660240044602e64b300130183020375400314800226eb4c090c084dd5000a03e3259800980c18101baa0018a60103d87a8000899198008009bab30253022375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0440062603c6604e604a00497ae08a60103d87a8000408d1330040043029003408c6eb8c08c004c098005024203e32330010013756603660426ea8c06cc084dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062603a6604c604800497ae08a60103d87a80004089133004004302800340886eb8c088004c0940050234dd59810001a4444b3001301900c8992cc004c09800626644b3001301c3023375400313232323259800981600144cc88cc03c004566002604460526ea8006264b30013023302a375400315980099b8f0030288acc004cdc424000009159800804c4c8c8cc004004040896600200314a115980099b8f375c606200200714a3133002002303200140b08178dd7181718159baa0018a5040a514a0814a2941029459029181218151baa302d302a37540031640a06eb8c0ac010c0ac00e2c8148dd698150009815000981480098121baa0018b2044332259800800c00a2b300130280018992cc004c044dd71814000c4c070dd698141814800c528204630283758604e0030024094812852819198008009919800800802112cc004006297ae0899199119198008009bab30290042259800800c400e2646605a6e9ccc0b4dd4802998169815000998169815800a5eb80cc00c00cc0bc008c0b400502b1bae302500133003003302a0023028001409844b30010018a5eb8226644b30013371e6eb8c0a400805a2660506e9c008cc0100100062660080080028120dd618138009814000a04a3259800980918111baa0018981318119baa0018b204230253026302630223754604a00316408c64646600200200a44b30010018a5eb8226644b30015980099baf30293026375400400b13233001001323300100137566056605860506ea8010896600200314bd7044c8cc88c8cc004004dd59816802112cc004006200713233031374e660626ea4014cc0c4c0b8004cc0c4c0bc0052f5c066006006606600460620028178dd718148009980180198170011816000a0542259800800c528456600266e3cdd718159bac302b0010188a518998010011816000a04c40a514a08122266050004660080080031330040040014090604e00260500028128c068cc08ccdd2a4004660466ea40452f5c06604698103d87a80004bd704566002603001913259800980d18109baa0018cc004c094c088dd5000c88c966002603a003132323322598009816801c01a2c8150dd718150009bad302a002302a00130253754007159800980e000c4c8cc8966002605800313259800981098141baa00189919194c004dd71817800cdd69817801cdd718178012444b300130330048064590300c0bc004c0b8004c0a4dd5000c590271815800c590291bad3029001302a00130253754007159800980a000c4c8c8ca60026eb8c0ac0066eb4c0ac00e6eb8c0ac00922259800981780240222c816060560026054002604a6ea800e2c811902320463023375400522323300100100322330030013002002488a60024464b300130200018992cc004c0b400626600a6eb0c0b00048966002005005899804181700109800981780120588b205430283754007159800980f800c4c8cc8966002605e0031330073758605c00244b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302c001302d00130283754007159800980b800c4c8c8c966002605e0051330073758605c00644b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302d001302d00130283754007164098813102618131baa0028acc004cc89660020030028acc004c0ac006264b30013014375c605600313370e6eb4c0acc0b000520018a50409860566eb0c0a800600481410280a50323300100132330010010072259800800c52f5c1132332232330010013756605800844b30010018801c4c8cc0c0dd3998181ba900533030302d00133030302e0014bd701980180198190011818000a05c375c605000266006006605a00460560028148896600200314bd7044cc896600266e3cdd7181600100cc4cc0acdd380119802002000c4cc0100100050271bac302a001302b00140a1159800980a18121baa0038a518a50408d14a0811a60486ea800d222598009810000c4c966002605a00313300e302c0010038b20543028375400d159800980f800c4c8c8c8ca6002605e003375c605e0093756605e0049112cc004c0cc0122660166eb0c0c8018896600200513300d003225980080144cc03801c03626464653001375c6072003375c606a007375c60720049112cc004c0f40122600e607a0111640e8303900137586068002606c00481a22646004606c0066eb8c0d00090324590300c0bc004c0b8004c0b4004c0a0dd50034566002602e0031323232323298009818000cdd71818002cdd59818001cc0c0009222259800981a802c4cc034dd6181a004112cc00400a26601e00844b30010028998080028992cc004c0b8006264b3001303b001899809181d000808c59038181b1baa0098acc004c0b40062b3001303637540130108b206e8b206840d060686ea802226464653001375c6076003375c606e007375c60760049112cc004c0fc0122600e607e0111640f0303b0013758606c002607000481b2264600460700066eb8c0d80090344590320c0c0004c0bc004c0b8004c0b4004c0a0dd5003459026204c40984590201919198008009bab302630270072259800800c530103d87a80008992cc004cdd78021812000c4c078cc09cc0940052f5c11330030033029002408c604e0028128cdd2a40086604666e952002330233024302530253025302530253025302530253025302137546600401403a97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302a302b3027375400844b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc00400629422b30013371e6eb8c0a8dd6181500080bc528c4cc008008c0ac005025205089981380119802002000c4cc01001000502318130009813800a0488a518a50408913232330010010062259800800c528456600266e3cdd71813800801c528c4cc008008c0a0005022204a375c604860426ea8cc008028076294101f203e407c3020302030203020002301e301e004223259800980a800c4c8c8c966002604800513300830230030058b2042375c60440026044002603a6ea800e2b3001301400189919192cc004c09000a266010604600600b1640846eb8c088004c088004c074dd5001c5660026018003132323259800981200144cc020c08c00c0162c8108dd718110009811000980e9baa0038b2036406c80d8c06cdd5001060226ea800cdd7180998081baa005370e900245900e201c180718078009807002a29344d95900301", - "hash": "d24abf6dd42140dcd979a6570e8526597702e62815c21114d849b510" + "compiledCode": "590e110101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae002488888888966003300130053754015370e90014dd2a400123009300a0019b87480012222298009807002cc03401644464b30013008300d375400314800226eb4c044c038dd5000a0183259800980418069baa0018a6103d87a8000899198008009bab3012300f375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062601666028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c005011201832330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466026602200497ae08a60103d87a8000403d1330040043015003403c6eb8c03c004c048005010488c8cc00400400c896600200314c0103d87a80008992cc004c010006260106602200297ae08998018019809801201a3011001403c91111919912cc004c02c00a26466446644b3001300d30153754005132598009808980b1baa001899b8898009bab301a301b301b301b301b0049bae301a30173754003488100402c9000459015180c980b1baa301930163754601c602c6ea8c064c058dd5001459014198039bac301700123375e6030602a6ea800400cc05cc06000cc054004c048dd500398089baa0038acc004c02000a266446644b3001300c0018acc004c054dd5002c00a2c80b22b3001300f0018acc004c054dd5002c00a2c80b22b300130030018acc004c054dd5002c00a2c80b22c80990132026133229800980c8014dd6180c00148966002601c602c6ea800a26464646644b30013020003899804180f80209980400100345901d180e8009bae301d003301d001301c0013017375400516405522598009807180b1baa00289919192cc004c07800a26600c603a006264b300130120018992cc004c08000626464b300130150018992cc004c08c0062660166044002013164080603c6ea800a2b3001301800189919194c004dd69812000cdd69812001cdd698120012444b300130280048074590250c090004c08c004c078dd500145901c2038301c3754002603e00316407460366ea800a2b300130150018acc004c06cdd500140162c80e22c80c9019180c9baa0018b2036301c001301c0013017375400516405491111991194c004dd6180f800cc06cdd50064dd6180f803c88c966002602c603c6ea8006264b30013017301f3754003132323232323232323232323298009bae302f0019bae302f00c9bae302f00b9bae302f0099bae302f0089817803cdd718178034c0bc0166eb8c0bc0126eb8c0bc00e6eb8c0bc0092222222222259800981d80644cc074c0e80544cc07c0184cc07c01040622c81c0605e002605c002605a00260580026056002605400260520026050002604e002604c002604a00260406ea80062c80f0c8c9660026030003168acc004c06c0062d130243021375400480f901f180f9baa001302230233023301f3754602e603e6ea8c088c07cdd5000c5901d198088011180ccc004dd5980b980f9baa3017301f3754003002a44100404d3756603e006911112cc004c060012264b30013026001899912cc004c06cc08cdd5000c4c8c8c8c96600260580051332233010001159800981098149baa0018992cc004c088c0a8dd5000c56600266e3c00c0a22b3001337109000002456600201313232330010010112259800800c528456600266e3cdd71818800801c528c4cc008008c0c800502c205e375c605c60566ea80062941029452820528a5040a51640a4604460546ea8c0b4c0a8dd5000c590281bae302b004302b0038b2052375a60540026054002605200260486ea80062c8110cc89660020030028acc004c0a0006264b30013371e6eb8c0a00052201008980f9bad302830290018a50408c60506eb0c09c00600481290250a50323300100132330010010042259800800c52f5c1132332232330010013756605200844b30010018801c4c8cc0b4dd3998169ba90053302d302a0013302d302b0014bd701980180198178011816800a056375c604a00266006006605400460500028130896600200314bd7044cc896600266e3cdd7181480100ac4cc0a0dd380119802002000c4cc0100100050241bac30270013028001409464b30013011302237540031302630233754003164084604a604c604c60446ea8c0940062c8118c8c8cc004004014896600200314bd7044cc8966002b30013375e6052604c6ea80080162646600200264660020026eacc0acc0b0c0a0dd5002112cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a508acc004cdc79bae302b3758605600202f14a3133002002302c0014098814a294102444cc0a0008cc0100100062660080080028120c09c004c0a0005025180d1981199ba548008cc08cdd480825eb80cc08d300103d87a80004bd704566002603600913259800980c98109baa0018cc004c094c088dd5000c88c9660026038003132323322598009816801c01a2c8150dd718150009bad302a002302a00130253754007159800980f800c4c8cc8966002605800313259800981018141baa00189919194c004dd71817800cdd69817801cdd718178012444b300130330048064590300c0bc004c0b8004c0a4dd5000c590271815800c590291bad3029001302a001302537540071598009809800c4c8c8ca60026eb8c0ac0066eb4c0ac00e6eb8c0ac00922259800981780240222c816060560026054002604a6ea800e2c811902320463023375400522323300100100322330030013002002488a60024464b3001301f0018992cc004c0b400626600a6eb0c0b00048966002005005899804181700109800981780120588b2054302837540071598009811000c4c8cc8966002605e0031330073758605c00244b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302c001302d00130283754007159800980b000c4c8c8c966002605e0051330073758605c00644b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302d001302d00130283754007164098813102618131baa0028acc004cc89660020030028acc004c0ac006264b30013371e6eb8c0ac00522100899b87375a605660580029000c528204c302b3758605400300240a0814052819198008009919800800803912cc004006297ae0899199119198008009bab302c0042259800800c400e264660606e9ccc0c0dd4802998181816800998181817000a5eb80cc00c00cc0c8008c0c000502e1bae302800133003003302d002302b00140a444b30010018a5eb8226644b30013371e6eb8c0b00080622660566e9c008cc0100100062660080080028138dd618150009815800a0508acc004c04cc090dd5001c528c52820468a50408d302437540069112cc004c07c006264b3001302d0018998079816000801c5902a18141baa0068acc004c0880062646464653001302f0019bae302f0049bab302f002488966002606600913300b3758606400c44b3001002899806801912cc00400a26601c00e01b132323298009bae30390019bae30350039bae3039002488966002607a00913007303d0088b2074181c8009bac3034001303600240d113230023036003375c606800481922c8180605e002605c002605a00260506ea801a2b30013016001899191919194c004c0c00066eb8c0c00166eacc0c000e606000491112cc004c0d401626601a6eb0c0d0020896600200513300f004225980080144cc0400144c966002605a00313259800981d800c4cc048c0e80040462c81c0c0d8dd5004c5660026060003159800981b1baa009808459037459034206830343754011132323298009bae303b0019bae30370039bae303b002488966002607e00913007303f0088b2078181d8009bac3036001303800240d913230023038003375c606c00481a22c81906060002605e002605c002605a00260506ea801a2c8131026204c22c8100c8c8cc004004dd598131813804112cc004006298103d87a80008992cc004cdd78021812000c4c078cc09cc0940052f5c11330030033029002408c604e0028128cdd2a40086604666e952002330233024302530253025302530253025302530253025302137546600401603a97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302a302b3027375400844b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc00400629422b30013371e6eb8c0a8dd6181500080b4528c4cc008008c0ac005025205089981380119802002000c4cc01001000502318130009813800a0488a518a50408913232330010010072259800800c528456600266e3cdd71813800801c528c4cc008008c0a0005022204a375c604860426ea8cc00802c076294101f203e407c301f301f301f301f002301d301d0042232598009809800c4c8c8c966002604600513300830220030058b2040375c6042002604200260386ea800e2b3001301600189919192cc004c08c00a266010604400600b1640806eb8c084004c084004c070dd5001c5660026014003132323259800981180144cc020c08800c0162c8100dd718108009810800980e1baa0038b2034406880d0c068dd50010c05cc04cdd500411192cc004c03400626464b3001301c0028024590191bae301a001301637540071598009808000c4c8c96600260380050048b2032375c6034002602c6ea800e2c80a1014180a1baa002301237540066eb8c050c044dd50019b87480122c807900f18071baa001301200530113012004229344d95900301", + "hash": "e9383e3269cdbd5eae47d107bcd904614e66ab76e051fd1ed27f3f34" }, { "title": "l2_withdrawal_intent/spend_and_mint.l2_withdrawal_intent.else", @@ -284,8 +284,8 @@ } } ], - "compiledCode": "590eb90101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae00248888888896600330013005375401523009300a0019ba5480026e1d20009b8748009222223232980098059baa001911919800800801912cc004006298103d87a80008992cc004c010006260146602600297ae0899801801980a801201e30130014045300f007980780124444b30013007004899199119912cc004c034c050dd500144c966002601a602a6ea80062646644b3001002800c566002603a0051337106eb4c070c074c074dd6180e00124001001406880d0c8cc004004c8cc004004dd5980e180e980e980e980e803912cc004006297ae08991991199119801001000912cc004006200713233022374e660446ea4014cc088c07c004cc088c0800052f5c066006006604800460440028100dd5980e8019bae301a00133003003301f002301d001406c44b30010018a5eb8226644b30013371e6eb8c07800801626603a6e9c008cc01001000626600800800280c8dd6180e000980e800a03414a06eb8c064c058dd5000c59014180c180a9baa301830153754601e602a6ea8c060c054dd5001459013198031bac301600123375e602e60286ea800400cc058c05c00cc050004c044dd500198081baa0058acc004c020012266446644b3001300c0018acc004c050dd5002c00a2c80aa2b3001300b0018acc004c050dd5002c00a2c80aa2b300130030018acc004c050dd5002c00a2c80aa2c8091012202419800980b18091baa00491192cc004c03400626464b3001301b0028024590181bae3019001301537540071598009806000c4c8c96600260360050048b2030375c6032002602a6ea800e2c809901318099baa0029b8f4890098089baa0034888a600260340093758603200922598009808180b9baa002899191919912cc004c08400e266014604000826601400400d164078603c0026eb8c07800cc078004c074004c060dd5001459016489660026020602e6ea800a2646464b3001301f002899804180f0018992cc004c050006264b30013021001899192cc004c05c006264b300130240018998069811800804c59021180f9baa0028acc004c05800626464653001375a604a003375a604a007375a604a0049112cc004c0a401201d16409830250013024001301f375400516407480e8c074dd50009810000c5901e180e1baa0028acc004c04c0062b3001301c37540050058b203a8b2034406860346ea80062c80e0c074004c074004c060dd5001459016244446644653001375860400033758604000f223259800980c180f9baa0018992cc004c064c080dd5000c4c8c8c8c8c8c8c8c8c8c8c8ca60026eb8c0c00066eb8c0c00326eb8c0c002e6eb8c0c00266eb8c0c0022606000f375c606000d30300059bae30300049bae30300039bae303000248888888888966002607801913301d303b01513301f00613301f00410188b20721818000981780098170009816800981600098158009815000981480098140009813800981300098109baa0018b203e323259800980d000c5a2b300130190018b44c094c088dd50012040408060406ea8004c08cc090c090c080dd5180d18101baa302330203754003164078660240044602e64b300130183020375400314800226eb4c090c084dd5000a03e3259800980c18101baa0018a60103d87a8000899198008009bab30253022375400444b30010018a6103d87a8000899192cc004cdc8a45000018acc004c0440062603c6604e604a00497ae08a60103d87a8000408d1330040043029003408c6eb8c08c004c098005024203e32330010013756603660426ea8c06cc084dd5001112cc004006298103d87a8000899192cc004cdc8803000c56600266e3c0180062603a6604c604800497ae08a60103d87a80004089133004004302800340886eb8c088004c0940050234dd59810001a4444b3001301900c8992cc004c09800626644b3001301c3023375400313232323259800981600144cc88cc03c004566002604460526ea8006264b30013023302a375400315980099b8f0030288acc004cdc424000009159800804c4c8c8cc004004040896600200314a115980099b8f375c606200200714a3133002002303200140b08178dd7181718159baa0018a5040a514a0814a2941029459029181218151baa302d302a37540031640a06eb8c0ac010c0ac00e2c8148dd698150009815000981480098121baa0018b2044332259800800c00a2b300130280018992cc004c044dd71814000c4c070dd698141814800c528204630283758604e0030024094812852819198008009919800800802112cc004006297ae0899199119198008009bab30290042259800800c400e2646605a6e9ccc0b4dd4802998169815000998169815800a5eb80cc00c00cc0bc008c0b400502b1bae302500133003003302a0023028001409844b30010018a5eb8226644b30013371e6eb8c0a400805a2660506e9c008cc0100100062660080080028120dd618138009814000a04a3259800980918111baa0018981318119baa0018b204230253026302630223754604a00316408c64646600200200a44b30010018a5eb8226644b30015980099baf30293026375400400b13233001001323300100137566056605860506ea8010896600200314bd7044c8cc88c8cc004004dd59816802112cc004006200713233031374e660626ea4014cc0c4c0b8004cc0c4c0bc0052f5c066006006606600460620028178dd718148009980180198170011816000a0542259800800c528456600266e3cdd718159bac302b0010188a518998010011816000a04c40a514a08122266050004660080080031330040040014090604e00260500028128c068cc08ccdd2a4004660466ea40452f5c06604698103d87a80004bd704566002603001913259800980d18109baa0018cc004c094c088dd5000c88c966002603a003132323322598009816801c01a2c8150dd718150009bad302a002302a00130253754007159800980e000c4c8cc8966002605800313259800981098141baa00189919194c004dd71817800cdd69817801cdd718178012444b300130330048064590300c0bc004c0b8004c0a4dd5000c590271815800c590291bad3029001302a00130253754007159800980a000c4c8c8ca60026eb8c0ac0066eb4c0ac00e6eb8c0ac00922259800981780240222c816060560026054002604a6ea800e2c811902320463023375400522323300100100322330030013002002488a60024464b300130200018992cc004c0b400626600a6eb0c0b00048966002005005899804181700109800981780120588b205430283754007159800980f800c4c8cc8966002605e0031330073758605c00244b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302c001302d00130283754007159800980b800c4c8c8c966002605e0051330073758605c00644b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302d001302d00130283754007164098813102618131baa0028acc004cc89660020030028acc004c0ac006264b30013014375c605600313370e6eb4c0acc0b000520018a50409860566eb0c0a800600481410280a50323300100132330010010072259800800c52f5c1132332232330010013756605800844b30010018801c4c8cc0c0dd3998181ba900533030302d00133030302e0014bd701980180198190011818000a05c375c605000266006006605a00460560028148896600200314bd7044cc896600266e3cdd7181600100cc4cc0acdd380119802002000c4cc0100100050271bac302a001302b00140a1159800980a18121baa0038a518a50408d14a0811a60486ea800d222598009810000c4c966002605a00313300e302c0010038b20543028375400d159800980f800c4c8c8c8ca6002605e003375c605e0093756605e0049112cc004c0cc0122660166eb0c0c8018896600200513300d003225980080144cc03801c03626464653001375c6072003375c606a007375c60720049112cc004c0f40122600e607a0111640e8303900137586068002606c00481a22646004606c0066eb8c0d00090324590300c0bc004c0b8004c0b4004c0a0dd50034566002602e0031323232323298009818000cdd71818002cdd59818001cc0c0009222259800981a802c4cc034dd6181a004112cc00400a26601e00844b30010028998080028992cc004c0b8006264b3001303b001899809181d000808c59038181b1baa0098acc004c0b40062b3001303637540130108b206e8b206840d060686ea802226464653001375c6076003375c606e007375c60760049112cc004c0fc0122600e607e0111640f0303b0013758606c002607000481b2264600460700066eb8c0d80090344590320c0c0004c0bc004c0b8004c0b4004c0a0dd5003459026204c40984590201919198008009bab302630270072259800800c530103d87a80008992cc004cdd78021812000c4c078cc09cc0940052f5c11330030033029002408c604e0028128cdd2a40086604666e952002330233024302530253025302530253025302530253025302137546600401403a97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302a302b3027375400844b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc00400629422b30013371e6eb8c0a8dd6181500080bc528c4cc008008c0ac005025205089981380119802002000c4cc01001000502318130009813800a0488a518a50408913232330010010062259800800c528456600266e3cdd71813800801c528c4cc008008c0a0005022204a375c604860426ea8cc008028076294101f203e407c3020302030203020002301e301e004223259800980a800c4c8c8c966002604800513300830230030058b2042375c60440026044002603a6ea800e2b3001301400189919192cc004c09000a266010604600600b1640846eb8c088004c088004c074dd5001c5660026018003132323259800981200144cc020c08c00c0162c8108dd718110009811000980e9baa0038b2036406c80d8c06cdd5001060226ea800cdd7180998081baa005370e900245900e201c180718078009807002a29344d95900301", - "hash": "d24abf6dd42140dcd979a6570e8526597702e62815c21114d849b510" + "compiledCode": "590e110101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae0039bae002488888888966003300130053754015370e90014dd2a400123009300a0019b87480012222298009807002cc03401644464b30013008300d375400314800226eb4c044c038dd5000a0183259800980418069baa0018a6103d87a8000899198008009bab3012300f375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c0180062601666028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c005011201832330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466026602200497ae08a60103d87a8000403d1330040043015003403c6eb8c03c004c048005010488c8cc00400400c896600200314c0103d87a80008992cc004c010006260106602200297ae08998018019809801201a3011001403c91111919912cc004c02c00a26466446644b3001300d30153754005132598009808980b1baa001899b8898009bab301a301b301b301b301b0049bae301a30173754003488100402c9000459015180c980b1baa301930163754601c602c6ea8c064c058dd5001459014198039bac301700123375e6030602a6ea800400cc05cc06000cc054004c048dd500398089baa0038acc004c02000a266446644b3001300c0018acc004c054dd5002c00a2c80b22b3001300f0018acc004c054dd5002c00a2c80b22b300130030018acc004c054dd5002c00a2c80b22c80990132026133229800980c8014dd6180c00148966002601c602c6ea800a26464646644b30013020003899804180f80209980400100345901d180e8009bae301d003301d001301c0013017375400516405522598009807180b1baa00289919192cc004c07800a26600c603a006264b300130120018992cc004c08000626464b300130150018992cc004c08c0062660166044002013164080603c6ea800a2b3001301800189919194c004dd69812000cdd69812001cdd698120012444b300130280048074590250c090004c08c004c078dd500145901c2038301c3754002603e00316407460366ea800a2b300130150018acc004c06cdd500140162c80e22c80c9019180c9baa0018b2036301c001301c0013017375400516405491111991194c004dd6180f800cc06cdd50064dd6180f803c88c966002602c603c6ea8006264b30013017301f3754003132323232323232323232323298009bae302f0019bae302f00c9bae302f00b9bae302f0099bae302f0089817803cdd718178034c0bc0166eb8c0bc0126eb8c0bc00e6eb8c0bc0092222222222259800981d80644cc074c0e80544cc07c0184cc07c01040622c81c0605e002605c002605a00260580026056002605400260520026050002604e002604c002604a00260406ea80062c80f0c8c9660026030003168acc004c06c0062d130243021375400480f901f180f9baa001302230233023301f3754602e603e6ea8c088c07cdd5000c5901d198088011180ccc004dd5980b980f9baa3017301f3754003002a44100404d3756603e006911112cc004c060012264b30013026001899912cc004c06cc08cdd5000c4c8c8c8c96600260580051332233010001159800981098149baa0018992cc004c088c0a8dd5000c56600266e3c00c0a22b3001337109000002456600201313232330010010112259800800c528456600266e3cdd71818800801c528c4cc008008c0c800502c205e375c605c60566ea80062941029452820528a5040a51640a4604460546ea8c0b4c0a8dd5000c590281bae302b004302b0038b2052375a60540026054002605200260486ea80062c8110cc89660020030028acc004c0a0006264b30013371e6eb8c0a00052201008980f9bad302830290018a50408c60506eb0c09c00600481290250a50323300100132330010010042259800800c52f5c1132332232330010013756605200844b30010018801c4c8cc0b4dd3998169ba90053302d302a0013302d302b0014bd701980180198178011816800a056375c604a00266006006605400460500028130896600200314bd7044cc896600266e3cdd7181480100ac4cc0a0dd380119802002000c4cc0100100050241bac30270013028001409464b30013011302237540031302630233754003164084604a604c604c60446ea8c0940062c8118c8c8cc004004014896600200314bd7044cc8966002b30013375e6052604c6ea80080162646600200264660020026eacc0acc0b0c0a0dd5002112cc004006297ae0899199119198008009bab302d0042259800800c400e264660626e9ccc0c4dd4802998189817000998189817800a5eb80cc00c00cc0cc008c0c400502f1bae302900133003003302e002302c00140a844b30010018a508acc004cdc79bae302b3758605600202f14a3133002002302c0014098814a294102444cc0a0008cc0100100062660080080028120c09c004c0a0005025180d1981199ba548008cc08cdd480825eb80cc08d300103d87a80004bd704566002603600913259800980c98109baa0018cc004c094c088dd5000c88c9660026038003132323322598009816801c01a2c8150dd718150009bad302a002302a00130253754007159800980f800c4c8cc8966002605800313259800981018141baa00189919194c004dd71817800cdd69817801cdd718178012444b300130330048064590300c0bc004c0b8004c0a4dd5000c590271815800c590291bad3029001302a001302537540071598009809800c4c8c8ca60026eb8c0ac0066eb4c0ac00e6eb8c0ac00922259800981780240222c816060560026054002604a6ea800e2c811902320463023375400522323300100100322330030013002002488a60024464b3001301f0018992cc004c0b400626600a6eb0c0b00048966002005005899804181700109800981780120588b2054302837540071598009811000c4c8cc8966002605e0031330073758605c00244b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302c001302d00130283754007159800980b000c4c8c8c966002605e0051330073758605c00644b3001002803c4cc028c0c00084c004c0c400902e45902c1bae302d001302d00130283754007164098813102618131baa0028acc004cc89660020030028acc004c0ac006264b30013371e6eb8c0ac00522100899b87375a605660580029000c528204c302b3758605400300240a0814052819198008009919800800803912cc004006297ae0899199119198008009bab302c0042259800800c400e264660606e9ccc0c0dd4802998181816800998181817000a5eb80cc00c00cc0c8008c0c000502e1bae302800133003003302d002302b00140a444b30010018a5eb8226644b30013371e6eb8c0b00080622660566e9c008cc0100100062660080080028138dd618150009815800a0508acc004c04cc090dd5001c528c52820468a50408d302437540069112cc004c07c006264b3001302d0018998079816000801c5902a18141baa0068acc004c0880062646464653001302f0019bae302f0049bab302f002488966002606600913300b3758606400c44b3001002899806801912cc00400a26601c00e01b132323298009bae30390019bae30350039bae3039002488966002607a00913007303d0088b2074181c8009bac3034001303600240d113230023036003375c606800481922c8180605e002605c002605a00260506ea801a2b30013016001899191919194c004c0c00066eb8c0c00166eacc0c000e606000491112cc004c0d401626601a6eb0c0d0020896600200513300f004225980080144cc0400144c966002605a00313259800981d800c4cc048c0e80040462c81c0c0d8dd5004c5660026060003159800981b1baa009808459037459034206830343754011132323298009bae303b0019bae30370039bae303b002488966002607e00913007303f0088b2078181d8009bac3036001303800240d913230023038003375c606c00481a22c81906060002605e002605c002605a00260506ea801a2c8131026204c22c8100c8c8cc004004dd598131813804112cc004006298103d87a80008992cc004cdd78021812000c4c078cc09cc0940052f5c11330030033029002408c604e0028128cdd2a40086604666e952002330233024302530253025302530253025302530253025302137546600401603a97ae04bd704566002b300132330010010042259800800c52f5c11332259800991980080099198008009bab302a302b3027375400844b30010018a5eb82264664464660020026eacc0b001089660020031003899198181ba733030375200a66060605a00266060605c00297ae0330030033032002303000140b86eb8c0a0004cc00c00cc0b4008c0ac005029112cc00400629422b30013371e6eb8c0a8dd6181500080b4528c4cc008008c0ac005025205089981380119802002000c4cc01001000502318130009813800a0488a518a50408913232330010010072259800800c528456600266e3cdd71813800801c528c4cc008008c0a0005022204a375c604860426ea8cc00802c076294101f203e407c301f301f301f301f002301d301d0042232598009809800c4c8c8c966002604600513300830220030058b2040375c6042002604200260386ea800e2b3001301600189919192cc004c08c00a266010604400600b1640806eb8c084004c084004c070dd5001c5660026014003132323259800981180144cc020c08800c0162c8100dd718108009810800980e1baa0038b2034406880d0c068dd50010c05cc04cdd500411192cc004c03400626464b3001301c0028024590191bae301a001301637540071598009808000c4c8c96600260380050048b2032375c6034002602c6ea800e2c80a1014180a1baa002301237540066eb8c050c044dd50019b87480122c807900f18071baa001301200530113012004229344d95900301", + "hash": "e9383e3269cdbd5eae47d107bcd904614e66ab76e051fd1ed27f3f34" }, { "title": "vault/spend_withdrawal.vault.spend", @@ -309,8 +309,8 @@ } } ], - "compiledCode": "590b93010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013370e90004dc3a4005223233001001003223300300130020029ba548002460106012003370e9002244444453001300f0079807003c88c96600260120031323259800980a00140122c8088dd7180900098071baa0038acc004c02000626464b300130140028024590111bae3012001300e37540071640308060c030dd5001488c8cc00400400c896600200314c103d87a80008992cc004c010006260106602400297ae0899801801980a001201c301200140412223259800980498071baa0018a40011375a6024601e6ea800500d192cc004c024c038dd5000c530103d87a8000899198008009bab30133010375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260166602a602600497ae08a60103d87a80004045133004004301700340446eb8c044004c050005012201a32330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c00501124444466453001301137540052232598009808180a1baa0018992cc004c044c054dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c0ac0066eb8c0ac04a6eb8c0ac0466eb8c0ac0426eb8c0ac03e6eb8c0ac03a6eb8c0ac0366eb8c0ac0326eb8c0ac02e6eb4c0ac0266eb4c0ac0226eb0c0ac01e64b300130290018acc004cdc4a4008605000316898119814000a04e8b20543754605600d375a605600b375a6056009375a6056007375c6056004911111111111111112cc004c0f404a2646644b3001303700289919192cc004c10c00a26605c60840060091641006eb8c104004c104004c0f0dd5001c566002606c005132323259800982180144cc0b8c10800c0122c8200dd718208009820800981e1baa0038acc004c0c800a2646464b3001304300289981718210018024590401bae30410013041001303c37540071640e881d103a181c9baa00113303300722598008014409e264600460820066eb8c0fc00903d181e00dc5903a0c0ac004c0a8004c0a4004c0a0004c09c004c098004c094004c090004c08c004c088004c084004c080004c07c004c078004c074004c070004c06c004c058dd5000c59014192cc004c030c054dd5000c4c064c058dd5000c59014180c180c980c980a9baa30183019301537546030602a6ea80062c8098cc0180088c03e60026eacc030c054dd51806180a9baa00180152210040193015007488966002601e0071329800980c800cc064c068006602a6ea800a26464646530013756603a0033019375400d223232330010010042259800800c528456600266ebc00cc078c0880062946266004004604600280e902019ba548008cc078dd4800a5eb826eb0c07400d222259800980c801c4c8cc8966002603860406ea800a2646644b3001301f0018acc004c090dd5001c00a2c812a2b3001301e0018991919194c004dd61815800cdd71815801cdd618158012444b3001302f0048998121bac302e007225980080144cc09800c89660020051330280072259800801403e2646644b3001302f0028992cc004c0e400626605c6eb0c0e0004896600200500489980b981d00109800981d80120708b206c30343754007159800981700144c8cc896600260760031330303758607400244b300100280344cc064c0f00084c004c0f400903a4590381bae3038001303900130343754007159800981500144c8c8c96600260760051330303758607400644b300100280344cc064c0f00084c004c0f400903a4590381bae30390013039001303437540071640c8819103218189baa001130023036003303400240c913230023034003375c60640048182264600460640066eb4c0c000902e45902c0c0ac004c0a8004c0a4004c090dd5001c566002603400315980098121baa003801459025459022204440882b3001301c3021375400314a314a08100c084dd5000981218109baa0028b203e32330010013756604660486048604800e44b30010018a6103d87a80008992cc004cdd78021810800c4c068cc090c0880052f5c1133003003302600240806048002811088c966002603a003132323322598009815001c01a2c8138dd718138009bad3027002302700130223754007159800980e000c4c8cc8966002605200313259800981098129baa00189919194c004dd71816000cdd69816001cdd718160012444b3001303000480645902d0c0b0004c0ac004c098dd5000c590241814000c590261bad3026001302700130223754007159800980c000c4c8c8ca60026eb8c0a00066eb4c0a000e6eb8c0a000922259800981600240222c81486050002604e00260446ea800e2c8101020204030203754004602c660406042604460446044603c6ea8cc02cdd6181080400da5eb822b30013018003899b884800260026eacc08401a6eb8c084c088c088c088c088c088c088c078dd51919912cc004c070c080dd500144c966002603060426ea8006264b3001301e3022375400313232323232323232323232323232323232329800981c000cdd7181c0094dd7181c008cdd7181c007cc0e003a6eb8c0e00366eb8c0e00326070017375c607001530380099bae3038008981c003cdd7181c0034c0e00166eb8c0e00126070007303800248888888888888888966002609402513303f3758609204244b30010028998140078998140060998140050998140040998140030998140020acc004c10cc11cdd5001c4c8c8c8ca60026eb8c13c0066eb8c13c0126eb8c13c00e6eb8c13c009222259800982a002c5660026096609e6ea806e264b300130550018998251bac30540012259800801440c6264600460b00066eb8c15800905445905218281baa01b8b209c8b20a218278009827000982680098241baa0038b208c899180118268019bae304b002412516411c303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130233754003164084604a60446ea80062c8100c090c094c094c084dd5180c18109baa30243021375400516407c660220044603530013756602e60406ea8c05cc080dd5000c00a910100404444b3001301c30203754005132323259800981400144cc05cc09c00c4c9660026040003132598009815000c4c8c9660026046003132598009816800c4cc070c0b00040262c8150c0a0dd500145660026044003132323298009bad302e0019bad302e0039bad302e002488966002606400900e8b205e1817000981680098141baa0028b204c4098604c6ea8004c0a40062c8138c094dd50014566002603e00315980098129baa002802c59026459023204630233754003164094604c002604c00260426ea800a2c80f8dd71810980f1baa3300b00101ba4500403d159800980a001c4cc008010dd718109811181118111811181118111811180f1baa3300b00101b8998010021bae3021302230223022302230223022301e37546601600203680e101c2038180e980e800980e180e180e000980d800980b1baa00a4888966002602a005159800980d1baa006800c5901b45660026028005159800980d1baa006800c5901b45660026020005159800980d1baa006800c5901b456600266e1d20060028acc004c068dd500340062c80da2c80c1018203040603015375400b1598009805801c4c8cc89660026026602e6ea800a264b300130143018375400313232330010013758603c603e603e603e603e603e603e603e00c44b30010018a508acc004cdc79bae301f0010038a518998010011810000a03440746eb8c070c064dd5000c590171807980c1baa301b30183754005164058603260346034603460346034603460346034602c6ea8cc00cdd6180c800809980c980b1baa00630193015375401316404c80986026602800a44b3001300d301137540051323232332259800980d801c4cc028c0680104cc02800801a2c80c0c060004dd7180c001980c000980b80098091baa0028b2020229344d95900201", - "hash": "6c7125b2ad18ef0479e3874a35d0480b66ef77481688dae41f6b17fb" + "compiledCode": "591332010100229800aba4aba2aba1aba0aab9faab9eaab9dab9a9bae002488888888966003300130043754015370e90004dc3a4005223233001001003223300300130020029b87480126e952000918041804800c8c020c024c024006460106012601260126012601260120029111111114c004c044026602001322232598009806000c4c9660020030038992cc0040060090048024012264b3001301800380340150151bae0014060602a0028098c044dd50024566002601600313259800800c00e264b300100180240120090048992cc004c06000e00d00540546eb8005018180a800a02630113754009002403c8078c03cdd5001c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260126602800297ae0899801801980b0012020301400140492223259800980598081baa0018a40011375a602860226ea800500f192cc004c02cc040dd5000c530103d87a8000899198008009bab30153012375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260186602e602a00497ae08a60103d87a8000404d1330040043019003404c6eb8c04c004c058005014201e32330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260166602c602800497ae08a60103d87a80004049133004004301800340486eb8c048004c05400501324444466446530012232598009809980b9baa001899192cc00400a2b300130153019375400513259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c01a00d00680344cc89660020030088992cc004006013009804c02626644b3001001805c4c96600200300c80640320191332259800800c03a264b3001001807c03e01f00f899912cc00400602313259800800c04a02501280944cc89660020030148992cc00400602b01580ac05626644b300100180bc4c96600200301880c40620311332259800800c06a264b30010018992cc00400603913259800800c07603b01d899912cc00400603f13259800800c082041020899912cc00400604513259800800c08e0471332259800800c096264b30010018992cc004c1000062b3001337129002181f800c09e26644b3001001814c4c96600200302a81540aa26644b300100181644c96600200302d816c0b626644b3001001817c4c96600200303081840c226644b300100181944c966002003033819c0ce0671332259800800c0d6264b300100181b40da06d13259800982a001c6600203b133049014225980080144c124cc150c154c148dd501d1982a182418291baa03a33054304730523754074660a860aa60ac60ac60ac60a46ea80e8cc150c154c158c158c158c158c148dd501d1982a182a982b182b182b182b182b18291baa03a33054304630523754074660a860aa60ac60ac60ac60ac60ac60ac60ac60ac60a46ea80e8cc150c154c158c158c158c158c158c158c158c158c158c158c158c148dd501d25eb82264b300100181d40ea07503a8991801982c0021bae001416060aa004829a06e81e206e8288dd6800c0d90541828800a09e375c00260a00048288c13800504c1bad001304d002818209c304b00141246eb4004c12800a05a8258c1200050461bad001304700281520903045001410c6074607e002608800681f204e8208dd5000c09a04d0268132088304100140fc6eb0004c10000a0470234104607c00281e0dd6800981e801408103e181d800a072375a002607400501d40ec607000281b0c0e000a03701b80dc06d039181b000a068375c002606a00481b0c0cc0050311bae001303200240cc60600028170dd700098178012060302d00140ac6eb8004c0b000902d1815000a050375c00260520048150c09c0050251bae0013026002409c60480028110dd7000981180120483021001407c6eb8004c080009021180f000a038301a37540050014061001800c00600280f8566002003159800980a180c1baa0018992cc0040062d13259800800c5a2d168b44cc8966002003168992cc0040062d168b45a26644b30010018b44c966002003168b45a2d1332259800800c5a264b30010018b45a2d16899912cc0040062d13259800800c5a2d168b44cc8966002003168992cc0040062d168b45a26644b30010018b44c966002003168b45a2d1332259800800c5a264b30010018992cc0040062d13259800800c5a2d159800981b00146600200713302b375800244b3001002880e44c966002003168b45a2d1323003303a004375c00281d0c0dc00903545901e45903345a2c81b8c0d0005032181a00145a2d168b206a303200140c06eb8004c0c40090321817800a05a375c002605c0048178c0b000502a1bae001302b00240b060520028138dd700098140012052302600140906eb8004c0940090261811800a042375c00260440048118c08000501e1bae001301f0024080603a00280d8c064dd5000c5901745a2d168b203c32598009808980c1baa0018980e180c9baa0018b202e301b301c301c301837546036603860306ea8c06cc060dd5000c5901619803801118094c004dd59807180c1baa300e30183754003002a4500401d3018008980a1baa00348896600260240031329800980e000cc070c07400660306ea800e3300130193754017223232330010010042259800800c528456600266ebc00cc074c0840062946266004004604400280e101f19ba548008cc074dd4800a5eb8260306ea800e4464b30013017001899192cc004c08800a00916407c6eb8c080004c070dd5001c566002602c0031323259800981100140122c80f8dd71810000980e1baa0038b2034406860346ea800922223322323298009bab302400191192cc004c07cc08cdd5000c4c966002604060486ea800626464646464646464646464646464646464653001375a6074003375c6074025375c6074023375c6074021375c607401f375c607401d375c607401b375c6074019375c6074017375a6074013375a60740113758607400f3259800981c000c56600266e25200430370018b44c0c8c0dc0050364590391baa303a0069bad303a0059bad303a0049bad303a0039bae303a002488888888888888889660026098025132332259800982300144c8c8c96600260a400513303030510030048b209e375c60a000260a000260966ea800e2b3001304500289919192cc004c14800a26606060a200600916413c6eb8c140004c140004c12cdd5001c5660026086005132323259800982900144cc0c0c14400c0122c8278dd71828000982800098259baa0038b209241248248c120dd5000899821003912cc00400a204f13230023050003375c609c0048260c12c06e2c8248607400260720026070002606e002606c002606a00260680026066002606400260620026060002605e002605c002605a002605800260560026054002604a6ea80062c8118c966002603a60486ea800626050604a6ea80062c8118c09cc0a0c0a0c090dd51813981418121baa302730243754003164088660260044603d30013756603460486ea8c068c090dd5000c00a910100404d375860480089112cc004c07c0262646644b30013022302637540051323322598009812800c56600260546ea800e0051640ad1598009812000c4c8c8c8ca60026eb0c0c40066eb8c0c400e6eb0c0c400922259800981a80244cc0a8dd6181a003912cc00400a26605800644b3001002899817003912cc00400a01f132332259800981a80144c966002607e0031330343758607c00244b300100280244cc05cc1000084c004c10400903e45903c181d1baa0038acc004c0d000a2646644b3001304100189981b1bac30400012259800801401a266032608400426002608600482022c81f0dd7181f000981f800981d1baa0038acc004c0c800a2646464b3001304100289981b1bac30400032259800801401a266032608400426002608600482022c81f0dd7181f800981f800981d1baa0038b207040e081c0c0dcdd500089801181e001981d00120708991801181d0019bae303800240d913230023038003375a606c00481a22c819060620026060002605e00260546ea800e2b300130220018acc004c0a8dd5001c00a2c815a2c81410282050159800981118139baa0018a518a504098604e6ea8004c0a8c09cdd500145902519198008009bab3029302a302a302a0062259800800c530103d87a80008992cc004cdd78021813800c4c07ccc0a8c0a00052f5c1133003003302c00240986054002814088c9660026046003132323322598009818001c01a2c8168dd718168009bad302d002302d001302837540071598009811000c4c8cc8966002605e00313259800981398159baa00189919194c004dd71819000cdd69819001cdd718190012444b300130360048064590330c0c8004c0c4004c0b0dd5000c5902a1817000c5902c1bad302c001302d001302837540071598009810000c4c8c8ca60026eb8c0b80066eb4c0b800e6eb8c0b800922259800981900240222c8178605c002605a00260506ea800e2c8131026204c3026375400460366604c604e60506050605060486ea8cc008dd61813805810a5eb822b3001301e0098992cc004cdc42400130013756605000d375c6032604a6ea8c8cc89660026046604e6ea800a264b300130213028375400313259800981298149baa00189919191919191919191919191919191919194c004c0fc0066eb8c0fc04a6eb8c0fc0466eb8c0fc03e607e01d375c607e01b375c607e019303f00b9bae303f00a981f804cdd7181f8044c0fc01e6eb8c0fc01a607e00b375c607e009303f003981f801244444444444444444b300130510128998231bac3050021225980080144cc0a003c4cc0a00304cc0a00284cc0a00204cc0a00184cc0a00105660026094609c6ea800e2646464653001375c60ac003375c60ac009375c60ac007375c60ac00491112cc004c16c0162b300130523056375403713259800982e000c4cc144dd6182d800912cc00400a20631323002305f003375c60ba00482da2c82c8c15cdd500dc590554590580c158004c154004c150004c13cdd5001c5904d44c8c008c15000cdd7182900120a08b209c181f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a0009819800981900098188009818000981780098151baa0018b2050302c3029375400316409c603a60506ea8c078c0a0dd5181598141baa0028b204c330160032302198009bab301d30273754603a604e6ea800600548900405844b3001302330273754005132323259800981780144cc03cc0b800c4c966002604e003132598009818800c4c8c966002605400313259800981a000c4cc050c0cc0040262c8188c0bcdd500145660026052003132323298009bad30350019bad30350039bad3035002488966002607200900e8b206c181a800981a00098179baa0028b205a40b4605a6ea8004c0c00062c8170c0b0dd50014566002604c00315980098161baa002802c5902d45902a2054302a37540031640b0605a002605a00260506ea800a2c8130dd71814000d220100405113300b004375c6050605200314a08118c090dd519807800810c566002603801313300a003375c604e605060506050605060506050605060486ea8cc0080040862660140066eb8c09cc0a0c0a0c0a0c0a0c0a0c0a0c090dd519807800810a0444088811060486048002604660466046004604200844b3001301a301e375400513232323322598009814001c4cc020c09c0104cc02000801a2c8128c094004dd7181280198128009812000980f9baa0028b203a24444b300130180028acc004c074dd5003c0062c80f22b300130170028acc004c074dd5003c0062c80f22b300130150028acc004c074dd5003c0062c80f22b30013370e90030014566002603a6ea801e00316407916406c80d901b2036180c1baa0068acc004c0400062646644b30013016301a375400513259800980b980d9baa00189919198008009bac302130223022302230223022302230220062259800800c528456600266e3cdd71811000801c528c4cc008008c08c00501d2040375c603e60386ea80062c80d0c044c06cdd5180f180d9baa0028b2032301c301d301d301d301d301d301d301d30193754660086eb0c070004058c070c064dd5003980e180c1baa00a8b202c405822232598009809800c4c9660020030038992cc004006264b3001001802c4c966002003006803401a00d132598009810801c66002009008803a014803a03c375c0028108c07800501c180f0014012009004802203e301c001406860306ea80122b300130120018992cc00400600713259800800c4c9660020030058992cc00400600d006803401a264b300130210038cc004012011007402900740786eb8005021180f000a038301e0028024012009004407c603800280d0c060dd50024566002602000313259800800c00e264b30010018992cc00400600b13259800800c01a00d00680344c966002604200719800802402200e805200e80f0dd7000a042301e0014070603c005004802401200880f8c07000501a180c1baa004801202c405880b0c058dd5001980a980b0029112cc004c040c050dd5001c4c9660020030028992cc004006007003801c00e26644b3001001802c4c96600200313259800800c01e264b30010018acc004c08000a330010038cc00400601300840350084035008407500880440220108108c07800501c180f001401a00d006803203e301c00140686eb8004c06c00901c180c800a02e30153754007001404c452689b2b20041", + "hash": "86a8ac5924dbefecc653c02309f1d27cc399202db6ca51fa933c0471" }, { "title": "vault/spend_withdrawal.vault.withdraw", @@ -328,8 +328,8 @@ } } ], - "compiledCode": "590b93010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013370e90004dc3a4005223233001001003223300300130020029ba548002460106012003370e9002244444453001300f0079807003c88c96600260120031323259800980a00140122c8088dd7180900098071baa0038acc004c02000626464b300130140028024590111bae3012001300e37540071640308060c030dd5001488c8cc00400400c896600200314c103d87a80008992cc004c010006260106602400297ae0899801801980a001201c301200140412223259800980498071baa0018a40011375a6024601e6ea800500d192cc004c024c038dd5000c530103d87a8000899198008009bab30133010375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260166602a602600497ae08a60103d87a80004045133004004301700340446eb8c044004c050005012201a32330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c00501124444466453001301137540052232598009808180a1baa0018992cc004c044c054dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c0ac0066eb8c0ac04a6eb8c0ac0466eb8c0ac0426eb8c0ac03e6eb8c0ac03a6eb8c0ac0366eb8c0ac0326eb8c0ac02e6eb4c0ac0266eb4c0ac0226eb0c0ac01e64b300130290018acc004cdc4a4008605000316898119814000a04e8b20543754605600d375a605600b375a6056009375a6056007375c6056004911111111111111112cc004c0f404a2646644b3001303700289919192cc004c10c00a26605c60840060091641006eb8c104004c104004c0f0dd5001c566002606c005132323259800982180144cc0b8c10800c0122c8200dd718208009820800981e1baa0038acc004c0c800a2646464b3001304300289981718210018024590401bae30410013041001303c37540071640e881d103a181c9baa00113303300722598008014409e264600460820066eb8c0fc00903d181e00dc5903a0c0ac004c0a8004c0a4004c0a0004c09c004c098004c094004c090004c08c004c088004c084004c080004c07c004c078004c074004c070004c06c004c058dd5000c59014192cc004c030c054dd5000c4c064c058dd5000c59014180c180c980c980a9baa30183019301537546030602a6ea80062c8098cc0180088c03e60026eacc030c054dd51806180a9baa00180152210040193015007488966002601e0071329800980c800cc064c068006602a6ea800a26464646530013756603a0033019375400d223232330010010042259800800c528456600266ebc00cc078c0880062946266004004604600280e902019ba548008cc078dd4800a5eb826eb0c07400d222259800980c801c4c8cc8966002603860406ea800a2646644b3001301f0018acc004c090dd5001c00a2c812a2b3001301e0018991919194c004dd61815800cdd71815801cdd618158012444b3001302f0048998121bac302e007225980080144cc09800c89660020051330280072259800801403e2646644b3001302f0028992cc004c0e400626605c6eb0c0e0004896600200500489980b981d00109800981d80120708b206c30343754007159800981700144c8cc896600260760031330303758607400244b300100280344cc064c0f00084c004c0f400903a4590381bae3038001303900130343754007159800981500144c8c8c96600260760051330303758607400644b300100280344cc064c0f00084c004c0f400903a4590381bae30390013039001303437540071640c8819103218189baa001130023036003303400240c913230023034003375c60640048182264600460640066eb4c0c000902e45902c0c0ac004c0a8004c0a4004c090dd5001c566002603400315980098121baa003801459025459022204440882b3001301c3021375400314a314a08100c084dd5000981218109baa0028b203e32330010013756604660486048604800e44b30010018a6103d87a80008992cc004cdd78021810800c4c068cc090c0880052f5c1133003003302600240806048002811088c966002603a003132323322598009815001c01a2c8138dd718138009bad3027002302700130223754007159800980e000c4c8cc8966002605200313259800981098129baa00189919194c004dd71816000cdd69816001cdd718160012444b3001303000480645902d0c0b0004c0ac004c098dd5000c590241814000c590261bad3026001302700130223754007159800980c000c4c8c8ca60026eb8c0a00066eb4c0a000e6eb8c0a000922259800981600240222c81486050002604e00260446ea800e2c8101020204030203754004602c660406042604460446044603c6ea8cc02cdd6181080400da5eb822b30013018003899b884800260026eacc08401a6eb8c084c088c088c088c088c088c088c078dd51919912cc004c070c080dd500144c966002603060426ea8006264b3001301e3022375400313232323232323232323232323232323232329800981c000cdd7181c0094dd7181c008cdd7181c007cc0e003a6eb8c0e00366eb8c0e00326070017375c607001530380099bae3038008981c003cdd7181c0034c0e00166eb8c0e00126070007303800248888888888888888966002609402513303f3758609204244b30010028998140078998140060998140050998140040998140030998140020acc004c10cc11cdd5001c4c8c8c8ca60026eb8c13c0066eb8c13c0126eb8c13c00e6eb8c13c009222259800982a002c5660026096609e6ea806e264b300130550018998251bac30540012259800801440c6264600460b00066eb8c15800905445905218281baa01b8b209c8b20a218278009827000982680098241baa0038b208c899180118268019bae304b002412516411c303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130233754003164084604a60446ea80062c8100c090c094c094c084dd5180c18109baa30243021375400516407c660220044603530013756602e60406ea8c05cc080dd5000c00a910100404444b3001301c30203754005132323259800981400144cc05cc09c00c4c9660026040003132598009815000c4c8c9660026046003132598009816800c4cc070c0b00040262c8150c0a0dd500145660026044003132323298009bad302e0019bad302e0039bad302e002488966002606400900e8b205e1817000981680098141baa0028b204c4098604c6ea8004c0a40062c8138c094dd50014566002603e00315980098129baa002802c59026459023204630233754003164094604c002604c00260426ea800a2c80f8dd71810980f1baa3300b00101ba4500403d159800980a001c4cc008010dd718109811181118111811181118111811180f1baa3300b00101b8998010021bae3021302230223022302230223022301e37546601600203680e101c2038180e980e800980e180e180e000980d800980b1baa00a4888966002602a005159800980d1baa006800c5901b45660026028005159800980d1baa006800c5901b45660026020005159800980d1baa006800c5901b456600266e1d20060028acc004c068dd500340062c80da2c80c1018203040603015375400b1598009805801c4c8cc89660026026602e6ea800a264b300130143018375400313232330010013758603c603e603e603e603e603e603e603e00c44b30010018a508acc004cdc79bae301f0010038a518998010011810000a03440746eb8c070c064dd5000c590171807980c1baa301b30183754005164058603260346034603460346034603460346034602c6ea8cc00cdd6180c800809980c980b1baa00630193015375401316404c80986026602800a44b3001300d301137540051323232332259800980d801c4cc028c0680104cc02800801a2c80c0c060004dd7180c001980c000980b80098091baa0028b2020229344d95900201", - "hash": "6c7125b2ad18ef0479e3874a35d0480b66ef77481688dae41f6b17fb" + "compiledCode": "591332010100229800aba4aba2aba1aba0aab9faab9eaab9dab9a9bae002488888888966003300130043754015370e90004dc3a4005223233001001003223300300130020029b87480126e952000918041804800c8c020c024c024006460106012601260126012601260120029111111114c004c044026602001322232598009806000c4c9660020030038992cc0040060090048024012264b3001301800380340150151bae0014060602a0028098c044dd50024566002601600313259800800c00e264b300100180240120090048992cc004c06000e00d00540546eb8005018180a800a02630113754009002403c8078c03cdd5001c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260126602800297ae0899801801980b0012020301400140492223259800980598081baa0018a40011375a602860226ea800500f192cc004c02cc040dd5000c530103d87a8000899198008009bab30153012375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260186602e602a00497ae08a60103d87a8000404d1330040043019003404c6eb8c04c004c058005014201e32330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260166602c602800497ae08a60103d87a80004049133004004301800340486eb8c048004c05400501324444466446530012232598009809980b9baa001899192cc00400a2b300130153019375400513259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c01a00d00680344cc89660020030088992cc004006013009804c02626644b3001001805c4c96600200300c80640320191332259800800c03a264b3001001807c03e01f00f899912cc00400602313259800800c04a02501280944cc89660020030148992cc00400602b01580ac05626644b300100180bc4c96600200301880c40620311332259800800c06a264b30010018992cc00400603913259800800c07603b01d899912cc00400603f13259800800c082041020899912cc00400604513259800800c08e0471332259800800c096264b30010018992cc004c1000062b3001337129002181f800c09e26644b3001001814c4c96600200302a81540aa26644b300100181644c96600200302d816c0b626644b3001001817c4c96600200303081840c226644b300100181944c966002003033819c0ce0671332259800800c0d6264b300100181b40da06d13259800982a001c6600203b133049014225980080144c124cc150c154c148dd501d1982a182418291baa03a33054304730523754074660a860aa60ac60ac60ac60a46ea80e8cc150c154c158c158c158c158c148dd501d1982a182a982b182b182b182b182b18291baa03a33054304630523754074660a860aa60ac60ac60ac60ac60ac60ac60ac60ac60a46ea80e8cc150c154c158c158c158c158c158c158c158c158c158c158c158c148dd501d25eb82264b300100181d40ea07503a8991801982c0021bae001416060aa004829a06e81e206e8288dd6800c0d90541828800a09e375c00260a00048288c13800504c1bad001304d002818209c304b00141246eb4004c12800a05a8258c1200050461bad001304700281520903045001410c6074607e002608800681f204e8208dd5000c09a04d0268132088304100140fc6eb0004c10000a0470234104607c00281e0dd6800981e801408103e181d800a072375a002607400501d40ec607000281b0c0e000a03701b80dc06d039181b000a068375c002606a00481b0c0cc0050311bae001303200240cc60600028170dd700098178012060302d00140ac6eb8004c0b000902d1815000a050375c00260520048150c09c0050251bae0013026002409c60480028110dd7000981180120483021001407c6eb8004c080009021180f000a038301a37540050014061001800c00600280f8566002003159800980a180c1baa0018992cc0040062d13259800800c5a2d168b44cc8966002003168992cc0040062d168b45a26644b30010018b44c966002003168b45a2d1332259800800c5a264b30010018b45a2d16899912cc0040062d13259800800c5a2d168b44cc8966002003168992cc0040062d168b45a26644b30010018b44c966002003168b45a2d1332259800800c5a264b30010018992cc0040062d13259800800c5a2d159800981b00146600200713302b375800244b3001002880e44c966002003168b45a2d1323003303a004375c00281d0c0dc00903545901e45903345a2c81b8c0d0005032181a00145a2d168b206a303200140c06eb8004c0c40090321817800a05a375c002605c0048178c0b000502a1bae001302b00240b060520028138dd700098140012052302600140906eb8004c0940090261811800a042375c00260440048118c08000501e1bae001301f0024080603a00280d8c064dd5000c5901745a2d168b203c32598009808980c1baa0018980e180c9baa0018b202e301b301c301c301837546036603860306ea8c06cc060dd5000c5901619803801118094c004dd59807180c1baa300e30183754003002a4500401d3018008980a1baa00348896600260240031329800980e000cc070c07400660306ea800e3300130193754017223232330010010042259800800c528456600266ebc00cc074c0840062946266004004604400280e101f19ba548008cc074dd4800a5eb8260306ea800e4464b30013017001899192cc004c08800a00916407c6eb8c080004c070dd5001c566002602c0031323259800981100140122c80f8dd71810000980e1baa0038b2034406860346ea800922223322323298009bab302400191192cc004c07cc08cdd5000c4c966002604060486ea800626464646464646464646464646464646464653001375a6074003375c6074025375c6074023375c6074021375c607401f375c607401d375c607401b375c6074019375c6074017375a6074013375a60740113758607400f3259800981c000c56600266e25200430370018b44c0c8c0dc0050364590391baa303a0069bad303a0059bad303a0049bad303a0039bae303a002488888888888888889660026098025132332259800982300144c8c8c96600260a400513303030510030048b209e375c60a000260a000260966ea800e2b3001304500289919192cc004c14800a26606060a200600916413c6eb8c140004c140004c12cdd5001c5660026086005132323259800982900144cc0c0c14400c0122c8278dd71828000982800098259baa0038b209241248248c120dd5000899821003912cc00400a204f13230023050003375c609c0048260c12c06e2c8248607400260720026070002606e002606c002606a00260680026066002606400260620026060002605e002605c002605a002605800260560026054002604a6ea80062c8118c966002603a60486ea800626050604a6ea80062c8118c09cc0a0c0a0c090dd51813981418121baa302730243754003164088660260044603d30013756603460486ea8c068c090dd5000c00a910100404d375860480089112cc004c07c0262646644b30013022302637540051323322598009812800c56600260546ea800e0051640ad1598009812000c4c8c8c8ca60026eb0c0c40066eb8c0c400e6eb0c0c400922259800981a80244cc0a8dd6181a003912cc00400a26605800644b3001002899817003912cc00400a01f132332259800981a80144c966002607e0031330343758607c00244b300100280244cc05cc1000084c004c10400903e45903c181d1baa0038acc004c0d000a2646644b3001304100189981b1bac30400012259800801401a266032608400426002608600482022c81f0dd7181f000981f800981d1baa0038acc004c0c800a2646464b3001304100289981b1bac30400032259800801401a266032608400426002608600482022c81f0dd7181f800981f800981d1baa0038b207040e081c0c0dcdd500089801181e001981d00120708991801181d0019bae303800240d913230023038003375a606c00481a22c819060620026060002605e00260546ea800e2b300130220018acc004c0a8dd5001c00a2c815a2c81410282050159800981118139baa0018a518a504098604e6ea8004c0a8c09cdd500145902519198008009bab3029302a302a302a0062259800800c530103d87a80008992cc004cdd78021813800c4c07ccc0a8c0a00052f5c1133003003302c00240986054002814088c9660026046003132323322598009818001c01a2c8168dd718168009bad302d002302d001302837540071598009811000c4c8cc8966002605e00313259800981398159baa00189919194c004dd71819000cdd69819001cdd718190012444b300130360048064590330c0c8004c0c4004c0b0dd5000c5902a1817000c5902c1bad302c001302d001302837540071598009810000c4c8c8ca60026eb8c0b80066eb4c0b800e6eb8c0b800922259800981900240222c8178605c002605a00260506ea800e2c8131026204c3026375400460366604c604e60506050605060486ea8cc008dd61813805810a5eb822b3001301e0098992cc004cdc42400130013756605000d375c6032604a6ea8c8cc89660026046604e6ea800a264b300130213028375400313259800981298149baa00189919191919191919191919191919191919194c004c0fc0066eb8c0fc04a6eb8c0fc0466eb8c0fc03e607e01d375c607e01b375c607e019303f00b9bae303f00a981f804cdd7181f8044c0fc01e6eb8c0fc01a607e00b375c607e009303f003981f801244444444444444444b300130510128998231bac3050021225980080144cc0a003c4cc0a00304cc0a00284cc0a00204cc0a00184cc0a00105660026094609c6ea800e2646464653001375c60ac003375c60ac009375c60ac007375c60ac00491112cc004c16c0162b300130523056375403713259800982e000c4cc144dd6182d800912cc00400a20631323002305f003375c60ba00482da2c82c8c15cdd500dc590554590580c158004c154004c150004c13cdd5001c5904d44c8c008c15000cdd7182900120a08b209c181f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a0009819800981900098188009818000981780098151baa0018b2050302c3029375400316409c603a60506ea8c078c0a0dd5181598141baa0028b204c330160032302198009bab301d30273754603a604e6ea800600548900405844b3001302330273754005132323259800981780144cc03cc0b800c4c966002604e003132598009818800c4c8c966002605400313259800981a000c4cc050c0cc0040262c8188c0bcdd500145660026052003132323298009bad30350019bad30350039bad3035002488966002607200900e8b206c181a800981a00098179baa0028b205a40b4605a6ea8004c0c00062c8170c0b0dd50014566002604c00315980098161baa002802c5902d45902a2054302a37540031640b0605a002605a00260506ea800a2c8130dd71814000d220100405113300b004375c6050605200314a08118c090dd519807800810c566002603801313300a003375c604e605060506050605060506050605060486ea8cc0080040862660140066eb8c09cc0a0c0a0c0a0c0a0c0a0c0a0c090dd519807800810a0444088811060486048002604660466046004604200844b3001301a301e375400513232323322598009814001c4cc020c09c0104cc02000801a2c8128c094004dd7181280198128009812000980f9baa0028b203a24444b300130180028acc004c074dd5003c0062c80f22b300130170028acc004c074dd5003c0062c80f22b300130150028acc004c074dd5003c0062c80f22b30013370e90030014566002603a6ea801e00316407916406c80d901b2036180c1baa0068acc004c0400062646644b30013016301a375400513259800980b980d9baa00189919198008009bac302130223022302230223022302230220062259800800c528456600266e3cdd71811000801c528c4cc008008c08c00501d2040375c603e60386ea80062c80d0c044c06cdd5180f180d9baa0028b2032301c301d301d301d301d301d301d301d30193754660086eb0c070004058c070c064dd5003980e180c1baa00a8b202c405822232598009809800c4c9660020030038992cc004006264b3001001802c4c966002003006803401a00d132598009810801c66002009008803a014803a03c375c0028108c07800501c180f0014012009004802203e301c001406860306ea80122b300130120018992cc00400600713259800800c4c9660020030058992cc00400600d006803401a264b300130210038cc004012011007402900740786eb8005021180f000a038301e0028024012009004407c603800280d0c060dd50024566002602000313259800800c00e264b30010018992cc00400600b13259800800c01a00d00680344c966002604200719800802402200e805200e80f0dd7000a042301e0014070603c005004802401200880f8c07000501a180c1baa004801202c405880b0c058dd5001980a980b0029112cc004c040c050dd5001c4c9660020030028992cc004006007003801c00e26644b3001001802c4c96600200313259800800c01e264b30010018acc004c08000a330010038cc00400601300840350084035008407500880440220108108c07800501c180f001401a00d006803203e301c00140686eb8004c06c00901c180c800a02e30153754007001404c452689b2b20041", + "hash": "86a8ac5924dbefecc653c02309f1d27cc399202db6ca51fa933c0471" }, { "title": "vault/spend_withdrawal.vault.else", @@ -344,8 +344,8 @@ } } ], - "compiledCode": "590b93010100229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013370e90004dc3a4005223233001001003223300300130020029ba548002460106012003370e9002244444453001300f0079807003c88c96600260120031323259800980a00140122c8088dd7180900098071baa0038acc004c02000626464b300130140028024590111bae3012001300e37540071640308060c030dd5001488c8cc00400400c896600200314c103d87a80008992cc004c010006260106602400297ae0899801801980a001201c301200140412223259800980498071baa0018a40011375a6024601e6ea800500d192cc004c024c038dd5000c530103d87a8000899198008009bab30133010375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260166602a602600497ae08a60103d87a80004045133004004301700340446eb8c044004c050005012201a32330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c0180062601466028602400497ae08a60103d87a80004041133004004301600340406eb8c040004c04c00501124444466453001301137540052232598009808180a1baa0018992cc004c044c054dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c0ac0066eb8c0ac04a6eb8c0ac0466eb8c0ac0426eb8c0ac03e6eb8c0ac03a6eb8c0ac0366eb8c0ac0326eb8c0ac02e6eb4c0ac0266eb4c0ac0226eb0c0ac01e64b300130290018acc004cdc4a4008605000316898119814000a04e8b20543754605600d375a605600b375a6056009375a6056007375c6056004911111111111111112cc004c0f404a2646644b3001303700289919192cc004c10c00a26605c60840060091641006eb8c104004c104004c0f0dd5001c566002606c005132323259800982180144cc0b8c10800c0122c8200dd718208009820800981e1baa0038acc004c0c800a2646464b3001304300289981718210018024590401bae30410013041001303c37540071640e881d103a181c9baa00113303300722598008014409e264600460820066eb8c0fc00903d181e00dc5903a0c0ac004c0a8004c0a4004c0a0004c09c004c098004c094004c090004c08c004c088004c084004c080004c07c004c078004c074004c070004c06c004c058dd5000c59014192cc004c030c054dd5000c4c064c058dd5000c59014180c180c980c980a9baa30183019301537546030602a6ea80062c8098cc0180088c03e60026eacc030c054dd51806180a9baa00180152210040193015007488966002601e0071329800980c800cc064c068006602a6ea800a26464646530013756603a0033019375400d223232330010010042259800800c528456600266ebc00cc078c0880062946266004004604600280e902019ba548008cc078dd4800a5eb826eb0c07400d222259800980c801c4c8cc8966002603860406ea800a2646644b3001301f0018acc004c090dd5001c00a2c812a2b3001301e0018991919194c004dd61815800cdd71815801cdd618158012444b3001302f0048998121bac302e007225980080144cc09800c89660020051330280072259800801403e2646644b3001302f0028992cc004c0e400626605c6eb0c0e0004896600200500489980b981d00109800981d80120708b206c30343754007159800981700144c8cc896600260760031330303758607400244b300100280344cc064c0f00084c004c0f400903a4590381bae3038001303900130343754007159800981500144c8c8c96600260760051330303758607400644b300100280344cc064c0f00084c004c0f400903a4590381bae30390013039001303437540071640c8819103218189baa001130023036003303400240c913230023034003375c60640048182264600460640066eb4c0c000902e45902c0c0ac004c0a8004c0a4004c090dd5001c566002603400315980098121baa003801459025459022204440882b3001301c3021375400314a314a08100c084dd5000981218109baa0028b203e32330010013756604660486048604800e44b30010018a6103d87a80008992cc004cdd78021810800c4c068cc090c0880052f5c1133003003302600240806048002811088c966002603a003132323322598009815001c01a2c8138dd718138009bad3027002302700130223754007159800980e000c4c8cc8966002605200313259800981098129baa00189919194c004dd71816000cdd69816001cdd718160012444b3001303000480645902d0c0b0004c0ac004c098dd5000c590241814000c590261bad3026001302700130223754007159800980c000c4c8c8ca60026eb8c0a00066eb4c0a000e6eb8c0a000922259800981600240222c81486050002604e00260446ea800e2c8101020204030203754004602c660406042604460446044603c6ea8cc02cdd6181080400da5eb822b30013018003899b884800260026eacc08401a6eb8c084c088c088c088c088c088c088c078dd51919912cc004c070c080dd500144c966002603060426ea8006264b3001301e3022375400313232323232323232323232323232323232329800981c000cdd7181c0094dd7181c008cdd7181c007cc0e003a6eb8c0e00366eb8c0e00326070017375c607001530380099bae3038008981c003cdd7181c0034c0e00166eb8c0e00126070007303800248888888888888888966002609402513303f3758609204244b30010028998140078998140060998140050998140040998140030998140020acc004c10cc11cdd5001c4c8c8c8ca60026eb8c13c0066eb8c13c0126eb8c13c00e6eb8c13c009222259800982a002c5660026096609e6ea806e264b300130550018998251bac30540012259800801440c6264600460b00066eb8c15800905445905218281baa01b8b209c8b20a218278009827000982680098241baa0038b208c899180118268019bae304b002412516411c303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130233754003164084604a60446ea80062c8100c090c094c094c084dd5180c18109baa30243021375400516407c660220044603530013756602e60406ea8c05cc080dd5000c00a910100404444b3001301c30203754005132323259800981400144cc05cc09c00c4c9660026040003132598009815000c4c8c9660026046003132598009816800c4cc070c0b00040262c8150c0a0dd500145660026044003132323298009bad302e0019bad302e0039bad302e002488966002606400900e8b205e1817000981680098141baa0028b204c4098604c6ea8004c0a40062c8138c094dd50014566002603e00315980098129baa002802c59026459023204630233754003164094604c002604c00260426ea800a2c80f8dd71810980f1baa3300b00101ba4500403d159800980a001c4cc008010dd718109811181118111811181118111811180f1baa3300b00101b8998010021bae3021302230223022302230223022301e37546601600203680e101c2038180e980e800980e180e180e000980d800980b1baa00a4888966002602a005159800980d1baa006800c5901b45660026028005159800980d1baa006800c5901b45660026020005159800980d1baa006800c5901b456600266e1d20060028acc004c068dd500340062c80da2c80c1018203040603015375400b1598009805801c4c8cc89660026026602e6ea800a264b300130143018375400313232330010013758603c603e603e603e603e603e603e603e00c44b30010018a508acc004cdc79bae301f0010038a518998010011810000a03440746eb8c070c064dd5000c590171807980c1baa301b30183754005164058603260346034603460346034603460346034602c6ea8cc00cdd6180c800809980c980b1baa00630193015375401316404c80986026602800a44b3001300d301137540051323232332259800980d801c4cc028c0680104cc02800801a2c80c0c060004dd7180c001980c000980b80098091baa0028b2020229344d95900201", - "hash": "6c7125b2ad18ef0479e3874a35d0480b66ef77481688dae41f6b17fb" + "compiledCode": "591332010100229800aba4aba2aba1aba0aab9faab9eaab9dab9a9bae002488888888966003300130043754015370e90004dc3a4005223233001001003223300300130020029b87480126e952000918041804800c8c020c024c024006460106012601260126012601260120029111111114c004c044026602001322232598009806000c4c9660020030038992cc0040060090048024012264b3001301800380340150151bae0014060602a0028098c044dd50024566002601600313259800800c00e264b300100180240120090048992cc004c06000e00d00540546eb8005018180a800a02630113754009002403c8078c03cdd5001c88c8cc00400400c896600200314c0103d87a80008992cc004c010006260126602800297ae0899801801980b0012020301400140492223259800980598081baa0018a40011375a602860226ea800500f192cc004c02cc040dd5000c530103d87a8000899198008009bab30153012375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260186602e602a00497ae08a60103d87a8000404d1330040043019003404c6eb8c04c004c058005014201e32330010010042259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260166602c602800497ae08a60103d87a80004049133004004301800340486eb8c048004c05400501324444466446530012232598009809980b9baa001899192cc00400a2b300130153019375400513259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c01a00d00680344cc89660020030088992cc004006013009804c02626644b3001001805c4c96600200300c80640320191332259800800c03a264b3001001807c03e01f00f899912cc00400602313259800800c04a02501280944cc89660020030148992cc00400602b01580ac05626644b300100180bc4c96600200301880c40620311332259800800c06a264b30010018992cc00400603913259800800c07603b01d899912cc00400603f13259800800c082041020899912cc00400604513259800800c08e0471332259800800c096264b30010018992cc004c1000062b3001337129002181f800c09e26644b3001001814c4c96600200302a81540aa26644b300100181644c96600200302d816c0b626644b3001001817c4c96600200303081840c226644b300100181944c966002003033819c0ce0671332259800800c0d6264b300100181b40da06d13259800982a001c6600203b133049014225980080144c124cc150c154c148dd501d1982a182418291baa03a33054304730523754074660a860aa60ac60ac60ac60a46ea80e8cc150c154c158c158c158c158c148dd501d1982a182a982b182b182b182b182b18291baa03a33054304630523754074660a860aa60ac60ac60ac60ac60ac60ac60ac60ac60a46ea80e8cc150c154c158c158c158c158c158c158c158c158c158c158c158c148dd501d25eb82264b300100181d40ea07503a8991801982c0021bae001416060aa004829a06e81e206e8288dd6800c0d90541828800a09e375c00260a00048288c13800504c1bad001304d002818209c304b00141246eb4004c12800a05a8258c1200050461bad001304700281520903045001410c6074607e002608800681f204e8208dd5000c09a04d0268132088304100140fc6eb0004c10000a0470234104607c00281e0dd6800981e801408103e181d800a072375a002607400501d40ec607000281b0c0e000a03701b80dc06d039181b000a068375c002606a00481b0c0cc0050311bae001303200240cc60600028170dd700098178012060302d00140ac6eb8004c0b000902d1815000a050375c00260520048150c09c0050251bae0013026002409c60480028110dd7000981180120483021001407c6eb8004c080009021180f000a038301a37540050014061001800c00600280f8566002003159800980a180c1baa0018992cc0040062d13259800800c5a2d168b44cc8966002003168992cc0040062d168b45a26644b30010018b44c966002003168b45a2d1332259800800c5a264b30010018b45a2d16899912cc0040062d13259800800c5a2d168b44cc8966002003168992cc0040062d168b45a26644b30010018b44c966002003168b45a2d1332259800800c5a264b30010018992cc0040062d13259800800c5a2d159800981b00146600200713302b375800244b3001002880e44c966002003168b45a2d1323003303a004375c00281d0c0dc00903545901e45903345a2c81b8c0d0005032181a00145a2d168b206a303200140c06eb8004c0c40090321817800a05a375c002605c0048178c0b000502a1bae001302b00240b060520028138dd700098140012052302600140906eb8004c0940090261811800a042375c00260440048118c08000501e1bae001301f0024080603a00280d8c064dd5000c5901745a2d168b203c32598009808980c1baa0018980e180c9baa0018b202e301b301c301c301837546036603860306ea8c06cc060dd5000c5901619803801118094c004dd59807180c1baa300e30183754003002a4500401d3018008980a1baa00348896600260240031329800980e000cc070c07400660306ea800e3300130193754017223232330010010042259800800c528456600266ebc00cc074c0840062946266004004604400280e101f19ba548008cc074dd4800a5eb8260306ea800e4464b30013017001899192cc004c08800a00916407c6eb8c080004c070dd5001c566002602c0031323259800981100140122c80f8dd71810000980e1baa0038b2034406860346ea800922223322323298009bab302400191192cc004c07cc08cdd5000c4c966002604060486ea800626464646464646464646464646464646464653001375a6074003375c6074025375c6074023375c6074021375c607401f375c607401d375c607401b375c6074019375c6074017375a6074013375a60740113758607400f3259800981c000c56600266e25200430370018b44c0c8c0dc0050364590391baa303a0069bad303a0059bad303a0049bad303a0039bae303a002488888888888888889660026098025132332259800982300144c8c8c96600260a400513303030510030048b209e375c60a000260a000260966ea800e2b3001304500289919192cc004c14800a26606060a200600916413c6eb8c140004c140004c12cdd5001c5660026086005132323259800982900144cc0c0c14400c0122c8278dd71828000982800098259baa0038b209241248248c120dd5000899821003912cc00400a204f13230023050003375c609c0048260c12c06e2c8248607400260720026070002606e002606c002606a00260680026066002606400260620026060002605e002605c002605a002605800260560026054002604a6ea80062c8118c966002603a60486ea800626050604a6ea80062c8118c09cc0a0c0a0c090dd51813981418121baa302730243754003164088660260044603d30013756603460486ea8c068c090dd5000c00a910100404d375860480089112cc004c07c0262646644b30013022302637540051323322598009812800c56600260546ea800e0051640ad1598009812000c4c8c8c8ca60026eb0c0c40066eb8c0c400e6eb0c0c400922259800981a80244cc0a8dd6181a003912cc00400a26605800644b3001002899817003912cc00400a01f132332259800981a80144c966002607e0031330343758607c00244b300100280244cc05cc1000084c004c10400903e45903c181d1baa0038acc004c0d000a2646644b3001304100189981b1bac30400012259800801401a266032608400426002608600482022c81f0dd7181f000981f800981d1baa0038acc004c0c800a2646464b3001304100289981b1bac30400032259800801401a266032608400426002608600482022c81f0dd7181f800981f800981d1baa0038b207040e081c0c0dcdd500089801181e001981d00120708991801181d0019bae303800240d913230023038003375a606c00481a22c819060620026060002605e00260546ea800e2b300130220018acc004c0a8dd5001c00a2c815a2c81410282050159800981118139baa0018a518a504098604e6ea8004c0a8c09cdd500145902519198008009bab3029302a302a302a0062259800800c530103d87a80008992cc004cdd78021813800c4c07ccc0a8c0a00052f5c1133003003302c00240986054002814088c9660026046003132323322598009818001c01a2c8168dd718168009bad302d002302d001302837540071598009811000c4c8cc8966002605e00313259800981398159baa00189919194c004dd71819000cdd69819001cdd718190012444b300130360048064590330c0c8004c0c4004c0b0dd5000c5902a1817000c5902c1bad302c001302d001302837540071598009810000c4c8c8ca60026eb8c0b80066eb4c0b800e6eb8c0b800922259800981900240222c8178605c002605a00260506ea800e2c8131026204c3026375400460366604c604e60506050605060486ea8cc008dd61813805810a5eb822b3001301e0098992cc004cdc42400130013756605000d375c6032604a6ea8c8cc89660026046604e6ea800a264b300130213028375400313259800981298149baa00189919191919191919191919191919191919194c004c0fc0066eb8c0fc04a6eb8c0fc0466eb8c0fc03e607e01d375c607e01b375c607e019303f00b9bae303f00a981f804cdd7181f8044c0fc01e6eb8c0fc01a607e00b375c607e009303f003981f801244444444444444444b300130510128998231bac3050021225980080144cc0a003c4cc0a00304cc0a00284cc0a00204cc0a00184cc0a00105660026094609c6ea800e2646464653001375c60ac003375c60ac009375c60ac007375c60ac00491112cc004c16c0162b300130523056375403713259800982e000c4cc144dd6182d800912cc00400a20631323002305f003375c60ba00482da2c82c8c15cdd500dc590554590580c158004c154004c150004c13cdd5001c5904d44c8c008c15000cdd7182900120a08b209c181f800981f000981e800981e000981d800981d000981c800981c000981b800981b000981a800981a0009819800981900098188009818000981780098151baa0018b2050302c3029375400316409c603a60506ea8c078c0a0dd5181598141baa0028b204c330160032302198009bab301d30273754603a604e6ea800600548900405844b3001302330273754005132323259800981780144cc03cc0b800c4c966002604e003132598009818800c4c8c966002605400313259800981a000c4cc050c0cc0040262c8188c0bcdd500145660026052003132323298009bad30350019bad30350039bad3035002488966002607200900e8b206c181a800981a00098179baa0028b205a40b4605a6ea8004c0c00062c8170c0b0dd50014566002604c00315980098161baa002802c5902d45902a2054302a37540031640b0605a002605a00260506ea800a2c8130dd71814000d220100405113300b004375c6050605200314a08118c090dd519807800810c566002603801313300a003375c604e605060506050605060506050605060486ea8cc0080040862660140066eb8c09cc0a0c0a0c0a0c0a0c0a0c0a0c090dd519807800810a0444088811060486048002604660466046004604200844b3001301a301e375400513232323322598009814001c4cc020c09c0104cc02000801a2c8128c094004dd7181280198128009812000980f9baa0028b203a24444b300130180028acc004c074dd5003c0062c80f22b300130170028acc004c074dd5003c0062c80f22b300130150028acc004c074dd5003c0062c80f22b30013370e90030014566002603a6ea801e00316407916406c80d901b2036180c1baa0068acc004c0400062646644b30013016301a375400513259800980b980d9baa00189919198008009bac302130223022302230223022302230220062259800800c528456600266e3cdd71811000801c528c4cc008008c08c00501d2040375c603e60386ea80062c80d0c044c06cdd5180f180d9baa0028b2032301c301d301d301d301d301d301d301d30193754660086eb0c070004058c070c064dd5003980e180c1baa00a8b202c405822232598009809800c4c9660020030038992cc004006264b3001001802c4c966002003006803401a00d132598009810801c66002009008803a014803a03c375c0028108c07800501c180f0014012009004802203e301c001406860306ea80122b300130120018992cc00400600713259800800c4c9660020030058992cc00400600d006803401a264b300130210038cc004012011007402900740786eb8005021180f000a038301e0028024012009004407c603800280d0c060dd50024566002602000313259800800c00e264b30010018992cc00400600b13259800800c01a00d00680344c966002604200719800802402200e805200e80f0dd7000a042301e0014070603c005004802401200880f8c07000501a180c1baa004801202c405880b0c058dd5001980a980b0029112cc004c040c050dd5001c4c9660020030028992cc004006007003801c00e26644b3001001802c4c96600200313259800800c01e264b30010018acc004c08000a330010038cc00400601300840350084035008407500880440220108108c07800501c180f001401a00d006803203e301c00140686eb8004c06c00901c180c800a02e30153754007001404c452689b2b20041", + "hash": "86a8ac5924dbefecc653c02309f1d27cc399202db6ca51fa933c0471" }, { "title": "vault/stake_rotation.app_vault_stake_rotation.withdraw", @@ -406,7 +406,7 @@ "datum": { "title": "datum", "schema": { - "$ref": "#/definitions/types~1VaultOracleDatum" + "$ref": "#/definitions/Data" } }, "redeemer": { @@ -429,8 +429,8 @@ } } ], - "compiledCode": "592f470101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd500224141380314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", - "hash": "3cb4b9140766c7c65d23277b7f31362e3e41b09462a692004c49ac91" + "compiledCode": "5921720101002229800aba4aba2aba1aba0aab9faab9eaab9dab9a9bae002488888888966003300130043754015230083009300930093009300930093009300930090019ba54800244646600200200644b30010018a508acc004c00cc02c00629462660040046018002803100948c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260126012003230083009300930093009300930093009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c0240064601060126012601260126012601260126012601260126012003230083009300930093009300930093009300900191804180498049804980498049804800c8c020c024c024c024c024c024006460106012601260126012003230083009300930090019180418049804800c8c020c0240066e1d20009b874800a6e1d200491191980080080191198018009801001488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804922222222222222222222229800980f00b4c07405a4602a6603a66e9520023301d375200297ae03301d4c0103d87a80004bd704888c966002601200313259800800c00e264b300100180240120090048992cc004c09400e00d00540886eb80050251811000a040301e37540091598009804000c4c9660020030038992cc0040060090048024012264b3001302500380340150221bae001409460440028100c078dd5002400901c2038301c375400691111991194c00488966002601e60466ea800e264b300100180144c966002003003801c00e0071332259800800c016264b3001001803401a00d006899912cc00400601113259800800c026013009804c4cc896600200300b8992cc00400601900c806403226644b300100180744c96600200300f807c03e01f1332259800800c046264b3001001809404a025012899912cc00400602913259800800c05602b01580ac4cc89660020030178992cc00400603101880c406226644b300100180d44c96600200313259800800c072264b300100180ec07603b1332259800800c07e264b300100181040820411332259800800c08a264b3001001811c08e26644b3001001812c4c966002003132598009825000c56600266e2520043049001813c4cc89660020030298992cc00400605502a81544cc896600200302c8992cc00400605b02d816c4cc896600200302f8992cc00400606103081844cc89660020030328992cc004006067033819c0ce26644b300100181ac4c96600200303681b40da264b3001305e0038cc00407626608402844b300100281d44c96600200303a81d40ea07513230033062004375c0028310c17c00905d40dd03a40dd05b1bad00181b20bc305b00141646eb8004c16800905b182c000a0ac375a00260ae005030416060aa0028298dd6800982a00140b50551829000a0a0375a00260a200502a4148609e0028268c0d0c124004c13800d048409d04b1baa001813409a04d026413860960028248dd60009825001408e0468258c1200050461bad001304700281020903045001410c6eb4004c11000a03a8228c1080050401821001406e03701b80da086304000140f86eb8004c0fc009040181e800a076375c002607800481e8c0e80050381bae001303900240e8606e00281a8dd7000981b001206e303400140c86eb8004c0cc0090341818800a05e375c00260600048188c0b800502c1bae001302d00240b860560028148dd7000981500120563028001409860486ea800e0028112444b3001300f3023375400713259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c01a00d00680344cc89660020030088992cc004006013009804c02626644b3001001805c4c96600200300c80640320191332259800800c03a264b3001001807c03e01f00f899912cc00400602313259800800c04a02501280944cc89660020030148992cc00400602b01580ac05626644b300100180bc4c96600200313259800800c066264b300100180d406a264b300130420038cc00401226604c00244b300100280f44c96600200301e80f407a03d13230033046004375c0028230c10c009041406d01e406d03f1bac00180d4069042181f800a07a303f00280c40620310184100607a00281d8dd7000981e001207a303a00140e06eb8004c0e400903a181b800a06a375c002606c00481b8c0d00050321bae001303300240d060620028178dd700098180012062302e00140b06eb8004c0b400902e1815800a052375c00260540048158c0a000502618121baa003800a0449812003cc080dd5001a4444b3001300f001899199119912cc004c0540062b3001302a375400f0028b20568acc004c0500062b3001302a375400f0028b20568acc004c04c0062b3001302a375400f0028b20568acc004cdc3a400c00315980098151baa00780145902b456600266e1d20080018acc004c0a8dd5003c00a2c815a2b30013370e9005000c56600260546ea801e0051640ad15980099b87480300062b3001302a375400f0028b20568acc004cdc3a401c00315980098151baa00780145902b459028205040a08141028205040a081404cc8a6002605c005302e302e302a3754605a005302e302e00199198008009bac302e0022259800800c530103d87a80008992cc004cdd7981818169baa0010078981399817800a5eb8226600600660620048158c0bc00502d2444530013032004980c18169baa30310049819001cc0c8c0c800a6eb0c0c4009222229800981b802cdd6981b002cc0dc00e606e606e606e606e00491114c004c0ec0126eb4c0e801260760053758607400337566074607600291111194c004dd71820000cdd698201820800cdd618201820982098208024dd6982000324444b3001302c304037540291323259800981698211baa0018cc004dd7182318219baa00198211baa02091192cc004c0c4006264646644b3001304e00380345904b1bae304b001375a60960046096002608c6ea800e2b3001303000189919912cc004c134006264b3001303530493754003132323298009bae30500019bad30500039bae305000248896600260a800900c8b20a21828000982780098251baa0018b2090304c0018b2094375a60940026096002608c6ea800e2b3001302f00189919194c004dd71826000cdd69826001cdd718260012444b3001305000480445904d0c130004c12c004c118dd5001c590442088411060886ea800a44646600200200644b30010018a60103d87a80008992cc004cdd78021823800c4c108cc128c1200052f5c1133003003304c00241186094002824122223259800981980244cc004c108cc128c12c0752f5c001b159800981900244cc004c108cc128c12c0612f5c001b132598009819002c4cc004c10ccc12cc1300512f5c001d15980099b8748018016266002608666096609802097ae000e8992cc004cdc3a401000d13300100b0108acc004cdc3a401400d1598009980080580844cc10c0608cdd7800981b98259baa00a8a50412115980099b874803001a264b3001304f0018992cc004cc00c03404a264b30010028cc00400a2b30013370e6eb4c104c134dd500100cc56600266e1cdd6982118269baa0020158acc004cdc39bad3043304d375400401b15980099b8f375c6088609a6ea80080422b30013370e6eb4c114c134dd5001007c56600266e252000375a6090609a6ea800a2b3001337126eb4c120c134dd50012414138031980080f528528a0968a50412d14a0825a294104b452820968a50412d14a0825a294104b400502c4006003001800a0a4159800800c66002003101d8b20548b45a2d16414514a08250c966002606a60966ea80062609e60986ea80062c8250c138c13cc13cc12cdd51827000c5904c19191980080080d112cc004006297ae0899912cc0056600266ebcc148c13cdd5001002c4c8cc004004c8cc004004dd5982a182a98289baa0042259800800c52f5c113233223233001001375660ac00844b30010018801c4c8cc168dd39982d1ba90053305a30570013305a30580014bd7019801801982e001182d000a0b0375c60a40026600600660ae00460aa0028298896600200314a115980099b8f375c60a86eb0c15000403a294626600400460aa00282790524528209a89982880119802002000c4cc01001000504d18280009828800a09c302e007899912cc0040060051598009828000c4cdc39bad304f305030503758609e0029001c00904d209a14a0646600200264660020026eacc13c06c896600200314bd7044c8cc88cc88cc008008004896600200310038991982a9ba733055375200a660aa60a4002660aa60a600297ae03300300330570023055001414c6eacc14000cdd718268009980180198290011828000a09c2259800800c52f5c1133225980099b8f375c60a2004017133050374e0046600800800313300400400141306eb0c13c004c14000504d20904120824088c8cc00400400c896600200314a31598009981a0019bc8375c60a000313300200230510018a50412c8271047208e223259800981b18251baa00189919912cc004c0e40062b3001304e37540070028b209e8acc004c0e00062b3001304e37540070028b209e8acc004c0dc0062b3001304e37540070028b209e8b209841308260566002606c60966ea80062946294104a18259baa001304e304b375400316412466008002004823104611192cc004c0d4c124dd5000c4c8cc8966002607000315980098269baa00380145904e4566002606e00313232323298009bac30540019bae30540039bac305400248896600260b000913303c375860ae00e44b300100289981f001912cc00400a26608000e44b3001002807c4c8cc89660026090005132598009831000c4cc118dd61830800912cc00400a00913301b3063002130013064002418516417c60ba6ea800e2b3001304700289919912cc004c1900062660906eb0c18c004896600200500689980e983280109800983300120c68b20c2375c60c200260c400260ba6ea800e2b3001304600289919192cc004c19000a2660906eb0c18c00c896600200500689980e983280109800983300120c68b20c2375c60c400260c400260ba6ea800e2c82d905b20b6305a37540022600460be00660ba00482da264600460ba0066eb8c16c00905944c8c008c16c00cdd6982c80120ae8b20aa182a0009829800982900098269baa0038acc004c0d80062b3001304d37540070028b209c8b2096412c8258566002606a60946ea80062946294104918251baa001304d304a3754003164120660060020048b2082304530423754608a60846ea8c0b8c108dd5000982218209baa0148b207e182000282cc004c04cc09cdd5000c4c8c9660020051980080144cc0b0c090cc0b0c0b4c0a8dd500119816180b18151baa0023302c3017302a375400466058603060546ea8008cc0b0c064c0a8dd500119816180d18151baa0023302c301b302a375400466058603860546ea8008cc0b0c074c0a8dd500125eb80cc0b2600294298103d87a8000a60103d879800040a066058603c60546ea8008cc0b0c07cc0a8dd500119816181018151baa0023302c3021302a375400466058604460546ea80092f5c10014025001800c006002817856600200319800800c4cc0ac004cc0ae600294698103d87a8000a60103d8798000409c660569810100003302b4c10100003302b4c10100003302b4c10140003302b4c10100004bd7045900745a2d168b205c302b3028375400316409860506ea8034c09cdd500298148009814981500098129baa0078acc004c0400062646644b300130130018acc004c0a0dd5002c00a2c814a2b300130120018acc004c0a0dd5002c00a2c814a2c81310260991919194c004dd59816800cdd618169817181718171817000cdd618168024c8cc004004dd61817002112cc004006297ae0899912cc004c8cc004004c8cc004004dd59819981a18181baa303330343030375400844b30010018a5eb82264664464660020026eacc0d4010896600200310038991981c9ba733039375200a66072606c00266072606e00297ae033003003303b002303900140dc6eb8c0c4004cc00c00cc0d8008c0d0005032112cc00400629422b30013371e6eb8c0ccdd61819800816c528c4cc008008c0d000502e206289981800119802002000c4cc01001000502c18178009818000a05a9bac302d00248888966002606600513259800980c98179baa00189919912cc004c078c0c8dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026090003375c6090025375c6090023375c609001f304800e9bae304800d9bae304800c9824005cdd718240054c1200266eb8c120022609000f375c609000d30480059bae30480049824001cc1200092222222222222222259800982d00944cc0f8dd6182c810912cc00400a26604e01e26604e01826604e01426604e01026604e00c26604e0082b300130433057375400713232323298009bae305f0019bae305f0049bae305f0039bae305f002488896600260c800b1598009825982f9baa01b8992cc004c1940062660926eb0c190004896600200513322329800912cc004c14cc19cdd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1f40066eb8c1f404a6eb8c1f40466eb8c1f40426eb8c1f403e6eb8c1f403a6eb8c1f40366eb8c1f40326eb8c1f402e6eb4c1f40266eb4c1f40226eb0c1f401e64b3001307b0018acc004cdc4a400860f40031689832983d000a0f28b20f8375460fa00d375a60fa00b375a60fa009375a60fa007375c60fa004911111111111111112cc004c23c0404a26604c611c020362660e600c44b300100281344c8c008c2480400cdd7184800801211c028b211802183e800983e000983d800983d000983c800983c000983b800983b000983a800983a000983980098390009838800983800098378009837000983680098341baa0028b20cc983498351835183518351835183518351835183518351835183518351835183518351835001cdd71834801a444b300130543068375408d13298009bac306d0019bac306d306e00199912cc0040060051598009838000c4c8c96600266e3cdd71838801024c56600266e3cdd71838800a441008982b9bad307130720018a5041b114a08360c1c4004dd61837800c00906d20da14a0646600200208244b30010018a5eb82264664464660020026eacc1c0010896600200310038991983a1ba733074375200a660e860e2002660e860e400297ae0330030033076002307400141c86eb8c1b0004cc00c00cc1c4008c1bc00506d4cc18c0f88cdd7983718359baa001073488896600260e4007132330090011598009839802c4c96600260b660de6ea800626464646464646464653001375860f8003375c60f8013375c60f8011375c60f800f375c60f800d375c60f800b375c60f8009375c60f8006911111112cc004c214040262660386108020142660d201044b30010028acc00405a2b30010178acc0056600266e3cdd71843009841809baa015080018acc004c1b8dd6983b9841809baa0158acc004c1b8dd6983c1841809baa0158acc004c1b8dd6983c9841809baa0158acc004cdc79bae307a308301375402a9101200000000000000000000000000000000000000000000000000000000000000000008acc004c1b8dd6983d9841809baa0158acc004cdc4a40006eb4c1f8c20c04dd500ac4cdc49bad307e308301375402a90504e00c5282102028a5042040514a084080a29410810145282102028a5042040514a084080a2b30013233001001329800800cdd6183c1842809baa0179bac308801308501375403c80088896600200514bd70456600200314bd7044cc22406600266e3cde41bae308a01002375c6114020034c0103d87a8000a60103d879800042140530010039845808014c22c0400500321100242200444b30010018a518acc004c1bcc21004dd5184400800c4cc008008c22404006294108301210c028acc004cdc79bae308601308301375402a6eb8c21804c20c04dd500a456600266e3cdd718379841809baa015375c60de6106026ea80522b30013371e6eb8c1c0c20c04dd500a9bae3070308301375402915980099b8f375c60e26106026ea8054dd718389841809baa0148acc004cdc79bae3072308301375402a6eb8c1c8c20c04dd500a456600266e3cdd718399841809baa015375c60e66106026ea80522b30013371e6eb8c1d0c20c04dd500a9bae3074308301375402915980099baf3075308301375402a610c02610e02610e02610e02610e02610e02610e02610e026106026ea8052266ebcc1d8c20c04dd500a983a9841809baa0148a5042040514a084080a29410810145282102028a5042040514a084080a29410810145282102028a5042040514a084080a294108101452821020289918011844008019bae30860100242100516420804307c001307b001307a00130790013078001307700130760013075001307037540031641b864b30013059306f375400313073307037540031641b860e460e660e660de6ea8c1c80162c8380c96600260b060dc6ea8006260e460de6ea80062c8368c1c4c1c8c1c8c1b8dd51838801c5906f0c8cc0040040f0896600200314bd7081018000810180008101800044cc8966002b30013375e60e060da6ea8008c14412226644b30010018cc0040062946004826a00500280140090740a503259800982b98369baa0018983898371baa0018b20d8307030713071306d375400514a0835a2660de6e9ccc1bc008dd61838000998379838183880099837983818389838800a5eb822b30015980099baf3070306d375400460a20911332259800800c6600200314a30024139002801400a00483a0528192cc004c15cc1b4dd5000c4c1c4c1b8dd5000c5906c18381838983898369baa0028a5041ad13306f30700013306f374e660de0046eb0c1c0c1c4004cc1bcc1c0c1c4c1c40052f5c113306f30700013306f307030710013306f374e660de0046eb0c1c0c1c4c1c40052f5c0835906b1837000998010011837800a0d889919912cc004c1c00062646600e00226464b300130730058992cc004c16cc1bcdd5000c4c96600260b860e06ea80062b3001332259800800c00a2b30013077001899192cc004cdc79bae30780020508acc004cdc79bae307800148900899b87375a60f060f20029001c52820e68a5041cc60f00026eb0c1d800600483a10740a5032330010010482259800800c52f5c113233223233001001375660ee00844b30010018801c4c8cc1ecdd39983d9ba90053307b30780013307b30790014bd7019801801983e801183d800a0f2375c60e60026600600660f000460ec00283a22b3001305c375a60e800715980099b8f325980099b87371a0029020440062c8380dd7183a183a983a983a801a45200000000000000000000000000000000000000000000000000000000000000000008acc004cc160118dd7183a18389baa00189982c023004c52820de8a5041bd14a0837a294106f45906f182e18381baa3073307037540031641b860e40051641c060e460e460e460e460e400260e260e260e260e260e260e260e260e260da6ea8004c96600260ac60d86ea8006260e060da6ea80062c8358c1bcc1c0c1c0c1b0dd51837983818361baa306f0018b20da375860da0026eb0c1b4c1b8004c8cc0040040f8896600200314bd709018000810180008101800044cc8966002b30013375e60e060da6ea8c164c1b4dd5001182882444cc896600200319800800c528c00904d400a00500280120e814a064b30013057306d375400313071306e37540031641b060e060e260e260da6ea8c1c0c1c4c1b4dd5001452820d68998379ba73306f002375860e0002660de60e060e2002660de60e060e260e200297ae08acc0056600266ebcc1c0c1b4dd5182c98369baa0023051048899912cc004006330010018a51801209c801400a00500241d02940c96600260ae60da6ea8006260e260dc6ea80062c8360c1c0c1c4c1c4c1b4dd51838183898369baa0028a5041ad13306f30700013306f374e660de0046eb0c1c0c1c4004cc1bcc1c0c1c4c1c40052f5c113306f30700013306f307030710013306f374e660de0046eb0c1c0c1c4c1c40052f5c0835906b1837000998010011837800a0d8419c2232598009829800c4c8c8c96600260de005133007306e0030058b20d8375c60da00260da00260d06ea800e2b3001305200189919192cc004c1bc00a26600e60dc00600b1641b06eb8c1b4004c1b4004c1a0dd5001c56600260a2003132323259800983780144cc01cc1b800c0162c8360dd71836800983680098341baa0038b20cc41988330c198dd500118319baa0312259800982818321baa002899191919912cc004c1b800e26607460da00826607400400d1641ac60d60026eb8c1ac00cc1ac004c1a8004c194dd500145906344c8c008c1a000cdd7183300120c88b20c430603754037164179164184305f001305e001305d001305837540071641591323002305d003375c60b600482ca2c82b86090002608e002608c002608a00260880026086002608400260820026080002607e002607c002607a0026078002607600260740026072002607000260666ea80062c81888966002603c60646ea800a2646464b3001303a002899803181c8018992cc004c088006264b3001303c001899192cc004c094006264b3001303f001899805981f000804c5903c181d1baa0028acc004c09000626464653001375a6080003375a6080007375a60800049112cc004c11001201d1641043040001303f001303a37540051640e081c0c0e0dd5000981d800c59039181b9baa0028acc004c0840062b3001303737540050058b20708b206a40d4606a6ea80062c81b8c0e0004c0e0004c0ccdd5001459031181a18189baa002223259800980f000c4c8c96600260720050048b206c375c606e00260666ea800e2b3001301d001899192cc004c0e400a0091640d86eb8c0dc004c0ccdd5001c590312062303137540051640b86038605e6ea8c06cc0bcdd518190014590300c0b4c0b4004c0b0004c0ac004c098dd500598129baa003375c6050604a6ea801e2c81190230888c966002601e00313259800800c00e264b30010018992cc00400600b13259800800c01a00d00680344c966002605a00719800802402200e805200e8150dd7000a05a302a00140a0605400500480240120088158c0a000502618121baa0048acc004c038006264b3001001801c4c96600200313259800800c016264b3001001803401a00d0068992cc004c0b400e33001004804401d00a401d02a1bae00140b460540028140c0a800a009004802401102b1814000a04c302437540091598009806800c4c9660020030038992cc004006264b3001001802c4c966002003006803401a00d132598009816801c66002009008803a014803a054375c0028168c0a80050281815001401200900480220563028001409860486ea8012004811102220443022375400660426044008444b3001300c3020375400713259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c4c9660020030078992cc0040062b3001302c0028cc00400e33001001804c02100b402100b40210294022011008804205a302a00140a06054005006803401a00c8158c0a00050261bae001302700240a0604a0028118c084dd5001c00501f1149a26cac80101", + "hash": "5b12d3d43edd38c4a7524769bc2bf85aaf1855d63d959915c76d2e31" }, { "title": "vault_oracle/spend_mint.vault_oracle.mint", @@ -454,8 +454,8 @@ } } ], - "compiledCode": "592f470101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd500224141380314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", - "hash": "3cb4b9140766c7c65d23277b7f31362e3e41b09462a692004c49ac91" + "compiledCode": "5921720101002229800aba4aba2aba1aba0aab9faab9eaab9dab9a9bae002488888888966003300130043754015230083009300930093009300930093009300930090019ba54800244646600200200644b30010018a508acc004c00cc02c00629462660040046018002803100948c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260126012003230083009300930093009300930093009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c0240064601060126012601260126012601260126012601260126012003230083009300930093009300930093009300900191804180498049804980498049804800c8c020c024c024c024c024c024006460106012601260126012003230083009300930090019180418049804800c8c020c0240066e1d20009b874800a6e1d200491191980080080191198018009801001488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804922222222222222222222229800980f00b4c07405a4602a6603a66e9520023301d375200297ae03301d4c0103d87a80004bd704888c966002601200313259800800c00e264b300100180240120090048992cc004c09400e00d00540886eb80050251811000a040301e37540091598009804000c4c9660020030038992cc0040060090048024012264b3001302500380340150221bae001409460440028100c078dd5002400901c2038301c375400691111991194c00488966002601e60466ea800e264b300100180144c966002003003801c00e0071332259800800c016264b3001001803401a00d006899912cc00400601113259800800c026013009804c4cc896600200300b8992cc00400601900c806403226644b300100180744c96600200300f807c03e01f1332259800800c046264b3001001809404a025012899912cc00400602913259800800c05602b01580ac4cc89660020030178992cc00400603101880c406226644b300100180d44c96600200313259800800c072264b300100180ec07603b1332259800800c07e264b300100181040820411332259800800c08a264b3001001811c08e26644b3001001812c4c966002003132598009825000c56600266e2520043049001813c4cc89660020030298992cc00400605502a81544cc896600200302c8992cc00400605b02d816c4cc896600200302f8992cc00400606103081844cc89660020030328992cc004006067033819c0ce26644b300100181ac4c96600200303681b40da264b3001305e0038cc00407626608402844b300100281d44c96600200303a81d40ea07513230033062004375c0028310c17c00905d40dd03a40dd05b1bad00181b20bc305b00141646eb8004c16800905b182c000a0ac375a00260ae005030416060aa0028298dd6800982a00140b50551829000a0a0375a00260a200502a4148609e0028268c0d0c124004c13800d048409d04b1baa001813409a04d026413860960028248dd60009825001408e0468258c1200050461bad001304700281020903045001410c6eb4004c11000a03a8228c1080050401821001406e03701b80da086304000140f86eb8004c0fc009040181e800a076375c002607800481e8c0e80050381bae001303900240e8606e00281a8dd7000981b001206e303400140c86eb8004c0cc0090341818800a05e375c00260600048188c0b800502c1bae001302d00240b860560028148dd7000981500120563028001409860486ea800e0028112444b3001300f3023375400713259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c01a00d00680344cc89660020030088992cc004006013009804c02626644b3001001805c4c96600200300c80640320191332259800800c03a264b3001001807c03e01f00f899912cc00400602313259800800c04a02501280944cc89660020030148992cc00400602b01580ac05626644b300100180bc4c96600200313259800800c066264b300100180d406a264b300130420038cc00401226604c00244b300100280f44c96600200301e80f407a03d13230033046004375c0028230c10c009041406d01e406d03f1bac00180d4069042181f800a07a303f00280c40620310184100607a00281d8dd7000981e001207a303a00140e06eb8004c0e400903a181b800a06a375c002606c00481b8c0d00050321bae001303300240d060620028178dd700098180012062302e00140b06eb8004c0b400902e1815800a052375c00260540048158c0a000502618121baa003800a0449812003cc080dd5001a4444b3001300f001899199119912cc004c0540062b3001302a375400f0028b20568acc004c0500062b3001302a375400f0028b20568acc004c04c0062b3001302a375400f0028b20568acc004cdc3a400c00315980098151baa00780145902b456600266e1d20080018acc004c0a8dd5003c00a2c815a2b30013370e9005000c56600260546ea801e0051640ad15980099b87480300062b3001302a375400f0028b20568acc004cdc3a401c00315980098151baa00780145902b459028205040a08141028205040a081404cc8a6002605c005302e302e302a3754605a005302e302e00199198008009bac302e0022259800800c530103d87a80008992cc004cdd7981818169baa0010078981399817800a5eb8226600600660620048158c0bc00502d2444530013032004980c18169baa30310049819001cc0c8c0c800a6eb0c0c4009222229800981b802cdd6981b002cc0dc00e606e606e606e606e00491114c004c0ec0126eb4c0e801260760053758607400337566074607600291111194c004dd71820000cdd698201820800cdd618201820982098208024dd6982000324444b3001302c304037540291323259800981698211baa0018cc004dd7182318219baa00198211baa02091192cc004c0c4006264646644b3001304e00380345904b1bae304b001375a60960046096002608c6ea800e2b3001303000189919912cc004c134006264b3001303530493754003132323298009bae30500019bad30500039bae305000248896600260a800900c8b20a21828000982780098251baa0018b2090304c0018b2094375a60940026096002608c6ea800e2b3001302f00189919194c004dd71826000cdd69826001cdd718260012444b3001305000480445904d0c130004c12c004c118dd5001c590442088411060886ea800a44646600200200644b30010018a60103d87a80008992cc004cdd78021823800c4c108cc128c1200052f5c1133003003304c00241186094002824122223259800981980244cc004c108cc128c12c0752f5c001b159800981900244cc004c108cc128c12c0612f5c001b132598009819002c4cc004c10ccc12cc1300512f5c001d15980099b8748018016266002608666096609802097ae000e8992cc004cdc3a401000d13300100b0108acc004cdc3a401400d1598009980080580844cc10c0608cdd7800981b98259baa00a8a50412115980099b874803001a264b3001304f0018992cc004cc00c03404a264b30010028cc00400a2b30013370e6eb4c104c134dd500100cc56600266e1cdd6982118269baa0020158acc004cdc39bad3043304d375400401b15980099b8f375c6088609a6ea80080422b30013370e6eb4c114c134dd5001007c56600266e252000375a6090609a6ea800a2b3001337126eb4c120c134dd50012414138031980080f528528a0968a50412d14a0825a294104b452820968a50412d14a0825a294104b400502c4006003001800a0a4159800800c66002003101d8b20548b45a2d16414514a08250c966002606a60966ea80062609e60986ea80062c8250c138c13cc13cc12cdd51827000c5904c19191980080080d112cc004006297ae0899912cc0056600266ebcc148c13cdd5001002c4c8cc004004c8cc004004dd5982a182a98289baa0042259800800c52f5c113233223233001001375660ac00844b30010018801c4c8cc168dd39982d1ba90053305a30570013305a30580014bd7019801801982e001182d000a0b0375c60a40026600600660ae00460aa0028298896600200314a115980099b8f375c60a86eb0c15000403a294626600400460aa00282790524528209a89982880119802002000c4cc01001000504d18280009828800a09c302e007899912cc0040060051598009828000c4cdc39bad304f305030503758609e0029001c00904d209a14a0646600200264660020026eacc13c06c896600200314bd7044c8cc88cc88cc008008004896600200310038991982a9ba733055375200a660aa60a4002660aa60a600297ae03300300330570023055001414c6eacc14000cdd718268009980180198290011828000a09c2259800800c52f5c1133225980099b8f375c60a2004017133050374e0046600800800313300400400141306eb0c13c004c14000504d20904120824088c8cc00400400c896600200314a31598009981a0019bc8375c60a000313300200230510018a50412c8271047208e223259800981b18251baa00189919912cc004c0e40062b3001304e37540070028b209e8acc004c0e00062b3001304e37540070028b209e8acc004c0dc0062b3001304e37540070028b209e8b209841308260566002606c60966ea80062946294104a18259baa001304e304b375400316412466008002004823104611192cc004c0d4c124dd5000c4c8cc8966002607000315980098269baa00380145904e4566002606e00313232323298009bac30540019bae30540039bac305400248896600260b000913303c375860ae00e44b300100289981f001912cc00400a26608000e44b3001002807c4c8cc89660026090005132598009831000c4cc118dd61830800912cc00400a00913301b3063002130013064002418516417c60ba6ea800e2b3001304700289919912cc004c1900062660906eb0c18c004896600200500689980e983280109800983300120c68b20c2375c60c200260c400260ba6ea800e2b3001304600289919192cc004c19000a2660906eb0c18c00c896600200500689980e983280109800983300120c68b20c2375c60c400260c400260ba6ea800e2c82d905b20b6305a37540022600460be00660ba00482da264600460ba0066eb8c16c00905944c8c008c16c00cdd6982c80120ae8b20aa182a0009829800982900098269baa0038acc004c0d80062b3001304d37540070028b209c8b2096412c8258566002606a60946ea80062946294104918251baa001304d304a3754003164120660060020048b2082304530423754608a60846ea8c0b8c108dd5000982218209baa0148b207e182000282cc004c04cc09cdd5000c4c8c9660020051980080144cc0b0c090cc0b0c0b4c0a8dd500119816180b18151baa0023302c3017302a375400466058603060546ea8008cc0b0c064c0a8dd500119816180d18151baa0023302c301b302a375400466058603860546ea8008cc0b0c074c0a8dd500125eb80cc0b2600294298103d87a8000a60103d879800040a066058603c60546ea8008cc0b0c07cc0a8dd500119816181018151baa0023302c3021302a375400466058604460546ea80092f5c10014025001800c006002817856600200319800800c4cc0ac004cc0ae600294698103d87a8000a60103d8798000409c660569810100003302b4c10100003302b4c10100003302b4c10140003302b4c10100004bd7045900745a2d168b205c302b3028375400316409860506ea8034c09cdd500298148009814981500098129baa0078acc004c0400062646644b300130130018acc004c0a0dd5002c00a2c814a2b300130120018acc004c0a0dd5002c00a2c814a2c81310260991919194c004dd59816800cdd618169817181718171817000cdd618168024c8cc004004dd61817002112cc004006297ae0899912cc004c8cc004004c8cc004004dd59819981a18181baa303330343030375400844b30010018a5eb82264664464660020026eacc0d4010896600200310038991981c9ba733039375200a66072606c00266072606e00297ae033003003303b002303900140dc6eb8c0c4004cc00c00cc0d8008c0d0005032112cc00400629422b30013371e6eb8c0ccdd61819800816c528c4cc008008c0d000502e206289981800119802002000c4cc01001000502c18178009818000a05a9bac302d00248888966002606600513259800980c98179baa00189919912cc004c078c0c8dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026090003375c6090025375c6090023375c609001f304800e9bae304800d9bae304800c9824005cdd718240054c1200266eb8c120022609000f375c609000d30480059bae30480049824001cc1200092222222222222222259800982d00944cc0f8dd6182c810912cc00400a26604e01e26604e01826604e01426604e01026604e00c26604e0082b300130433057375400713232323298009bae305f0019bae305f0049bae305f0039bae305f002488896600260c800b1598009825982f9baa01b8992cc004c1940062660926eb0c190004896600200513322329800912cc004c14cc19cdd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1f40066eb8c1f404a6eb8c1f40466eb8c1f40426eb8c1f403e6eb8c1f403a6eb8c1f40366eb8c1f40326eb8c1f402e6eb4c1f40266eb4c1f40226eb0c1f401e64b3001307b0018acc004cdc4a400860f40031689832983d000a0f28b20f8375460fa00d375a60fa00b375a60fa009375a60fa007375c60fa004911111111111111112cc004c23c0404a26604c611c020362660e600c44b300100281344c8c008c2480400cdd7184800801211c028b211802183e800983e000983d800983d000983c800983c000983b800983b000983a800983a000983980098390009838800983800098378009837000983680098341baa0028b20cc983498351835183518351835183518351835183518351835183518351835183518351835001cdd71834801a444b300130543068375408d13298009bac306d0019bac306d306e00199912cc0040060051598009838000c4c8c96600266e3cdd71838801024c56600266e3cdd71838800a441008982b9bad307130720018a5041b114a08360c1c4004dd61837800c00906d20da14a0646600200208244b30010018a5eb82264664464660020026eacc1c0010896600200310038991983a1ba733074375200a660e860e2002660e860e400297ae0330030033076002307400141c86eb8c1b0004cc00c00cc1c4008c1bc00506d4cc18c0f88cdd7983718359baa001073488896600260e4007132330090011598009839802c4c96600260b660de6ea800626464646464646464653001375860f8003375c60f8013375c60f8011375c60f800f375c60f800d375c60f800b375c60f8009375c60f8006911111112cc004c214040262660386108020142660d201044b30010028acc00405a2b30010178acc0056600266e3cdd71843009841809baa015080018acc004c1b8dd6983b9841809baa0158acc004c1b8dd6983c1841809baa0158acc004c1b8dd6983c9841809baa0158acc004cdc79bae307a308301375402a9101200000000000000000000000000000000000000000000000000000000000000000008acc004c1b8dd6983d9841809baa0158acc004cdc4a40006eb4c1f8c20c04dd500ac4cdc49bad307e308301375402a90504e00c5282102028a5042040514a084080a29410810145282102028a5042040514a084080a2b30013233001001329800800cdd6183c1842809baa0179bac308801308501375403c80088896600200514bd70456600200314bd7044cc22406600266e3cde41bae308a01002375c6114020034c0103d87a8000a60103d879800042140530010039845808014c22c0400500321100242200444b30010018a518acc004c1bcc21004dd5184400800c4cc008008c22404006294108301210c028acc004cdc79bae308601308301375402a6eb8c21804c20c04dd500a456600266e3cdd718379841809baa015375c60de6106026ea80522b30013371e6eb8c1c0c20c04dd500a9bae3070308301375402915980099b8f375c60e26106026ea8054dd718389841809baa0148acc004cdc79bae3072308301375402a6eb8c1c8c20c04dd500a456600266e3cdd718399841809baa015375c60e66106026ea80522b30013371e6eb8c1d0c20c04dd500a9bae3074308301375402915980099baf3075308301375402a610c02610e02610e02610e02610e02610e02610e02610e026106026ea8052266ebcc1d8c20c04dd500a983a9841809baa0148a5042040514a084080a29410810145282102028a5042040514a084080a29410810145282102028a5042040514a084080a294108101452821020289918011844008019bae30860100242100516420804307c001307b001307a00130790013078001307700130760013075001307037540031641b864b30013059306f375400313073307037540031641b860e460e660e660de6ea8c1c80162c8380c96600260b060dc6ea8006260e460de6ea80062c8368c1c4c1c8c1c8c1b8dd51838801c5906f0c8cc0040040f0896600200314bd7081018000810180008101800044cc8966002b30013375e60e060da6ea8008c14412226644b30010018cc0040062946004826a00500280140090740a503259800982b98369baa0018983898371baa0018b20d8307030713071306d375400514a0835a2660de6e9ccc1bc008dd61838000998379838183880099837983818389838800a5eb822b30015980099baf3070306d375400460a20911332259800800c6600200314a30024139002801400a00483a0528192cc004c15cc1b4dd5000c4c1c4c1b8dd5000c5906c18381838983898369baa0028a5041ad13306f30700013306f374e660de0046eb0c1c0c1c4004cc1bcc1c0c1c4c1c40052f5c113306f30700013306f307030710013306f374e660de0046eb0c1c0c1c4c1c40052f5c0835906b1837000998010011837800a0d889919912cc004c1c00062646600e00226464b300130730058992cc004c16cc1bcdd5000c4c96600260b860e06ea80062b3001332259800800c00a2b30013077001899192cc004cdc79bae30780020508acc004cdc79bae307800148900899b87375a60f060f20029001c52820e68a5041cc60f00026eb0c1d800600483a10740a5032330010010482259800800c52f5c113233223233001001375660ee00844b30010018801c4c8cc1ecdd39983d9ba90053307b30780013307b30790014bd7019801801983e801183d800a0f2375c60e60026600600660f000460ec00283a22b3001305c375a60e800715980099b8f325980099b87371a0029020440062c8380dd7183a183a983a983a801a45200000000000000000000000000000000000000000000000000000000000000000008acc004cc160118dd7183a18389baa00189982c023004c52820de8a5041bd14a0837a294106f45906f182e18381baa3073307037540031641b860e40051641c060e460e460e460e460e400260e260e260e260e260e260e260e260e260da6ea8004c96600260ac60d86ea8006260e060da6ea80062c8358c1bcc1c0c1c0c1b0dd51837983818361baa306f0018b20da375860da0026eb0c1b4c1b8004c8cc0040040f8896600200314bd709018000810180008101800044cc8966002b30013375e60e060da6ea8c164c1b4dd5001182882444cc896600200319800800c528c00904d400a00500280120e814a064b30013057306d375400313071306e37540031641b060e060e260e260da6ea8c1c0c1c4c1b4dd5001452820d68998379ba73306f002375860e0002660de60e060e2002660de60e060e260e200297ae08acc0056600266ebcc1c0c1b4dd5182c98369baa0023051048899912cc004006330010018a51801209c801400a00500241d02940c96600260ae60da6ea8006260e260dc6ea80062c8360c1c0c1c4c1c4c1b4dd51838183898369baa0028a5041ad13306f30700013306f374e660de0046eb0c1c0c1c4004cc1bcc1c0c1c4c1c40052f5c113306f30700013306f307030710013306f374e660de0046eb0c1c0c1c4c1c40052f5c0835906b1837000998010011837800a0d8419c2232598009829800c4c8c8c96600260de005133007306e0030058b20d8375c60da00260da00260d06ea800e2b3001305200189919192cc004c1bc00a26600e60dc00600b1641b06eb8c1b4004c1b4004c1a0dd5001c56600260a2003132323259800983780144cc01cc1b800c0162c8360dd71836800983680098341baa0038b20cc41988330c198dd500118319baa0312259800982818321baa002899191919912cc004c1b800e26607460da00826607400400d1641ac60d60026eb8c1ac00cc1ac004c1a8004c194dd500145906344c8c008c1a000cdd7183300120c88b20c430603754037164179164184305f001305e001305d001305837540071641591323002305d003375c60b600482ca2c82b86090002608e002608c002608a00260880026086002608400260820026080002607e002607c002607a0026078002607600260740026072002607000260666ea80062c81888966002603c60646ea800a2646464b3001303a002899803181c8018992cc004c088006264b3001303c001899192cc004c094006264b3001303f001899805981f000804c5903c181d1baa0028acc004c09000626464653001375a6080003375a6080007375a60800049112cc004c11001201d1641043040001303f001303a37540051640e081c0c0e0dd5000981d800c59039181b9baa0028acc004c0840062b3001303737540050058b20708b206a40d4606a6ea80062c81b8c0e0004c0e0004c0ccdd5001459031181a18189baa002223259800980f000c4c8c96600260720050048b206c375c606e00260666ea800e2b3001301d001899192cc004c0e400a0091640d86eb8c0dc004c0ccdd5001c590312062303137540051640b86038605e6ea8c06cc0bcdd518190014590300c0b4c0b4004c0b0004c0ac004c098dd500598129baa003375c6050604a6ea801e2c81190230888c966002601e00313259800800c00e264b30010018992cc00400600b13259800800c01a00d00680344c966002605a00719800802402200e805200e8150dd7000a05a302a00140a0605400500480240120088158c0a000502618121baa0048acc004c038006264b3001001801c4c96600200313259800800c016264b3001001803401a00d0068992cc004c0b400e33001004804401d00a401d02a1bae00140b460540028140c0a800a009004802401102b1814000a04c302437540091598009806800c4c9660020030038992cc004006264b3001001802c4c966002003006803401a00d132598009816801c66002009008803a014803a054375c0028168c0a80050281815001401200900480220563028001409860486ea8012004811102220443022375400660426044008444b3001300c3020375400713259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c4c9660020030078992cc0040062b3001302c0028cc00400e33001001804c02100b402100b40210294022011008804205a302a00140a06054005006803401a00c8158c0a00050261bae001302700240a0604a0028118c084dd5001c00501f1149a26cac80101", + "hash": "5b12d3d43edd38c4a7524769bc2bf85aaf1855d63d959915c76d2e31" }, { "title": "vault_oracle/spend_mint.vault_oracle.else", @@ -476,28 +476,11 @@ } } ], - "compiledCode": "592f470101002229800aba2aba1aba0aab9faab9eaab9dab9a9bae00248888888966003300130043754013230083009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260120032300830093009300930093009300930093009300930093009300930093009001918041804980498049804980498049804980498049804980498049804800cdc3a4001370e90014dc3a4009223233001001003223300300130020029ba54800244646600200200644b30010018a508acc004c00cc02c006294626600400460180028031009488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804a46010601200323008300930090019b8f4892000000000000000000000000000000000000000000000000000000000000000000048888888888888888a60026032023301801191192cc004c03400626464b3001301e00280245901b1bae301c001301837540071598009806000c4c8c966002603c0050048b2036375c603800260306ea800e2c80b1016180b1baa002918039980c19ba548008cc060dd4800a5eb80cc06130103d87a80004bd7024444664465300122598009809980e9baa00289919191919191919191919191919191919194c004dd69819800cdd718198094dd71819808cdd718198084dd71819807cdd718198074dd71819806cdd718198064dd71819805cdd69819804cdd698198044dd61819803cc966002606200315980099b8948010c0c00062d13025303000140bd1640c86ea8c0cc01a6eb4c0cc0166eb4c0cc0126eb4c0cc00e6eb8c0cc0092222222222222222259800982280944cc098c11006c4cc0cc0188966002005026899180118240019bae304600241111641083033001303200130310013030001302f001302e001302d001302c001302b001302a0013029001302800130270013026001302500130240013023001301e3754005164071301f007980d9baa003488966002602600319800980f9baa00691192cc004c05c006264646644b3001302a0038034590271bae3027001375a604e004604e00260446ea800e2b3001301600189919912cc004c0a4006264b3001301b30253754003132323298009bae302c0019bad302c0039bae302c002488966002606000900c8b205a1816000981580098131baa0018b204830280018b204c375a604c002604e00260446ea800e2b3001301500189919194c004dd71814000cdd69814001cdd718140012444b3001302c0048044590290c0a0004c09c004c088dd5001c590202040408060406ea800a6e1d20089b874802a6e1d200c980f1baa0024888888cc88c966002603a0091323232323298009bac30300019bab30300049bae30300039bac30300024888966002606a00b1330163034009133023003225980080144cc09400c89660020051330270082259800801404226602e607400426002607600481c2264600460740066eb8c0e000903644c8c8cc09cdd5981a801112cc00400a2600a607600d13233223004303e005375c606e0026eb4c0e0004c0e80090381bae3033001303600240d11640c83030001302f001302e001302d00130283754017159800980e002456600260506ea802e0031640a5159800980d802456600260506ea802e0031640a515980099b87480180122b3001302837540170018b20528acc004c01c0122b3001302837540170018b20528acc004c0180122b3001302837540170018b20528acc004c0140122b3001302837540170018b20528acc004cdc3a401c00915980098141baa00b800c59029456600266e1d20100048acc004c0a0dd5005c0062c814a2c8131026204c40988131026204c409881305660026038604c6ea800633001302b302737546054604e6ea8006604e6ea804644646600200200644b30010018a6103d87a80008992cc004cdd7981798161baa0010048980e99817000a5eb8226600600660600048150c0b800502c488c8cc00400400c896600200314a31598009980d0019bc8375c605c003133002002302f0018a5040a48162604c6ea80292222298009818002cdd71817802cc0c0c0c00126eb0c0bc0112222332233223232323232323298009bae303e0019bad303e303f0019bac303e00d9bab303e303f0089bac303e0089bac303e0059bad303e0049bad303e0039bad303e002488888888966002607203313232323298009bac304b0019bac304b304c00198258024dd59825801cdd71825801244444b3001304200c8999119194c0066002446e50cdc5001000cdc02400737009003c8966002609066e180052004899b833371c00466e0c005200448082266e18cdc700119b830014801120204145229800800ccdc09b8d0020018012e3137009007cdd9803a44444446466453001222225980099b890054801a26601f3001005802400a002803800e26601e0073001300d005802400a002803905e488896600266e2001120088acc004cdc40012401113300e9800802400e00500140149112085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b1008998074c004012007489200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c002800d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882ea2b300133712900400144cc0392212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b10098009806002400e6018005001401513300e980080140069101200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a4412000000000000000000000000000000000000000000000000000000000000000000040193001300c004801d221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000401882e905d4888c8cc00400400c896600266e2400c006291100899b8b3300c00500133002002301300141789114c00488888cc04a600200b004980a801a00c980099807802980a801e6002900052040800ae319800a408148102002b8c66002904000d2040800ae319800a41800348102002b8c244444b30013371200a900744cc05e600200b007801c00a002806801226602e00930013012005803c00e00500140348331222223259800cc004cdc38009bad3067306437540054a14a283122660273001006802cc05801100719912cc004cdc4001a402115980099b880024804226602b3001003802c00a0028051220120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0089980acc00400e00b4892085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010002800d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83222b300133712900800144cc05522120b22df1a126b5ba4e33c16fd6157507610e55ffce20dae7ac44cae168a463612a0098009808001c016602000500140291330159800801400691012085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402d30013010003802d2212085c09af929492a871e4fae32d9d5c36e352471cd659bcdb61de08f1722acc3b100a441200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f976100a44120000000000000000000000000000000000000000000000000000000000000000000402c83210641bad306730643754004660266eb8c148c190dd50011bae3051306437540051641886601e00a602a0072259800982a99b8600148012266e2d20fe033300b00233706002900244cdc5a400066e2ccc030008004cc02c008cdc19809800a400882f122259800982699194c0040069000406900111119192cc00400e29101200000000000000000000000000000000000000000000000000000000000000000008992cc00400626464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c1780062646603466e2cdd6983718359baa001375c60b260d66ea8004dd7182c18359baa001306d306e306a37540051323301a3300b375c60dc0020106eb8c1b8c1bc004c1b8c1a8dd500120d041a060d06ea8004c1ac01226464b3001305f0018994c0040126eb4c1b80066eb8c1b8c1bc00500518351baa0028acc004c17800626465300100b804c007300100a800c01500a4c1bcc1c000900d18031bad306e001306a375400513233223322980080740320039800806c006010806a60c0660e26ea0cc06c008030cc1c4dd499807801000998389839183980225eb810101bae30700023008001306f001375a60dc00260d46ea800906820d03068375400260d60088348c1ac00d068111194c00402600f001cc0040220030044021002403060080046e00c060008dca00544cc88ca6002003480020368008889660020031330153300600500200489919912cc004c17800a26465300100a803c0073001008800cc1bc0190084dd718371837801201a3002375a60da00260d26ea800e2b3001305d002899194c00402a00f001cc004022003306f0064021306e306f002403060046eb4c1b4004c1a4dd5001c4c8cc8a60026eb8c1bc00a60080033070007488a600201d00b80166002019002800a0189830198389ba83301b00330210023307137526601e006004660e260e460e600a97ae04040306e001375a60da00260d26ea800d06720ce306637540026e00c06800cc1a40050671b9400a37286eccc148cc18cdd4008998319ba80114bd7045905f04444b300133712008900144cc0326002009003800a00a0028998060014c004c02c012007001401482d888896600266e2001120048acc004cdc40012400913300c9800802400e00280292201200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f9761008998064c0040120074892000000000000000000000000000000000000000000000000000000000000000000040153001300b002800d22120000000000000000000000000000000000000000000000000000000000000000000401482da2b300133712900200144cc031221200eb923b0cbd24df54401d998531feead35a47a99f4deed205de4af81120f97610098009805802400e002802a2660193001002800d2212000000000000000000000000000000000000000000000000000000000000000000040153001300b004801d22120000000000000000000000000000000000000000000000000000000000000000000401482d905b1112cc004cdc4801a400113300a00200189980500080120b24cc0a00880b2608a60a06ea8c150c15400922259800982498299baa0028992cc004c124c150dd5000c4c8c96600260b60031323303c00115980099b88480000222b30010058acc0056600266e1cdd69827182c1baa0010088acc004c134dd69827982c1baa0018acc004cdc39bad30503058375400201115980099b8f375c60a260b06ea800401e2609a6eb4c148c160dd5000c52820ac8a50415914a082b2294105644c8c8cc004004c8cc004004c8cc004004044896600200314bd6f7b63044c8c8cc88cc88cc0080080048966002003133065337606ea400cdd300225eb7bdb1822653001375c60c6003375660c8003306800248896600266e4001c00e2660d266ec0dd48039ba60080058acc004cdc7803801c4c96600260ba60ce6ea80062660d466ec0dd4804183598341baa001002880120cc689983499bb037520066e98008cc01801800506520ca1833000a0c8330060063065005323200332330010010032259800800c5268992cc0040062b30013004375a60c660cc005149a2c830a26644b3001337206eb8c190008dd71832000c566002600c6eb4c19400a26600a00a660ce00260d200716418d16418c60cc00460cc0028320c19800506314c004c15400694294505e1bae305e002375660bc00260c000282f0896600200314bd7044c8cc88c8cc004004dd59830002112cc004006200713233064374e660c86ea4014cc190c184004cc190c1880052f5c06600600660cc00460c80028310dd7182e000998018019830801182f800a0ba2259800800c528c4c96600266e24dd6982f983018300009991192cc004c14cc178dd5000c5200089bad3062305f375400282e8c96600260a660bc6ea8006298103d87a8000899198008009bab30633060375400444b30010018a6103d87a8000899192cc004cdc8803000c56600266e3c018006260a8660ca60c600497ae08a60103d87a80004185133004004306700341846eb8c184004c19000506220ba32330010010072259800800c5300103d87a8000899192cc004cdc8803000c56600266e3c018006260a6660c860c400497ae08a60103d87a80004181133004004306600341806eb8c180004c18c0050611bae305f001375c60be60c000313300300330600028a5041686eb0c17800505c191980080080e112cc004006297adef6c6089919912cc004c148c170dd5001456600266e3cdd71830182e9baa0020308994c004006005375660c260c460bc6ea80110011112cc00400a2003132332298008034c19c016646600200200a44b300100189983399bb037520086e9800d2f5bded8c113298009bae30650019bab306600198350012444b30013372001000713306b337606ea4020dd3003802c56600266e3c02000e264b3001305f3069375400313306c337606ea4024c1b4c1a8dd500080144009068192cc0056600200314a314a0835a2980103d87a80008982d998361ba60014bd7020d0329800800c022006800888966002005100189919914c00401a60e600b32330010010052259800800c4cc1cccdd81ba9004375000697adef6c608994c004dd71838800cdd69839000cc1d80092225980099b9000800389983b99bb037520106ea001c0162b30013371e010007132598009835983a9baa00189983c19bb0375201260f260ec6ea800400a200483a0c96600260d600314c0103d87a8000898339983c1ba80014bd7020e83370000e005133077337606ea400cdd400119803003000a0e641cc307400141c88030dd718360009bad306d001306f00241b513306b337606ea400cdd300119803003000a0ce419c306800141988030dd718300009bab3061001306300241851001416d1001416c64b30013050305b37540031304d3305e305f305c375400297ae08a60103d87a8000416860bc60b66ea8c178c16cdd500099801801982f801182e800a0b68a50415914a082b22941056192cc004c12cc15cdd5000c4c16cc160dd5000c59056182d182d982d982b9baa305a0018b20b032323300100101b2259800800c52f5c11332259800acc004cdd7982f182d9baa0020058991980080099198008009bab30603061305d375400844b30010018a5eb82264664464660020026eacc18801089660020031003899198331ba733066375200a660cc60c6002660cc60c800297ae0330030033068002306600141906eb8c178004cc00c00cc18c008c18400505f112cc00400629422b30013371e6eb8c180dd618300008044528c4cc008008c18400505b20bc8a50416513305d00233004004001899802002000a0b2305c001305d0014168607c0026eb8c160c154dd5000c59053182b982a1baa305730543754608460a86ea8c15cc150dd50014590520ca60026002003375660a8005222329800800c01200680088896600200510018cc00400e60b600533004305a002001400c82c12229800804d2000914c004dd5982b00140064464b3001304e305837540031323370000666e0ccdc11bad305a004375a60ba00266012900a1bad305d305e001375860b860b26ea80062c82b8c8c8cc004004020896600200314c103d87a80008992cc004cdd79ba7004305b001898269982f182e000a5eb8226600600660c000482d0c17800505c1982d182b8021982d182b80125eb8100320021112cc004cdc4000a40011480022b300130480018a400513259800982499b8600248012330010049800801ccdc18012400880222600330010049800801ccdc198030012400880210521b8200241448288c14e60024444b300133710004901844c00400a2b30013370e004901844cc0112002230020018acc004cdc4001240711330033371c91103020408003370000490189180119bca4a2003124bded8c10140000101200041448289051488888ca600200300380120022225980099b89002480022600297ae08919194c00401a601800b230053305d0020019bad305a002401860b00033001009804400500720aa9b87483f80e4466ec0008dd4000a444466446464b3001304c30563754003132598009826982b9baa0018991919192cc004c18000a26644660a000244b30010028acc004c154c17cdd5002c4c8c8cc896600260d00071330663750010660cc6e9801ccc19a6002b30013305403523375e60d060ca6ea800402a2653001001812c0750011112cc00400a29462b300198009bae306a00280dcdd71835000ae5519800801cc1ac00a60d6002801a294106520d08a5041894c0103d87a8000a60103d8798000418897ae08b20ca375a60ca0026eb8c194008c194004c180dd5002c5905e44c8c8c8cc896600260d2007132323322598009836801c4c028c1b402e2c8350dd698350009bad306a002306a001375860ca00b1641986eb8c198004dd7183300118330009bac3060001306300241846eb4c17c010dd5982f801c5905d182f000982f000982e800982c1baa0018b20ac305a3057375400316415464b3001304c0018a60103d87a80008992cc0066002609a6eb4c1600069429450564530103d87a8000898249982d182b800a5eb810564c00400a440032225980099b8900148002297bdb18010140000101200089980119b8e00e3370200800266e0400400d05848896600266e2400520008a5ef6c601014000010120008998014c004cdc0802000c00e01cb8c19b810010034161001400882a8dc68051119800911191919bb032374e660be60b8002660be60ba00297ae03376060b600460b600260b8003300100691000c012007375a60b60028032600200b22001801c00a002802888cc00920022325980099b89001480122b300130500018cc004012007002918051ba800140311598009827800c6600200900399b80002480fe460146ea0c038cdc0a400000280622b30013370e004905f00c4c8cc0040048c02cdd48009119803240044b3001300d00189801245008cc00401e00d33700002903fc8cc0100108c010cdc5001000a014417119800802400e66e00009207f918051ba9001401c82c905920b28acc004c0e000633001004801ccdc0001241fe052330054800896600266e1c00920cc018925ef6c601014000010120008992cc004cdc38012417c0519800803c01a66012012440032300d3374a004002805a330010078034cdc0001241fe0329800804401e66014014440030019180719ba5003001403c807905c2cc004cdc4a41002800513370066e0000920ff134803a266e0000920f101416c82d900c4566002607400315980099b87002482f80a33001004801ccc01801888006460146e9c00500846600200900399b80002483fc06530010058024cc01c01c880060032300b374e002806100c20b28acc004c0e40062b30013370e004907f0144c8c8cc0040048c030dd30009119803a40044b3001300e0018980125eb7bdb18224646530010069180319832801000cdd69831001200c323376060ca00260ca60cc0026eb0c18000660020130089809800a00a41746600c00c4400519800802400e66e0000920bf02919194c0040060072300d374c00280088896600266e24009200089800a5eb7bdb1822464653001006980a802c8c014cc1980080066eb4c18c0090061919bb0306600130663067001375860c2003300100a804c00500520bc3300700722002403082ca2497bdb18101400001012000416482c905920b2337060029020111119198008008011119803240044b300130090018980125eb8224646530010069180319830001000cdd6982e801200c305b0019800804401e601c002803105811114c00401200700291980200091801800a0101b8048008dc02400316412c304b001304a00130490013044375404f1323259800981d00dc4cc004c0dccc120c1240692f5c0011159800981c80dc4cc004c0dccc120c1240592f5c00111325980099b8748018072266002607066092609402a97ae00098acc004c098072266002607066092609402697ae00098acc004c09407226603a00e011159800981200e44c966002607a608e6ea8006264b30013301f00900a89981c806119baf0013038304a375400514a08238c12cc120dd5000c590461980f00c011456600266e1d200e01c89919198008009bab304c0182259800800c528456600266ebc00cc124c1340062946266004004609c002824104b19ba548008cc124c1280492f5c11332259800981f18241baa0018992cc004c0f8c124dd5000c4c8c96600260a0003132330310011598008034566002b30013370e6eb4c10cc134dd5000806456600266e1cdd6982218269baa00100b8acc004cdc39bad3045304d375400201515980099b8f375c608c609a6ea800404a266e1cdd6982398269baa0010118a50412d14a0825a294104b452820968acc004cdc4a40006eb4c120c134dd5000c4cdc49bad3048304d3754002906400c52820968a50412d14a08258c966002608060986ea8006260a0609a6ea80062c8258c13cc140c140c130dd51827800c5904d191919800800808112cc004006297ae0899912cc0056600266ebcc14cc140dd5001002c4c8cc004004c8cc004004dd5982a982b18291baa0042259800800c52f5c113233223233001001375660ae00844b30010018801c4c8cc16cdd39982d9ba90053305b30580013305b30590014bd7019801801982e801182d800a0b2375c60a60026600600660b000460ac00282a0896600200314a115980099b8f375c60aa6eb0c154004022294626600400460ac00282810534528209c89982900119802002000c4cc01001000504e18288009829000a09e3033001375c609a60946ea80062c8240c130c124dd5182618249baa303730493754609860926ea80062c8238cc07401c020cc078060089045208a4114822904511192cc004c0f8c120dd5000c4c8cc8966002608200315980098261baa00380145904d4566002608000315980098261baa00380145904d4566002607e00315980098261baa00380145904d45904a209441282b3001303e3049375400314a314a08240c124dd5000982618249baa0018b208e330040010024110822088c966002607a608e6ea80062646644b300130400018acc004c12cdd5001c00a2c82622b3001303f0018991919194c004dd61829000cdd71829001cdd618290012444b300130560048998221bac3055007225980080144cc11800c89660020051330480072259800801403e2646644b300130500028992cc004c18000626609c6eb0c17c004896600200500489981f183080109800983100120be8b20ba305b3754007159800982780144c8cc896600260c4003133050375860c200244b300100280344cc100c18c0084c004c19000906145905f1bae305f0013060001305b3754007159800982700144c8c8c96600260c4005133050375860c200644b300100280344cc100c18c0084c004c19000906145905f1bae30600013060001305b375400716416482c9059182c1baa00113002305d003305b00241651323002305b003375c60b200482ba264600460b20066eb4c15c0090554590530c148004c144004c140004c12cdd5001c566002607c00315980098259baa00380145904c459049209241242b3001303d3048375400314a314a08238c120dd5000982598241baa0018b208c330030010022232330010010032259800800c5300103d87a80008992cc004cdd78021824000c4c0e8cc12cc1240052f5c1133003003304d002411c609600282490420c0f8004c0f4004c0f0004c0ecc0ec004c0e8c0e8c0e8c0e8c0e8004c0e4004c0e0008c0d8008c0d8c0d8004c0d0010c0d0c0d0c0d0c0d00088b204a30280063028302900645660026028003132332259800980b800c56600260446ea801600516408d159800980b000c56600260446ea801600516408d16408081004cc88c8c8ca60026eacc0a00066eb0c0a0c0a4c0a4c0a4c0a400644b3001301c3026375400513232323232323232323232323232323232329800981e000cdd7181e0094dd7181e008cdd7181e007cc0f003a6eb8c0f00366eb8c0f00326078017375c6078015303c0099bae303c008981e003cdd7181e0034c0f00166eb8c0f00126078007303c00248888888888888888966002609c02513303c3758609a04244b30010028998158078998158060998158050998158040998158030998158020acc004c104c12cdd5001c4c8c8c8ca60026eb8c14c0066eb8c14c0126eb8c14c00e6eb8c14c009222259800982c002c566002609260a66ea806e264b300130590018998239bac3058001225980080140c6264600460b80066eb8c168009058459056182a1baa01b8b20a48b20aa18298009829000982880098261baa0038b2094899180118288019bae304f002413516412c303c001303b001303a0013039001303800130370013036001303500130340013033001303200130310013030001302f001302e001302d001302c001302737540051640953758605000b37586050006911112cc004c07cc0a4dd5006c6600266034004466ebcc0b8c0acdd50008194cc89660020030028acc004c0c000626464b30013371e6eb8c0c400803e2b30013371e6eb8c0c4005220100898111bad303130320018a5040b114a08160c0c4004dd61817800c00902d205a14a0646600200200c44b30010018a5eb82264664464660020026eacc0c0010896600200310038991981a1ba733034375200a66068606200266068606400297ae0330030033036002303400140c86eb8c0b0004cc00c00cc0c4008c0bc00502d4c8c8cc004004dd61817804912cc004006297ae0899912cc0056600266ebcc0c8c0bcdd5001002c4c8cc004004c8cc004004dd5981a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b488966002606200313233012001132598009819800c4c9660026046605e6ea8006264660140022b30010078acc00401a2b30015980099b8f375c606860626ea80100ba2b30013026375a604e60626ea80122b30013026375a605060626ea80122b30013026375a605260626ea80122b3001301d375c605460626ea80122b30013026375a605660626ea80122b30013371290001bad302c303137540091337126eb4c0b0c0c4dd500224141380314a0817a294102f4528205e8a5040bd14a0817a294102f4528205e89919800800994c0040066eb0c0d8c0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0dcc0ccdd50034dd6181b18199baa3036303730373037303730373037303730373037303730373037303730373037303730373033375400680088896600200514bd70456600200314bd7044cc0de600266e3cde41bae3038002375c60700034c103d87a8000a60103d879800040cd3001003981c8014c0e4005003206c40d844b30010018a518acc004c09cc0c8dd5181b000c4cc008008c0dc006294103120688a5040bd14a0817a294102f181998181baa0018b205c301c302f3754603a605e6ea8c0c80062c8180c8cc004004018896600200314bd7044cc8966002646600200264660020026eacc0dcc0e0c0d0dd5181b981c181a1baa0042259800800c52f5c1132332232330010013756607200844b30010018801c4c8cc0f4dd39981e9ba90053303d303a0013303d303b0014bd7019801801981f801181e800a076375c606a002660060066074004607000281b0896600200314a115980099b8f375c606e6eb0c0dc0040c629462660040046070002819103544cc0d0008cc0100100062660080080028180c0cc004c0d0005031192cc004c084c0b4dd5000c4c0c4c0b8dd5000c5902c18181818981898169baa30300018b205c44c966002605e003132330100011323298009bad30310019bae303130323032303200198188012444b300130263030375400313259800981398189baa001899912cc004c0e0006264b30013028303437540031323300f00115980099912cc004006005159800981e000c4c8c96600266e3cdd7181e80100dc56600266e3cdd7181e800a4500899b87375a607a607c0029000c52820708a5040e0607a0026eb0c0ec00600481c90390a5032330010010122259800800c52f5c1132332232330010013756607800844b30010018801c4c8cc100dd3998201ba900533040303d00133040303e0014bd701980180198210011820000a07c375c607000266006006607a004607600281ca2b3001302b0088acc004c0896600266e1cdc6803a408110078b20688acc004cc09404001226604a0206eb8c0e4c0d8dd5000c52820688a5040d114a081a22941034181c181a9baa0018b2066302130343754604460686ea8c0dc0062c81a8dd7181a98191baa001323300100100a2259800800c52f5c11332259800991980080099198008009bab303b303c303837546076607860706ea8010896600200314bd7044c8cc88c8cc004004dd5981e802112cc004006200713233041374e660826ea4014cc104c0f8004cc104c0fc0052f5c0660060066086004608200281f8dd7181c80099801801981f001181e000a0742259800800c528456600266e3cdd7181d9bac303b0010358a51899801001181e000a06c40e513303800233004004001899802002000a0683037001303800140d51640c0603e60626ea8c0d0c0c4dd5000c5902f0c0c4c0c4c0c4c0c4c0c4004c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0dd5000992cc004c07cc0acdd5000c4c0bcc0b0dd5000c5902a18171817981798159baa302e302f302b3754605c0031640b064646600200200844b30010018a5eb8226644b30015980099baf3032302f375460646066605e6ea80080162646600200264660020026eacc0d0c0d4c0c4dd5181a181a98189baa0042259800800c52f5c1132332232330010013756606c00844b30010018801c4c8cc0e8dd39981d1ba90053303a30370013303a30380014bd7019801801981e001181d000a070375c606400266006006606e004606a0028198896600200314a115980099b8f375c60686eb0c0d000404a2946266004004606a00281790324528205a89981880119802002000c4cc01001000502d18180009818800a05c301200b40a030283028001302700130260023020375401444b3001301730213754005132323259800981480144cc038c0a000c4c9660026036003132598009815800c4c8c966002603c003132598009817000c4cc04cc0b40040262c8158c0a4dd50014566002603a003132323298009bad302f0019bad302f0039bad302f002488966002606600900e8b20601817800981700098149baa0028b204e409c604e6ea8004c0a80062c8140c098dd50014566002603400315980098131baa002802c59027459024204830243754003164098604e002604e00260446ea800a2c8100c07cdd50019bae3022301f375400d16407480e84464b3001301300189919192cc004c09400a26600e604800600b1640886eb8c08c004c08c004c078dd5001c5660026024003132323259800981280144cc01cc09000c0162c8110dd718118009811800980f1baa0038acc004c0440062646464b300130250028998039812001802c590221bae30230013023001301e375400716407080e101c180e1baa002301c301d00422598009808180d1baa002899191919912cc004c09000e266012604600826601200400d16408460420026eb8c08400cc084004c080004c06cdd50014590191149a26cac8011", - "hash": "3cb4b9140766c7c65d23277b7f31362e3e41b09462a692004c49ac91" + "compiledCode": "5921720101002229800aba4aba2aba1aba0aab9faab9eaab9dab9a9bae002488888888966003300130043754015230083009300930093009300930093009300930090019ba54800244646600200200644b30010018a508acc004c00cc02c00629462660040046018002803100948c020c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024c024006460106012601260126012601260126012601260126012601260126012601260126012003230083009300930093009300930093009300930093009300930093009300930090019180418049804980498049804980498049804980498049804980498049804800c8c020c024c024c024c024c024c024c024c024c024c024c024c024c0240064601060126012601260126012601260126012601260126012003230083009300930093009300930093009300900191804180498049804980498049804800c8c020c024c024c024c024c024006460106012601260126012003230083009300930090019180418049804800c8c020c0240066e1d20009b874800a6e1d200491191980080080191198018009801001488c8cc00400400c896600200314a115980099b8f375c601600200714a3133002002300c0014018804922222222222222222222229800980f00b4c07405a4602a6603a66e9520023301d375200297ae03301d4c0103d87a80004bd704888c966002601200313259800800c00e264b300100180240120090048992cc004c09400e00d00540886eb80050251811000a040301e37540091598009804000c4c9660020030038992cc0040060090048024012264b3001302500380340150221bae001409460440028100c078dd5002400901c2038301c375400691111991194c00488966002601e60466ea800e264b300100180144c966002003003801c00e0071332259800800c016264b3001001803401a00d006899912cc00400601113259800800c026013009804c4cc896600200300b8992cc00400601900c806403226644b300100180744c96600200300f807c03e01f1332259800800c046264b3001001809404a025012899912cc00400602913259800800c05602b01580ac4cc89660020030178992cc00400603101880c406226644b300100180d44c96600200313259800800c072264b300100180ec07603b1332259800800c07e264b300100181040820411332259800800c08a264b3001001811c08e26644b3001001812c4c966002003132598009825000c56600266e2520043049001813c4cc89660020030298992cc00400605502a81544cc896600200302c8992cc00400605b02d816c4cc896600200302f8992cc00400606103081844cc89660020030328992cc004006067033819c0ce26644b300100181ac4c96600200303681b40da264b3001305e0038cc00407626608402844b300100281d44c96600200303a81d40ea07513230033062004375c0028310c17c00905d40dd03a40dd05b1bad00181b20bc305b00141646eb8004c16800905b182c000a0ac375a00260ae005030416060aa0028298dd6800982a00140b50551829000a0a0375a00260a200502a4148609e0028268c0d0c124004c13800d048409d04b1baa001813409a04d026413860960028248dd60009825001408e0468258c1200050461bad001304700281020903045001410c6eb4004c11000a03a8228c1080050401821001406e03701b80da086304000140f86eb8004c0fc009040181e800a076375c002607800481e8c0e80050381bae001303900240e8606e00281a8dd7000981b001206e303400140c86eb8004c0cc0090341818800a05e375c00260600048188c0b800502c1bae001302d00240b860560028148dd7000981500120563028001409860486ea800e0028112444b3001300f3023375400713259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c01a00d00680344cc89660020030088992cc004006013009804c02626644b3001001805c4c96600200300c80640320191332259800800c03a264b3001001807c03e01f00f899912cc00400602313259800800c04a02501280944cc89660020030148992cc00400602b01580ac05626644b300100180bc4c96600200313259800800c066264b300100180d406a264b300130420038cc00401226604c00244b300100280f44c96600200301e80f407a03d13230033046004375c0028230c10c009041406d01e406d03f1bac00180d4069042181f800a07a303f00280c40620310184100607a00281d8dd7000981e001207a303a00140e06eb8004c0e400903a181b800a06a375c002606c00481b8c0d00050321bae001303300240d060620028178dd700098180012062302e00140b06eb8004c0b400902e1815800a052375c00260540048158c0a000502618121baa003800a0449812003cc080dd5001a4444b3001300f001899199119912cc004c0540062b3001302a375400f0028b20568acc004c0500062b3001302a375400f0028b20568acc004c04c0062b3001302a375400f0028b20568acc004cdc3a400c00315980098151baa00780145902b456600266e1d20080018acc004c0a8dd5003c00a2c815a2b30013370e9005000c56600260546ea801e0051640ad15980099b87480300062b3001302a375400f0028b20568acc004cdc3a401c00315980098151baa00780145902b459028205040a08141028205040a081404cc8a6002605c005302e302e302a3754605a005302e302e00199198008009bac302e0022259800800c530103d87a80008992cc004cdd7981818169baa0010078981399817800a5eb8226600600660620048158c0bc00502d2444530013032004980c18169baa30310049819001cc0c8c0c800a6eb0c0c4009222229800981b802cdd6981b002cc0dc00e606e606e606e606e00491114c004c0ec0126eb4c0e801260760053758607400337566074607600291111194c004dd71820000cdd698201820800cdd618201820982098208024dd6982000324444b3001302c304037540291323259800981698211baa0018cc004dd7182318219baa00198211baa02091192cc004c0c4006264646644b3001304e00380345904b1bae304b001375a60960046096002608c6ea800e2b3001303000189919912cc004c134006264b3001303530493754003132323298009bae30500019bad30500039bae305000248896600260a800900c8b20a21828000982780098251baa0018b2090304c0018b2094375a60940026096002608c6ea800e2b3001302f00189919194c004dd71826000cdd69826001cdd718260012444b3001305000480445904d0c130004c12c004c118dd5001c590442088411060886ea800a44646600200200644b30010018a60103d87a80008992cc004cdd78021823800c4c108cc128c1200052f5c1133003003304c00241186094002824122223259800981980244cc004c108cc128c12c0752f5c001b159800981900244cc004c108cc128c12c0612f5c001b132598009819002c4cc004c10ccc12cc1300512f5c001d15980099b8748018016266002608666096609802097ae000e8992cc004cdc3a401000d13300100b0108acc004cdc3a401400d1598009980080580844cc10c0608cdd7800981b98259baa00a8a50412115980099b874803001a264b3001304f0018992cc004cc00c03404a264b30010028cc00400a2b30013370e6eb4c104c134dd500100cc56600266e1cdd6982118269baa0020158acc004cdc39bad3043304d375400401b15980099b8f375c6088609a6ea80080422b30013370e6eb4c114c134dd5001007c56600266e252000375a6090609a6ea800a2b3001337126eb4c120c134dd50012414138031980080f528528a0968a50412d14a0825a294104b452820968a50412d14a0825a294104b400502c4006003001800a0a4159800800c66002003101d8b20548b45a2d16414514a08250c966002606a60966ea80062609e60986ea80062c8250c138c13cc13cc12cdd51827000c5904c19191980080080d112cc004006297ae0899912cc0056600266ebcc148c13cdd5001002c4c8cc004004c8cc004004dd5982a182a98289baa0042259800800c52f5c113233223233001001375660ac00844b30010018801c4c8cc168dd39982d1ba90053305a30570013305a30580014bd7019801801982e001182d000a0b0375c60a40026600600660ae00460aa0028298896600200314a115980099b8f375c60a86eb0c15000403a294626600400460aa00282790524528209a89982880119802002000c4cc01001000504d18280009828800a09c302e007899912cc0040060051598009828000c4cdc39bad304f305030503758609e0029001c00904d209a14a0646600200264660020026eacc13c06c896600200314bd7044c8cc88cc88cc008008004896600200310038991982a9ba733055375200a660aa60a4002660aa60a600297ae03300300330570023055001414c6eacc14000cdd718268009980180198290011828000a09c2259800800c52f5c1133225980099b8f375c60a2004017133050374e0046600800800313300400400141306eb0c13c004c14000504d20904120824088c8cc00400400c896600200314a31598009981a0019bc8375c60a000313300200230510018a50412c8271047208e223259800981b18251baa00189919912cc004c0e40062b3001304e37540070028b209e8acc004c0e00062b3001304e37540070028b209e8acc004c0dc0062b3001304e37540070028b209e8b209841308260566002606c60966ea80062946294104a18259baa001304e304b375400316412466008002004823104611192cc004c0d4c124dd5000c4c8cc8966002607000315980098269baa00380145904e4566002606e00313232323298009bac30540019bae30540039bac305400248896600260b000913303c375860ae00e44b300100289981f001912cc00400a26608000e44b3001002807c4c8cc89660026090005132598009831000c4cc118dd61830800912cc00400a00913301b3063002130013064002418516417c60ba6ea800e2b3001304700289919912cc004c1900062660906eb0c18c004896600200500689980e983280109800983300120c68b20c2375c60c200260c400260ba6ea800e2b3001304600289919192cc004c19000a2660906eb0c18c00c896600200500689980e983280109800983300120c68b20c2375c60c400260c400260ba6ea800e2c82d905b20b6305a37540022600460be00660ba00482da264600460ba0066eb8c16c00905944c8c008c16c00cdd6982c80120ae8b20aa182a0009829800982900098269baa0038acc004c0d80062b3001304d37540070028b209c8b2096412c8258566002606a60946ea80062946294104918251baa001304d304a3754003164120660060020048b2082304530423754608a60846ea8c0b8c108dd5000982218209baa0148b207e182000282cc004c04cc09cdd5000c4c8c9660020051980080144cc0b0c090cc0b0c0b4c0a8dd500119816180b18151baa0023302c3017302a375400466058603060546ea8008cc0b0c064c0a8dd500119816180d18151baa0023302c301b302a375400466058603860546ea8008cc0b0c074c0a8dd500125eb80cc0b2600294298103d87a8000a60103d879800040a066058603c60546ea8008cc0b0c07cc0a8dd500119816181018151baa0023302c3021302a375400466058604460546ea80092f5c10014025001800c006002817856600200319800800c4cc0ac004cc0ae600294698103d87a8000a60103d8798000409c660569810100003302b4c10100003302b4c10100003302b4c10140003302b4c10100004bd7045900745a2d168b205c302b3028375400316409860506ea8034c09cdd500298148009814981500098129baa0078acc004c0400062646644b300130130018acc004c0a0dd5002c00a2c814a2b300130120018acc004c0a0dd5002c00a2c814a2c81310260991919194c004dd59816800cdd618169817181718171817000cdd618168024c8cc004004dd61817002112cc004006297ae0899912cc004c8cc004004c8cc004004dd59819981a18181baa303330343030375400844b30010018a5eb82264664464660020026eacc0d4010896600200310038991981c9ba733039375200a66072606c00266072606e00297ae033003003303b002303900140dc6eb8c0c4004cc00c00cc0d8008c0d0005032112cc00400629422b30013371e6eb8c0ccdd61819800816c528c4cc008008c0d000502e206289981800119802002000c4cc01001000502c18178009818000a05a9bac302d00248888966002606600513259800980c98179baa00189919912cc004c078c0c8dd5000c4c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026090003375c6090025375c6090023375c609001f304800e9bae304800d9bae304800c9824005cdd718240054c1200266eb8c120022609000f375c609000d30480059bae30480049824001cc1200092222222222222222259800982d00944cc0f8dd6182c810912cc00400a26604e01e26604e01826604e01426604e01026604e00c26604e0082b300130433057375400713232323298009bae305f0019bae305f0049bae305f0039bae305f002488896600260c800b1598009825982f9baa01b8992cc004c1940062660926eb0c190004896600200513322329800912cc004c14cc19cdd500144c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8ca60026eb4c1f40066eb8c1f404a6eb8c1f40466eb8c1f40426eb8c1f403e6eb8c1f403a6eb8c1f40366eb8c1f40326eb8c1f402e6eb4c1f40266eb4c1f40226eb0c1f401e64b3001307b0018acc004cdc4a400860f40031689832983d000a0f28b20f8375460fa00d375a60fa00b375a60fa009375a60fa007375c60fa004911111111111111112cc004c23c0404a26604c611c020362660e600c44b300100281344c8c008c2480400cdd7184800801211c028b211802183e800983e000983d800983d000983c800983c000983b800983b000983a800983a000983980098390009838800983800098378009837000983680098341baa0028b20cc983498351835183518351835183518351835183518351835183518351835183518351835001cdd71834801a444b300130543068375408d13298009bac306d0019bac306d306e00199912cc0040060051598009838000c4c8c96600266e3cdd71838801024c56600266e3cdd71838800a441008982b9bad307130720018a5041b114a08360c1c4004dd61837800c00906d20da14a0646600200208244b30010018a5eb82264664464660020026eacc1c0010896600200310038991983a1ba733074375200a660e860e2002660e860e400297ae0330030033076002307400141c86eb8c1b0004cc00c00cc1c4008c1bc00506d4cc18c0f88cdd7983718359baa001073488896600260e4007132330090011598009839802c4c96600260b660de6ea800626464646464646464653001375860f8003375c60f8013375c60f8011375c60f800f375c60f800d375c60f800b375c60f8009375c60f8006911111112cc004c214040262660386108020142660d201044b30010028acc00405a2b30010178acc0056600266e3cdd71843009841809baa015080018acc004c1b8dd6983b9841809baa0158acc004c1b8dd6983c1841809baa0158acc004c1b8dd6983c9841809baa0158acc004cdc79bae307a308301375402a9101200000000000000000000000000000000000000000000000000000000000000000008acc004c1b8dd6983d9841809baa0158acc004cdc4a40006eb4c1f8c20c04dd500ac4cdc49bad307e308301375402a90504e00c5282102028a5042040514a084080a29410810145282102028a5042040514a084080a2b30013233001001329800800cdd6183c1842809baa0179bac308801308501375403c80088896600200514bd70456600200314bd7044cc22406600266e3cde41bae308a01002375c6114020034c0103d87a8000a60103d879800042140530010039845808014c22c0400500321100242200444b30010018a518acc004c1bcc21004dd5184400800c4cc008008c22404006294108301210c028acc004cdc79bae308601308301375402a6eb8c21804c20c04dd500a456600266e3cdd718379841809baa015375c60de6106026ea80522b30013371e6eb8c1c0c20c04dd500a9bae3070308301375402915980099b8f375c60e26106026ea8054dd718389841809baa0148acc004cdc79bae3072308301375402a6eb8c1c8c20c04dd500a456600266e3cdd718399841809baa015375c60e66106026ea80522b30013371e6eb8c1d0c20c04dd500a9bae3074308301375402915980099baf3075308301375402a610c02610e02610e02610e02610e02610e02610e02610e026106026ea8052266ebcc1d8c20c04dd500a983a9841809baa0148a5042040514a084080a29410810145282102028a5042040514a084080a29410810145282102028a5042040514a084080a294108101452821020289918011844008019bae30860100242100516420804307c001307b001307a00130790013078001307700130760013075001307037540031641b864b30013059306f375400313073307037540031641b860e460e660e660de6ea8c1c80162c8380c96600260b060dc6ea8006260e460de6ea80062c8368c1c4c1c8c1c8c1b8dd51838801c5906f0c8cc0040040f0896600200314bd7081018000810180008101800044cc8966002b30013375e60e060da6ea8008c14412226644b30010018cc0040062946004826a00500280140090740a503259800982b98369baa0018983898371baa0018b20d8307030713071306d375400514a0835a2660de6e9ccc1bc008dd61838000998379838183880099837983818389838800a5eb822b30015980099baf3070306d375400460a20911332259800800c6600200314a30024139002801400a00483a0528192cc004c15cc1b4dd5000c4c1c4c1b8dd5000c5906c18381838983898369baa0028a5041ad13306f30700013306f374e660de0046eb0c1c0c1c4004cc1bcc1c0c1c4c1c40052f5c113306f30700013306f307030710013306f374e660de0046eb0c1c0c1c4c1c40052f5c0835906b1837000998010011837800a0d889919912cc004c1c00062646600e00226464b300130730058992cc004c16cc1bcdd5000c4c96600260b860e06ea80062b3001332259800800c00a2b30013077001899192cc004cdc79bae30780020508acc004cdc79bae307800148900899b87375a60f060f20029001c52820e68a5041cc60f00026eb0c1d800600483a10740a5032330010010482259800800c52f5c113233223233001001375660ee00844b30010018801c4c8cc1ecdd39983d9ba90053307b30780013307b30790014bd7019801801983e801183d800a0f2375c60e60026600600660f000460ec00283a22b3001305c375a60e800715980099b8f325980099b87371a0029020440062c8380dd7183a183a983a983a801a45200000000000000000000000000000000000000000000000000000000000000000008acc004cc160118dd7183a18389baa00189982c023004c52820de8a5041bd14a0837a294106f45906f182e18381baa3073307037540031641b860e40051641c060e460e460e460e460e400260e260e260e260e260e260e260e260e260da6ea8004c96600260ac60d86ea8006260e060da6ea80062c8358c1bcc1c0c1c0c1b0dd51837983818361baa306f0018b20da375860da0026eb0c1b4c1b8004c8cc0040040f8896600200314bd709018000810180008101800044cc8966002b30013375e60e060da6ea8c164c1b4dd5001182882444cc896600200319800800c528c00904d400a00500280120e814a064b30013057306d375400313071306e37540031641b060e060e260e260da6ea8c1c0c1c4c1b4dd5001452820d68998379ba73306f002375860e0002660de60e060e2002660de60e060e260e200297ae08acc0056600266ebcc1c0c1b4dd5182c98369baa0023051048899912cc004006330010018a51801209c801400a00500241d02940c96600260ae60da6ea8006260e260dc6ea80062c8360c1c0c1c4c1c4c1b4dd51838183898369baa0028a5041ad13306f30700013306f374e660de0046eb0c1c0c1c4004cc1bcc1c0c1c4c1c40052f5c113306f30700013306f307030710013306f374e660de0046eb0c1c0c1c4c1c40052f5c0835906b1837000998010011837800a0d8419c2232598009829800c4c8c8c96600260de005133007306e0030058b20d8375c60da00260da00260d06ea800e2b3001305200189919192cc004c1bc00a26600e60dc00600b1641b06eb8c1b4004c1b4004c1a0dd5001c56600260a2003132323259800983780144cc01cc1b800c0162c8360dd71836800983680098341baa0038b20cc41988330c198dd500118319baa0312259800982818321baa002899191919912cc004c1b800e26607460da00826607400400d1641ac60d60026eb8c1ac00cc1ac004c1a8004c194dd500145906344c8c008c1a000cdd7183300120c88b20c430603754037164179164184305f001305e001305d001305837540071641591323002305d003375c60b600482ca2c82b86090002608e002608c002608a00260880026086002608400260820026080002607e002607c002607a0026078002607600260740026072002607000260666ea80062c81888966002603c60646ea800a2646464b3001303a002899803181c8018992cc004c088006264b3001303c001899192cc004c094006264b3001303f001899805981f000804c5903c181d1baa0028acc004c09000626464653001375a6080003375a6080007375a60800049112cc004c11001201d1641043040001303f001303a37540051640e081c0c0e0dd5000981d800c59039181b9baa0028acc004c0840062b3001303737540050058b20708b206a40d4606a6ea80062c81b8c0e0004c0e0004c0ccdd5001459031181a18189baa002223259800980f000c4c8c96600260720050048b206c375c606e00260666ea800e2b3001301d001899192cc004c0e400a0091640d86eb8c0dc004c0ccdd5001c590312062303137540051640b86038605e6ea8c06cc0bcdd518190014590300c0b4c0b4004c0b0004c0ac004c098dd500598129baa003375c6050604a6ea801e2c81190230888c966002601e00313259800800c00e264b30010018992cc00400600b13259800800c01a00d00680344c966002605a00719800802402200e805200e8150dd7000a05a302a00140a0605400500480240120088158c0a000502618121baa0048acc004c038006264b3001001801c4c96600200313259800800c016264b3001001803401a00d0068992cc004c0b400e33001004804401d00a401d02a1bae00140b460540028140c0a800a009004802401102b1814000a04c302437540091598009806800c4c9660020030038992cc004006264b3001001802c4c966002003006803401a00d132598009816801c66002009008803a014803a054375c0028168c0a80050281815001401200900480220563028001409860486ea8012004811102220443022375400660426044008444b3001300c3020375400713259800800c00a264b3001001801c00e007003899912cc00400600b13259800800c4c9660020030078992cc0040062b3001302c0028cc00400e33001001804c02100b402100b40210294022011008804205a302a00140a06054005006803401a00c8158c0a00050261bae001302700240a0604a0028118c084dd5001c00501f1149a26cac80101", + "hash": "5b12d3d43edd38c4a7524769bc2bf85aaf1855d63d959915c76d2e31" } ], "definitions": { - "Bool": { - "title": "Bool", - "anyOf": [ - { - "title": "False", - "dataType": "constructor", - "index": 0, - "fields": [] - }, - { - "title": "True", - "dataType": "constructor", - "index": 1, - "fields": [] - } - ] - }, "ByteArray": { "title": "ByteArray", "dataType": "bytes" @@ -521,12 +504,6 @@ "$ref": "#/definitions/Int" } }, - "List$aiken/crypto/VerificationKey": { - "dataType": "list", - "items": { - "$ref": "#/definitions/aiken~1crypto~1VerificationKey" - } - }, "List$types/SharesMPFAction": { "dataType": "list", "items": { @@ -547,10 +524,6 @@ "title": "ScriptHash", "dataType": "bytes" }, - "aiken/crypto/VerificationKey": { - "title": "VerificationKey", - "dataType": "bytes" - }, "aiken/crypto/VerificationKeyHash": { "title": "VerificationKeyHash", "dataType": "bytes" @@ -954,90 +927,6 @@ } ] }, - "types/VaultOracleDatum": { - "title": "VaultOracleDatum", - "anyOf": [ - { - "title": "VaultOracleDatum", - "dataType": "constructor", - "index": 0, - "fields": [ - { - "title": "app_oracle", - "$ref": "#/definitions/cardano~1assets~1PolicyId" - }, - { - "title": "vault_script_hash", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "l1_deposit_intent_script_hash", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "l1_withdrawal_intent_script_hash", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "l2_deposit_intent_script_hash", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "l2_withdrawal_intent_script_hash", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "pluggable_logic", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "vault_stake_rotation_script_hash", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "operator_account", - "$ref": "#/definitions/hydra_dex~1types~1UserAccount" - }, - { - "title": "operator_fee_rate_bp", - "$ref": "#/definitions/Int" - }, - { - "title": "operator_min_deposit_rate_bp", - "$ref": "#/definitions/Int" - }, - { - "title": "hydra_node_pub_keys", - "$ref": "#/definitions/List$aiken~1crypto~1VerificationKey" - }, - { - "title": "is_active", - "$ref": "#/definitions/Bool" - }, - { - "title": "total_shares", - "$ref": "#/definitions/Int" - }, - { - "title": "operator_shares", - "$ref": "#/definitions/Int" - }, - { - "title": "total_deposited", - "$ref": "#/definitions/Int" - }, - { - "title": "shares_merkle_root", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "total_fee_share_collected", - "$ref": "#/definitions/Int" - } - ] - } - ] - }, "types/VaultOracleMintRedeemer": { "title": "VaultOracleMintRedeemer", "anyOf": [ @@ -1059,79 +948,52 @@ "title": "VaultOracleSpendRedeemer", "anyOf": [ { - "title": "L1InitialDeposit", + "title": "ProcessL1Deposit", "dataType": "constructor", "index": 0, - "fields": [ - { - "title": "depositor", - "$ref": "#/definitions/hydra_dex~1types~1UserAccount" - }, - { - "title": "initial_deposit", - "$ref": "#/definitions/types~1MValue" - }, - { - "title": "prices_message", - "$ref": "#/definitions/ByteArray" - }, - { - "title": "signatures", - "$ref": "#/definitions/List$ByteArray" - }, - { - "title": "initial_shares_proof", - "$ref": "#/definitions/aiken~1merkle_patricia_forestry~1Proof" - } - ] + "fields": [] }, { - "title": "ProcessL1Deposit", + "title": "ProcessL1Withdrawal", "dataType": "constructor", "index": 1, "fields": [] }, { - "title": "ProcessL1Withdrawal", + "title": "ProcessL2Deposit", "dataType": "constructor", "index": 2, "fields": [] }, { - "title": "ProcessL2Deposit", + "title": "ProcessL2Withdrawal", "dataType": "constructor", "index": 3, "fields": [] }, { - "title": "ProcessL2Withdrawal", + "title": "HydraCommit", "dataType": "constructor", "index": 4, "fields": [] }, { - "title": "HydraCommit", + "title": "HydraDecommit", "dataType": "constructor", "index": 5, "fields": [] }, { - "title": "HydraDecommit", + "title": "UpdateConfig", "dataType": "constructor", "index": 6, "fields": [] }, { - "title": "PluggableLogic", + "title": "BurnVault", "dataType": "constructor", "index": 7, "fields": [] - }, - { - "title": "UpdateConfig", - "dataType": "constructor", - "index": 8, - "fields": [] } ] }, diff --git a/spec/0_vault_oracle/spend+mint.md b/spec/0_vault_oracle/spend+mint.md index 2eed5ab..2d563d7 100644 --- a/spec/0_vault_oracle/spend+mint.md +++ b/spec/0_vault_oracle/spend+mint.md @@ -1,36 +1,64 @@ # Specification - Vault Oracle -The Vault Oracle UTxO holds config and shares state. This is the only UTxO committed to Hydra. +Split oracle design: two NFTs under the same policy, distinguished by datum type. + +| Oracle | Datum Type | Location | Purpose | +| ----------------- | ------------------ | ---------------- | ------------------------ | +| **Config Oracle** | `VaultConfig` | Always L1 | Config for L1 operations | +| **State Oracle** | `VaultOracleDatum` | L1 or L2 (Hydra) | Config copy + state | + +Both oracles share the same `policy_id` and token name `""`. Config may diverge between the two - this is acceptable. ## Parameter - `initial_utxo`: OutputReference (one-shot UTxO consumed at MintOracle — guarantees unique policy_id) +- `app_oracle`: PolicyId -## Datum +## Datum - Config Oracle (L1 only) -### Config (updatable via UpdateConfig) +Simplified config with only shared fields needed for L1 operations. -- `app_oracle`: PolicyId -- `vault_script_hash`: ByteArray (links to the Vault holding funds) -- `l1_deposit_intent_script_hash`: ByteArray -- `l1_withdrawal_intent_script_hash`: ByteArray -- `l2_deposit_intent_script_hash`: ByteArray -- `l2_withdrawal_intent_script_hash`: ByteArray -- `vault_stake_rotation_script_hash`: ByteArray -- `hydra_node_pub_keys`: List\ -- `pluggable_logic`: ByteArray -- `operator_account`: UserAccount (contains Account with master_key, operation_key, account_id) -- `operator_fee_rate_bp`: Int -- `operator_min_deposit_rate_bp`: Int -- `is_active`: Bool - whether the vault accepts new deposits - -### State (mutable) - -- `total_shares`: Int - total shares outstanding -- `operator_shares`: Int - operator's shares (includes accumulated fee shares) -- `total_deposited`: Int - total cost basis of all depositors in USD -- `shares_merkle_root`: ByteArray (32-byte MPF root hash) -- `total_fee_share_collected`: Int - cumulative fee shares collected +``` +VaultConfig { + app_oracle: PolicyId, + vault_script_hash: ByteArray, + l1_deposit_intent_script_hash: ByteArray, + l1_withdrawal_intent_script_hash: ByteArray, + l2_deposit_intent_script_hash: ByteArray, + l2_withdrawal_intent_script_hash: ByteArray, + pluggable_logic: ByteArray, + operator_account: UserAccount, + hydra_node_pub_keys: List, +} +``` + +## Datum - State Oracle (L1 or L2) + +``` +VaultOracleDatum { + // Config (copy, may diverge from Config Oracle) + app_oracle: PolicyId, + vault_script_hash: ByteArray, + l1_deposit_intent_script_hash: ByteArray, + l1_withdrawal_intent_script_hash: ByteArray, + l2_deposit_intent_script_hash: ByteArray, + l2_withdrawal_intent_script_hash: ByteArray, + pluggable_logic: ByteArray, + vault_stake_rotation_script_hash: ByteArray, + operator_account: UserAccount, + operator_fee_rate_bp: Int, + operator_min_deposit_rate_bp: Int, + hydra_node_pub_keys: List, + is_active: Bool, + + // State (mutable) + total_shares: Int, + operator_shares: Int, + total_deposited: Int, + shares_merkle_root: ByteArray, + total_fee_share_collected: Int, +} +``` ## Shares Merkle Entry @@ -44,75 +72,98 @@ Each depositor has one entry in the shares merkle tree: ## User Action - Mint -The mint policy is a simple one-time minting policy (similar to `app_oracle/oracle_nft.ak`). +### MintVault - `MintVault` + +- **One-shot**: `initial_utxo` (parameter) must be consumed — guarantees unique policy_id +- **Exactly 2 NFTs minted** (same token name `""`, distinguished by datum type) +- `app_oracle` is referenced to verify `hydra_node_pub_keys` +- Two outputs at script address: + - **Config Oracle**: `VaultConfig` datum + - **State Oracle**: `VaultOracleDatum` datum +- Shared config fields must match between both datums: + - `app_oracle`, `l1_deposit_intent_script_hash`, `l1_withdrawal_intent_script_hash` + - `l2_deposit_intent_script_hash`, `l2_withdrawal_intent_script_hash` + - `pluggable_logic`, `operator_account`, `hydra_node_pub_keys` +- State Oracle: all state fields = 0, `shares_merkle_root = null_hash` +- `operator_fee_rate_bp` must be >= 0 and <= 100 +- No signatures required (anyone can create a vault) + +### CloseVault - `CloseVault` + +- **Both NFTs burnt** (Config Oracle + State Oracle = -2) +- Two inputs at script address: + - **Config Oracle**: `VaultConfig` datum + - **State Oracle**: `VaultOracleDatum` datum +- State Oracle: `shares_merkle_root` must equal empty tree hash, `total_shares == 0` +- **Signed by `operator_account.account.master_key` AND `operation_key` (from app_oracle)** -1. MintOracle - `RMint` - - **One-shot**: `initial_utxo` (parameter) must be consumed — guarantees unique policy_id - - Exactly 1 NFT minted - - `app_oracle` is referenced to verify `hydra_node_pub_keys` - - `hydra_node_pub_keys` in output datum must match `app_oracle` signers - - Output datum contains initial config (all state fields = 0, `shares_merkle_root = null_hash`) - - No signatures required (anyone can create a vault) +## User Action - Spend -2. CloseVault - `CloseVault` - - Vault Oracle NFT is burnt - - `shares_merkle_root` must equal empty tree hash (`null_hash`) - - `total_shares == 0` - - **Signed by `operator_account.account.master_key` AND `operation_key` (from app_oracle)** +The spend handler accepts both `VaultConfig` and `VaultOracleDatum` as datum, distinguished by type. -## User Action - Spend +> **Note**: Initial deposits (both L1 and L2) are handled by the respective intent validators when `total_shares == 0`. This follows the pattern in `hydra_account/vault_deposit.ak` where initial deposit is treated as a regular deposit with share price = 1.0. + +### State Oracle Actions (VaultOracleDatum) -1. L1InitialDeposit - `L1InitialDeposit { depositor, initial_deposit, prices_message, signatures, initial_shares_proof }` - - **Precondition**: `total_shares == 0` (vault is empty/new) - - `app_oracle` is referenced to obtain `hydra_signers` - - Verify `hydra_node_pub_keys` in output datum match `app_oracle` - - Verify `prices` message signatures using `hydra_signers` - - **Price format**: `Pairs<(PolicyId, AssetName), (Int, Int)>` where tuple is `(price, scale)` - - **USD calculation**: `usd_value = Σ(amount * price / 10^scale)` for each asset - - Calculate `initial_shares` from `initial_deposit` USD value (share price = 1.0) - - Initial state: `total_shares = initial_shares`, `operator_shares = 0`, `total_deposited = initial_shares` - - `shares_merkle_root`: computed from inserting depositor's initial shares entry (key = `cbor.serialise(depositor)`) - - `initial_deposit` value goes to Vault UTxO (separate from Oracle) - - **Anyone can perform initial deposit (no signature required)** - -2. ProcessL1Deposit +1. **ProcessL1Deposit** - `L1DepositIntent` token is burnt with `BurnIntent` redeemer - All validation delegated to L1 deposit intent mint validator - Vault UTxO spent in same transaction (funds flow: User → Vault → AppVault) -3. ProcessL1Withdrawal +2. **ProcessL1Withdrawal** - `L1WithdrawalIntent` token is burnt with `BurnIntent` redeemer - All validation delegated to L1 withdrawal intent mint validator - Vault UTxO spent in same transaction (funds flow: Vault account → Vault → User) -4. ProcessL2Deposit +3. **ProcessL2Deposit** - `L2DepositIntent` token is burnt with `BurnIntent` redeemer - All validation delegated to L2 deposit intent mint validator - Transfers balance from user's Account UTxO to vault's Account UTxO -5. ProcessL2Withdrawal +4. **ProcessL2Withdrawal** - `L2WithdrawalIntent` token is burnt with `BurnIntent` redeemer - All validation delegated to L2 withdrawal intent mint validator - Transfers balance from vault's Account UTxO to user's Account UTxO -6. HydraCommit +5. **HydraCommit** - All `hydra_node_pub_keys` sign the transaction -7. HydraDecommit +6. **HydraDecommit** - All `hydra_node_pub_keys` sign the transaction - Input and output equal -8. PluggableLogic (arbitrage vault) +7. **PluggableLogic** (L2 trading) - Withdrawal Script `pluggable_logic` is validated -9. UpdateConfig +8. **UpdateConfig** (State Oracle) + - **Signed by all `hydra_node_pub_keys`** + - All config fields can be modified + - State fields can be modified (no restriction when spending State Oracle) + - Constraints: + - `operator_fee_rate_bp` must be >= 0 and <= 100 -- **Signed by all `hydra_node_pub_keys`** -- All config fields can be modified -- Constraints: - - `operator_fee_rate_bp` must be >= 0 and <= 10000 - - `hydra_node_pub_keys` must match `app_oracle` signers (if `app_oracle` changed) -- State fields unchanged +9. **BurnVault** + - Oracle NFT is being burnt (minted_quantity < 0) + - Allows spending oracle as part of CloseVault mint action + +### Config Oracle Actions (VaultConfig) + +The Config Oracle stays on L1 and supports these actions: + +1. **UpdateConfig** (Config Oracle) + - **Signed by all `hydra_node_pub_keys`** + - All config fields can be modified + - **State fields in output must remain unchanged** (0 values) + - Constraints: + - `operator_fee_rate_bp` must be >= 0 and <= 100 + +2. **PluggableLogic** (L1 pluggable logic) + - Withdrawal Script `pluggable_logic` is validated + - Allows L1 pluggable logic execution while State Oracle is in Hydra + +3. **BurnVault** + - Oracle NFT is being burnt (minted_quantity < 0) + - Allows spending oracle as part of CloseVault mint action ## Script Upgrades @@ -128,18 +179,92 @@ To upgrade any script (vault, intents, etc.): - **One-shot uniqueness**: `initial_utxo` makes each vault's policy_id unique - **Guard pattern**: Checks intent tokens burned with `BurnIntent` (not `CancelIntent`) - **Hydra signatures**: Commit/Decommit require all hydra node signatures -- **Funds separation**: Funds stay in Vault on L1; only Oracle state enters Hydra +- **Funds separation**: Funds stay in Vault on L1; only State Oracle enters Hydra +- **Config availability**: Config Oracle always on L1 for L1 operations -## Lifecycle +## Config Divergence -**Path A: L1 Initial Deposit** +The two oracles' config may diverge: -``` -MintOracle -> L1InitialDeposit -> L1 deposits -> HydraCommit -> L2 ops -> HydraDecommit -> L1 withdrawals -> CloseVault -``` +| Scenario | Config Oracle (L1) | State Oracle (L2) | Impact | +| ---------------------------- | ------------------ | ----------------- | ------------------------------ | +| Update pluggable_logic on L1 | Updated | Old | L1 uses new logic, L2 uses old | +| Update pluggable_logic on L2 | Old | Updated | L1 uses old logic, L2 uses new | +| Update both | Updated | Updated | Both in sync | + +**Design Choice**: Divergence is acceptable because: -**Path B: L2 Initial Deposit** +1. L1 and L2 operations are independent +2. Operator can sync manually via UpdateConfig on both if needed +3. Simplifies implementation (no cross-layer sync required) + +## Lifecycle ``` -MintOracle -> HydraCommit -> L2InitialDeposit -> L2 ops -> HydraDecommit -> L1 withdrawals -> CloseVault +┌─────────────────────────────────────────────────────────────────┐ +│ MINT PHASE │ +│ MintVault (mints config + state NFTs) │ +└──────────────────────────────┬──────────────────────────────────┘ + │ + ┌────────────────┴────────────────┐ + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ Path A: L1 │ │ Path B: L2 │ + │ Initial Deposit │ │ Initial Deposit │ + └────────┬────────┘ └────────┬────────┘ + │ │ + │ (State Oracle on L1) │ HydraCommit + │ │ (State Oracle only) + ▼ ▼ + ┌─────────────────┐ ┌─────────────────┐ + │ L1InitialDeposit│ │ L2InitialDeposit│ + │ (state spent) │ │ (in Hydra) │ + └────────┬────────┘ └────────┬────────┘ + │ │ + │ HydraCommit (State Oracle) │ + └────────────────┬────────────────┘ + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ ACTIVE TRADING PHASE │ +│ Config Oracle: L1 State Oracle: Hydra │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ L2 Operations (State Oracle in Hydra): │ +│ ✓ ProcessL2Deposit │ +│ ✓ ProcessL2Withdrawal │ +│ ✓ PluggableLogic (L2 trading) │ +│ ✓ UpdateConfig (L2) │ +│ │ +│ L1 Operations (Config Oracle on L1): │ +│ ✓ VaultPluggableLogic (ref config oracle) │ +│ ✓ StakeRotation (ref config oracle) │ +│ ✓ DepositIntoDeltaDeFi (ref config oracle) │ +│ ✓ UpdateConfig (L1 config oracle) │ +│ ✗ ProcessWithdrawal (needs state oracle on L1) │ +│ │ +└─────────────────────────────────────────────────────────────────┘ + │ + │ HydraDecommit (State Oracle) + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ L1 SETTLEMENT PHASE │ +│ Config Oracle: L1 State Oracle: L1 │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ ✓ ProcessL1Withdrawal (state oracle spent + vault spent) │ +│ ✓ ProcessL1Deposit │ +│ ✓ All L1 operations │ +│ │ +│ Can re-commit: HydraCommit → back to Active Trading Phase │ +│ │ +└─────────────────────────────────────────────────────────────────┘ + │ + │ (when total_shares == 0) + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ CLOSE VAULT │ +│ Burn both Config + State Oracles │ +└─────────────────────────────────────────────────────────────────┘ ``` + +> Initial deposits use the same flow as regular deposits. When `total_shares == 0`, the share price is 1.0 (shares = USD value). diff --git a/spec/1_vault/spend+withdrawal.md b/spec/1_vault/spend+withdrawal.md index 8d4165c..a883b3d 100644 --- a/spec/1_vault/spend+withdrawal.md +++ b/spec/1_vault/spend+withdrawal.md @@ -2,33 +2,34 @@ ## Parameter -- `vault_oracle`: PolicyId +- `vault_oracle`: PolicyId (same policy for both Config and State oracles) ## User Action - Spend (L1 only) -1. ProcessWithdrawal - - Get `VaultOracleDatum` from **inputs** (vault oracle spent in same tx) +1. **ProcessWithdrawal** + - Get **State Oracle** (`VaultOracleDatum`) from **inputs** (state oracle spent in same tx) - `L1WithdrawalIntent` token is burnt with `BurnIntent` redeemer - All validation delegated to withdrawal intent mint validator -2. DepositIntoDeltaDeFi - - Get `VaultOracleDatum` from **reference_inputs** +2. **DepositIntoDeltaDeFi** + - Get **Config Oracle** (`VaultConfig`) from **reference_inputs** - Obtain DeltaDeFi's `AppOracleDatum` from reference_inputs - `app_deposit_request_token` is minted -3. StakeRotation - - Get `VaultOracleDatum` from **reference_inputs** +3. **StakeRotation** + - Get **State Oracle** (`VaultOracleDatum`) from **reference_inputs** - Withdrawal Script `vault_stake_rotation_script_hash` is validated -4. VaultPluggableLogic - - Get `VaultOracleDatum` from **reference_inputs** +4. **VaultPluggableLogic** + - Get **Config Oracle** (`VaultConfig`) from **reference_inputs** - Withdrawal Script `pluggable_logic` is validated + - Allows L1 pluggable logic execution while State Oracle is in Hydra ## User Action - Withdrawal (L1 regular deposit and L2 only) -1. Withdraw - - Get `VaultOracleDatum` from **reference_inputs** - - **Signed by `operator_key` OR `operation_key` from `app_oracle`** +1. **Withdraw** + - Get **Config Oracle** (`VaultConfig`) from **reference_inputs** + - **Signed by `operator_account.account.master_key`** - Either one of below cases: - Create intent - deposit into other vault - Create intent - hydra withdrawal diff --git a/spec/2_l1_deposit_intent/spend+mint.md b/spec/2_l1_deposit_intent/spend+mint.md index 49cec8b..26c8d04 100644 --- a/spec/2_l1_deposit_intent/spend+mint.md +++ b/spec/2_l1_deposit_intent/spend+mint.md @@ -2,6 +2,8 @@ L1 deposit intents allow users to deposit funds to the Trust Me Bro vault on L1. The vault then performs a regular deposit (AppDeposit) to AppVault, increasing the vault's account balance. +> **Initial Deposits**: When `total_shares == 0`, this is treated as an initial deposit with share price = 1.0 (shares = USD value). This follows the pattern in `hydra_account/vault_deposit.ak` where initial deposit is handled inline within the deposit flow. + ## Parameter - `vault_oracle_nft`: PolicyId @@ -65,12 +67,13 @@ User funds → L1DepositIntent → Vault → AppVault (regular deposit) 1. `deposit_amount > 0` (non-empty MValue) 2. Deposit value actually transferred to vault -3. `shares_minted` computed correctly: - - Initial deposit (`total_shares == 0`): `shares = usd_value` - - Regular deposit: `shares = usd_value * total_shares / vault_equity` +3. `shares_minted` computed correctly (via `cal_shares_amount` in `deposit_utils.ak`): + - **Initial deposit** (`total_shares == 0`): `shares = usd_value` (share price = 1.0) + - **Regular deposit**: `shares = usd_value * total_shares / vault_equity` (round DOWN) 4. `new_total_shares = old_total_shares + shares_minted` 5. `new_total_deposited = old_total_deposited + usd_value` 6. Depositor shares record updated correctly in merkle tree +7. For initial deposit: `operator_shares` remains 0 (unless operator is the depositor) > **Asset Flexibility**: Script accepts ANY asset. Backend restricts accepted assets (e.g., USDC only). Scripts should never change; backend rules can evolve. diff --git a/validators/l2_deposit_intent/spend_and_mint.ak b/validators/l2_deposit_intent/spend_and_mint.ak index e7a0d9e..7235a42 100644 --- a/validators/l2_deposit_intent/spend_and_mint.ak +++ b/validators/l2_deposit_intent/spend_and_mint.ak @@ -1,6 +1,6 @@ use aiken/collection/list use cardano/address.{Script, VerificationKey, from_script} -use cardano/assets.{PolicyId, flatten} +use cardano/assets.{PolicyId, quantity_of} use cardano/transaction.{OutputReference, Transaction, find_input} use cocktail.{ key_signed, output_inline_datum, outputs_at_with_policy, outputs_with_policy, @@ -30,14 +30,7 @@ validator l2_deposit_intent( expect Script(own_hash) = own_input.output.address.payment_credential // Check that intent token is being burnt - let is_intent_burnt = - when - flatten(mint) - |> list.filter(fn(asset) { asset.1st == own_hash }) - is { - [(_, _, minted_quantity)] -> minted_quantity < 0 - _ -> False - } + let is_intent_burnt = quantity_of(mint, own_hash, "") < 0 is_intent_burnt? } diff --git a/validators/l2_withdrawal_intent/spend_and_mint.ak b/validators/l2_withdrawal_intent/spend_and_mint.ak index f465c93..b1d06ed 100644 --- a/validators/l2_withdrawal_intent/spend_and_mint.ak +++ b/validators/l2_withdrawal_intent/spend_and_mint.ak @@ -1,6 +1,5 @@ -use aiken/collection/list use cardano/address.{Script, VerificationKey, from_script} -use cardano/assets.{PolicyId, flatten} +use cardano/assets.{PolicyId, quantity_of} use cardano/transaction.{OutputReference, Transaction, find_input} use cocktail.{ key_signed, output_inline_datum, outputs_at_with_policy, outputs_with_policy, @@ -30,14 +29,7 @@ validator l2_withdrawal_intent( expect Script(own_hash) = own_input.output.address.payment_credential // Check that intent token is being burnt - let is_intent_burnt = - when - flatten(mint) - |> list.filter(fn(asset) { asset.1st == own_hash }) - is { - [(_, _, minted_quantity)] -> minted_quantity < 0 - _ -> False - } + let is_intent_burnt = quantity_of(mint, own_hash, "") < 0 is_intent_burnt? } diff --git a/validators/tests/deposit_utils/process_batch.ak b/validators/tests/deposit_utils/process_batch.ak index d4e4d1b..bfccb23 100644 --- a/validators/tests/deposit_utils/process_batch.ak +++ b/validators/tests/deposit_utils/process_batch.ak @@ -1,399 +1,399 @@ -use cardano/address.{from_script} -use cardano/assets.{AssetName, PolicyId, from_asset_list, from_lovelace} -use cardano/transaction.{InlineDatum, Input, NoDatum} -use deposit_utils.{cal_shares_amount, combine_m_value} -use hydra_dex/types.{Account, UserTradeAccount} as dd_types -use mocktail.{mock_output, mock_pub_key_address, mock_utxo_ref} -use price_oracle_utils.{convert_m_value_to_usd} -use tests/utils.{ - mock_l1_deposit_intent_script_hash, mock_l2_deposit_intent_script_hash, - mock_total_shares, mock_vault_equity, -} -use types.{DepositIntentDatum, MValue} - -// Mock user accounts for different depositors (inner Account) -const mock_user_inner_account_0: Account = - Account { - account_id: "user_0", - master_key: mock_pub_key_address(0, None).payment_credential, - operation_key: mock_pub_key_address(0, None).payment_credential, - } - -const mock_user_inner_account_1: Account = - Account { - account_id: "user_1", - master_key: mock_pub_key_address(1, None).payment_credential, - operation_key: mock_pub_key_address(1, None).payment_credential, - } - -const mock_user_inner_account_2: Account = - Account { - account_id: "user_2", - master_key: mock_pub_key_address(2, None).payment_credential, - operation_key: mock_pub_key_address(2, None).payment_credential, - } - -// Wrap in UserTradeAccount for intent datums -const mock_user_account_0: dd_types.UserAccount = - UserTradeAccount { - account: mock_user_inner_account_0, - trading_logic: mock_l1_deposit_intent_script_hash, - } - -const mock_user_account_1: dd_types.UserAccount = - UserTradeAccount { - account: mock_user_inner_account_1, - trading_logic: mock_l1_deposit_intent_script_hash, - } - -const mock_user_account_2: dd_types.UserAccount = - UserTradeAccount { - account: mock_user_inner_account_2, - trading_logic: mock_l1_deposit_intent_script_hash, - } - -// ========== Prices ========== -// prices: (price, scale) tuple - USD = amount * price / 10^scale - -pub const prices: Pairs<(PolicyId, AssetName), (Int, Int)> = - [ - Pair((#"", #""), (2, 0)), - Pair( - (#"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", #"5553444d"), - (1, 0), - ), - ] - -// ========== MValue constants ========== - -pub const m_value_a = - [ - Pair("", [Pair("", 1000000)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 1000000)], - ), - ] - -pub const m_value_b = - [ - Pair("", [Pair("", 2000000)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 2000000)], - ), - ] - -pub const m_value_c = - [ - Pair("", [Pair("", 2000000)]), - Pair( - #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", - [Pair(#"5553444d", 1000000)], - ), - ] - -// ========== Deposit intent datums ========== - -const deposit_intent_datum_a: Data = - DepositIntentDatum { - depositor: mock_user_account_0, - deposit_amount: m_value_a, - } - -const deposit_intent_datum_b: Data = - DepositIntentDatum { - depositor: mock_user_account_1, - deposit_amount: m_value_b, - } - -const deposit_intent_datum_c: Data = - DepositIntentDatum { - depositor: mock_user_account_2, - deposit_amount: m_value_c, - } - -// ========== Non-intent inputs ========== - -const input_x = - Input { - output_reference: mock_utxo_ref(99, 0), - output: mock_output( - mock_pub_key_address(999, None), - from_lovelace(1000000), - NoDatum, - None, - ), - } - -const input_y = - Input { - output_reference: mock_utxo_ref(99, 1), - output: mock_output( - mock_pub_key_address(999, None), - from_lovelace(1000000), - NoDatum, - None, - ), - } - -// ========== Intent inputs ========== - -pub const intent_input_a = - Input { - output_reference: mock_utxo_ref(0, 0), - output: mock_output( - from_script(mock_l1_deposit_intent_script_hash), - from_asset_list(m_value_a), - InlineDatum(deposit_intent_datum_a), - None, - ), - } - -pub const intent_input_b = - Input { - output_reference: mock_utxo_ref(1, 0), - output: mock_output( - from_script(mock_l1_deposit_intent_script_hash), - from_asset_list(m_value_b), - InlineDatum(deposit_intent_datum_b), - None, - ), - } - -pub const intent_input_c = - Input { - output_reference: mock_utxo_ref(2, 0), - output: mock_output( - from_script(mock_l1_deposit_intent_script_hash), - from_asset_list(m_value_c), - InlineDatum(deposit_intent_datum_c), - None, - ), - } - -// ========== Input lists ========== - -const inputs = - [input_x, intent_input_a, intent_input_b, input_y, intent_input_c] - -const excessive_inputs = - [ - input_x, intent_input_a, intent_input_b, input_y, intent_input_c, - intent_input_c, - ] - -const insufficient_inputs = [input_x, intent_input_a, intent_input_b, input_y] - -// ========== Indices ========== -// NOTE: The actual index values are NOT used in process_batched_deposit_intent_validation. -// Only the LENGTH of indices matters - it acts as a counter to ensure the correct number -// of deposit intent UTxOs are processed. The index values are discarded with `_output_index`. -// See deposit_utils.ak line 120: `[_output_index, ..rest_of_indices]` -// -// This means [1, 0, 2], [0, 1, 2], [99, 99, 99] would all work the same as long as length = 3. -// The indices were originally meant to map to output indices but are now only used for counting. - -const indices = [1, 0, 2] - -// NOTE: This would actually work the same as `indices` since only length matters -const incorrect_indices = [0, 1, 2] - -const excessive_indices = [0, 1, 2, 3] - -// ========== Expected values ========== - -// m_value_a USD = 1000000 * 2 / 10^0 + 1000000 * 1 / 10^0 = 3000000 -// m_value_b USD = 2000000 * 2 / 10^0 + 2000000 * 1 / 10^0 = 6000000 -// m_value_c USD = 2000000 * 2 / 10^0 + 1000000 * 1 / 10^0 = 5000000 -// Total USD = 14000000 - -const expected_total_m_value = - combine_m_value(combine_m_value(m_value_a, m_value_b), m_value_c) - -const expected_total_usd = - convert_m_value_to_usd(m_value_a, prices) + convert_m_value_to_usd( - m_value_b, - prices, - ) + convert_m_value_to_usd(m_value_c, prices) - -const expected_total_shares = - cal_shares_amount( - convert_m_value_to_usd(m_value_a, prices), - mock_vault_equity, - mock_total_shares, - ) + cal_shares_amount( - convert_m_value_to_usd(m_value_b, prices), - mock_vault_equity, - mock_total_shares, - ) + cal_shares_amount( - convert_m_value_to_usd(m_value_c, prices), - mock_vault_equity, - mock_total_shares, - ) - -// ========== Tests ========== -// TODO: Add merkle proofs and complete tests once merkle data is prepared - -// test process_batch_normal() { -// let ( -// total_intent_datum_m_value, -// total_intent_datum_usd_value, -// total_shares_added, -// final_merkle_root, -// ) = -// process_batched_deposit_intent_validation( -// inputs, -// indices, -// mpf_actions, // TODO: provide merkle proof actions -// mock_vault_equity, -// mock_total_shares, -// prices, -// mock_l1_deposit_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root -// ) -// -// (total_intent_datum_m_value == expected_total_m_value)? && -// (total_intent_datum_usd_value == expected_total_usd)? && -// (total_shares_added == expected_total_shares)? +// use cardano/address.{from_script} +// use cardano/assets.{AssetName, PolicyId, from_asset_list, from_lovelace} +// use cardano/transaction.{InlineDatum, Input, NoDatum} +// use deposit_utils.{cal_shares_amount, combine_m_value} +// use hydra_dex/types.{Account, UserTradeAccount} as dd_types +// use mocktail.{mock_output, mock_pub_key_address, mock_utxo_ref} +// use price_oracle_utils.{convert_m_value_to_usd} +// use tests/utils.{ +// mock_l1_deposit_intent_script_hash, mock_l2_deposit_intent_script_hash, +// mock_total_shares, mock_vault_equity, // } - -// test process_batch_excessive_inputs() fail { -// // TODO: Add merkle data -// } - -// test process_batch_insufficient_inputs() fail { -// // TODO: Add merkle data -// } - -// ========== L2 Intent inputs (using L2 script hash) ========== -// In L2, indices are only used for COUNTING (values ignored). -// Transfer amounts are matched in order with intent UTxOs. -// Validation compares USD values (not MValue directly). - -const l2_deposit_intent_datum_a: Data = - DepositIntentDatum { - depositor: mock_user_account_0, - deposit_amount: m_value_a, - } - -const l2_deposit_intent_datum_b: Data = - DepositIntentDatum { - depositor: mock_user_account_1, - deposit_amount: m_value_b, - } - -const l2_deposit_intent_datum_c: Data = - DepositIntentDatum { - depositor: mock_user_account_2, - deposit_amount: m_value_c, - } - -pub const l2_intent_input_a = - Input { - output_reference: mock_utxo_ref(10, 0), - output: mock_output( - from_script(mock_l2_deposit_intent_script_hash), - from_lovelace(2000000), - InlineDatum(l2_deposit_intent_datum_a), - None, - ), - } - -pub const l2_intent_input_b = - Input { - output_reference: mock_utxo_ref(11, 0), - output: mock_output( - from_script(mock_l2_deposit_intent_script_hash), - from_lovelace(2000000), - InlineDatum(l2_deposit_intent_datum_b), - None, - ), - } - -pub const l2_intent_input_c = - Input { - output_reference: mock_utxo_ref(12, 0), - output: mock_output( - from_script(mock_l2_deposit_intent_script_hash), - from_lovelace(2000000), - InlineDatum(l2_deposit_intent_datum_c), - None, - ), - } - -// L2 input list -const l2_inputs = - [input_x, l2_intent_input_a, l2_intent_input_b, input_y, l2_intent_input_c] - -// L2 indices — only used for counting, actual values ignored -const l2_indices = [0, 0, 0] - -// L2 transfer amounts as MValue — must match deposit_amount in USD value -// Intents are processed in order: a, b, c -fn l2_transfer_amounts() -> List { - [m_value_a, m_value_b, m_value_c] -} - -// Incorrect transfer amounts (wrong order causes USD value mismatch) -fn l2_incorrect_transfer_amounts() -> List { - [m_value_b, m_value_a, m_value_c] -} -// ========== L2 Tests ========== -// L2 uses TransferIntent mechanism instead of storing value in intent UTxO. -// indices are only for counting (values ignored), transfer_amounts matched in order. -// Validation compares USD values of deposit_amount and transfer_amount. -// TODO: Add merkle proofs and complete tests once merkle data is prepared - -// test l2_process_batch_normal() { -// let (total_usd_value, total_shares_added, final_merkle_root) = -// process_batched_l2_deposit_intent_validation( -// l2_inputs, -// l2_indices, // Only used for counting, values ignored -// mpf_actions, // TODO: provide merkle proof actions -// l2_transfer_amounts(), -// mock_vault_equity, -// mock_total_shares, -// prices, -// mock_l2_deposit_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root -// ) -// -// (total_usd_value == expected_total_usd)? && -// (total_shares_added == expected_total_shares)? -// } - -// test l2_process_batch_mismatched_transfer_amounts() fail { -// // Transfer amounts don't match deposit_amount in USD value -// let (_, _, _) = -// process_batched_l2_deposit_intent_validation( -// l2_inputs, -// l2_indices, -// mpf_actions, // TODO: provide merkle proof actions -// l2_incorrect_transfer_amounts(), // Wrong order causes USD mismatch -// mock_vault_equity, -// mock_total_shares, -// prices, -// mock_l2_deposit_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root -// ) -// True +// use types.{DepositIntentDatum, MValue} + +// // Mock user accounts for different depositors (inner Account) +// const mock_user_inner_account_0: Account = +// Account { +// account_id: "user_0", +// master_key: mock_pub_key_address(0, None).payment_credential, +// operation_key: mock_pub_key_address(0, None).payment_credential, +// } + +// const mock_user_inner_account_1: Account = +// Account { +// account_id: "user_1", +// master_key: mock_pub_key_address(1, None).payment_credential, +// operation_key: mock_pub_key_address(1, None).payment_credential, +// } + +// const mock_user_inner_account_2: Account = +// Account { +// account_id: "user_2", +// master_key: mock_pub_key_address(2, None).payment_credential, +// operation_key: mock_pub_key_address(2, None).payment_credential, +// } + +// // Wrap in UserTradeAccount for intent datums +// const mock_user_account_0: dd_types.UserAccount = +// UserTradeAccount { +// account: mock_user_inner_account_0, +// trading_logic: mock_l1_deposit_intent_script_hash, +// } + +// const mock_user_account_1: dd_types.UserAccount = +// UserTradeAccount { +// account: mock_user_inner_account_1, +// trading_logic: mock_l1_deposit_intent_script_hash, +// } + +// const mock_user_account_2: dd_types.UserAccount = +// UserTradeAccount { +// account: mock_user_inner_account_2, +// trading_logic: mock_l1_deposit_intent_script_hash, +// } + +// // ========== Prices ========== +// // prices: (price, scale) tuple - USD = amount * price / 10^scale + +// pub const prices: Pairs<(PolicyId, AssetName), (Int, Int)> = +// [ +// Pair((#"", #""), (2, 0)), +// Pair( +// (#"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", #"5553444d"), +// (1, 0), +// ), +// ] + +// // ========== MValue constants ========== + +// pub const m_value_a = +// [ +// Pair("", [Pair("", 1000000)]), +// Pair( +// #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", +// [Pair(#"5553444d", 1000000)], +// ), +// ] + +// pub const m_value_b = +// [ +// Pair("", [Pair("", 2000000)]), +// Pair( +// #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", +// [Pair(#"5553444d", 2000000)], +// ), +// ] + +// pub const m_value_c = +// [ +// Pair("", [Pair("", 2000000)]), +// Pair( +// #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913", +// [Pair(#"5553444d", 1000000)], +// ), +// ] + +// // ========== Deposit intent datums ========== + +// const deposit_intent_datum_a: Data = +// DepositIntentDatum { +// depositor: mock_user_account_0, +// deposit_amount: m_value_a, +// } + +// const deposit_intent_datum_b: Data = +// DepositIntentDatum { +// depositor: mock_user_account_1, +// deposit_amount: m_value_b, +// } + +// const deposit_intent_datum_c: Data = +// DepositIntentDatum { +// depositor: mock_user_account_2, +// deposit_amount: m_value_c, +// } + +// // ========== Non-intent inputs ========== + +// const input_x = +// Input { +// output_reference: mock_utxo_ref(99, 0), +// output: mock_output( +// mock_pub_key_address(999, None), +// from_lovelace(1000000), +// NoDatum, +// None, +// ), +// } + +// const input_y = +// Input { +// output_reference: mock_utxo_ref(99, 1), +// output: mock_output( +// mock_pub_key_address(999, None), +// from_lovelace(1000000), +// NoDatum, +// None, +// ), +// } + +// // ========== Intent inputs ========== + +// pub const intent_input_a = +// Input { +// output_reference: mock_utxo_ref(0, 0), +// output: mock_output( +// from_script(mock_l1_deposit_intent_script_hash), +// from_asset_list(m_value_a), +// InlineDatum(deposit_intent_datum_a), +// None, +// ), +// } + +// pub const intent_input_b = +// Input { +// output_reference: mock_utxo_ref(1, 0), +// output: mock_output( +// from_script(mock_l1_deposit_intent_script_hash), +// from_asset_list(m_value_b), +// InlineDatum(deposit_intent_datum_b), +// None, +// ), +// } + +// pub const intent_input_c = +// Input { +// output_reference: mock_utxo_ref(2, 0), +// output: mock_output( +// from_script(mock_l1_deposit_intent_script_hash), +// from_asset_list(m_value_c), +// InlineDatum(deposit_intent_datum_c), +// None, +// ), +// } + +// // ========== Input lists ========== + +// const inputs = +// [input_x, intent_input_a, intent_input_b, input_y, intent_input_c] + +// const excessive_inputs = +// [ +// input_x, intent_input_a, intent_input_b, input_y, intent_input_c, +// intent_input_c, +// ] + +// const insufficient_inputs = [input_x, intent_input_a, intent_input_b, input_y] + +// // ========== Indices ========== +// // NOTE: The actual index values are NOT used in process_batched_deposit_intent_validation. +// // Only the LENGTH of indices matters - it acts as a counter to ensure the correct number +// // of deposit intent UTxOs are processed. The index values are discarded with `_output_index`. +// // See deposit_utils.ak line 120: `[_output_index, ..rest_of_indices]` +// // +// // This means [1, 0, 2], [0, 1, 2], [99, 99, 99] would all work the same as long as length = 3. +// // The indices were originally meant to map to output indices but are now only used for counting. + +// const indices = [1, 0, 2] + +// // NOTE: This would actually work the same as `indices` since only length matters +// const incorrect_indices = [0, 1, 2] + +// const excessive_indices = [0, 1, 2, 3] + +// // ========== Expected values ========== + +// // m_value_a USD = 1000000 * 2 / 10^0 + 1000000 * 1 / 10^0 = 3000000 +// // m_value_b USD = 2000000 * 2 / 10^0 + 2000000 * 1 / 10^0 = 6000000 +// // m_value_c USD = 2000000 * 2 / 10^0 + 1000000 * 1 / 10^0 = 5000000 +// // Total USD = 14000000 + +// const expected_total_m_value = +// combine_m_value(combine_m_value(m_value_a, m_value_b), m_value_c) + +// const expected_total_usd = +// convert_m_value_to_usd(m_value_a, prices) + convert_m_value_to_usd( +// m_value_b, +// prices, +// ) + convert_m_value_to_usd(m_value_c, prices) + +// const expected_total_shares = +// cal_shares_amount( +// convert_m_value_to_usd(m_value_a, prices), +// mock_vault_equity, +// mock_total_shares, +// ) + cal_shares_amount( +// convert_m_value_to_usd(m_value_b, prices), +// mock_vault_equity, +// mock_total_shares, +// ) + cal_shares_amount( +// convert_m_value_to_usd(m_value_c, prices), +// mock_vault_equity, +// mock_total_shares, +// ) + +// // ========== Tests ========== +// // TODO: Add merkle proofs and complete tests once merkle data is prepared + +// // test process_batch_normal() { +// // let ( +// // total_intent_datum_m_value, +// // total_intent_datum_usd_value, +// // total_shares_added, +// // final_merkle_root, +// // ) = +// // process_batched_deposit_intent_validation( +// // inputs, +// // indices, +// // mpf_actions, // TODO: provide merkle proof actions +// // mock_vault_equity, +// // mock_total_shares, +// // prices, +// // mock_l1_deposit_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // +// // (total_intent_datum_m_value == expected_total_m_value)? && +// // (total_intent_datum_usd_value == expected_total_usd)? && +// // (total_shares_added == expected_total_shares)? +// // } + +// // test process_batch_excessive_inputs() fail { +// // // TODO: Add merkle data +// // } + +// // test process_batch_insufficient_inputs() fail { +// // // TODO: Add merkle data +// // } + +// // ========== L2 Intent inputs (using L2 script hash) ========== +// // In L2, indices are only used for COUNTING (values ignored). +// // Transfer amounts are matched in order with intent UTxOs. +// // Validation compares USD values (not MValue directly). + +// const l2_deposit_intent_datum_a: Data = +// DepositIntentDatum { +// depositor: mock_user_account_0, +// deposit_amount: m_value_a, +// } + +// const l2_deposit_intent_datum_b: Data = +// DepositIntentDatum { +// depositor: mock_user_account_1, +// deposit_amount: m_value_b, +// } + +// const l2_deposit_intent_datum_c: Data = +// DepositIntentDatum { +// depositor: mock_user_account_2, +// deposit_amount: m_value_c, +// } + +// pub const l2_intent_input_a = +// Input { +// output_reference: mock_utxo_ref(10, 0), +// output: mock_output( +// from_script(mock_l2_deposit_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(l2_deposit_intent_datum_a), +// None, +// ), +// } + +// pub const l2_intent_input_b = +// Input { +// output_reference: mock_utxo_ref(11, 0), +// output: mock_output( +// from_script(mock_l2_deposit_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(l2_deposit_intent_datum_b), +// None, +// ), +// } + +// pub const l2_intent_input_c = +// Input { +// output_reference: mock_utxo_ref(12, 0), +// output: mock_output( +// from_script(mock_l2_deposit_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(l2_deposit_intent_datum_c), +// None, +// ), +// } + +// // L2 input list +// const l2_inputs = +// [input_x, l2_intent_input_a, l2_intent_input_b, input_y, l2_intent_input_c] + +// // L2 indices — only used for counting, actual values ignored +// const l2_indices = [0, 0, 0] + +// // L2 transfer amounts as MValue — must match deposit_amount in USD value +// // Intents are processed in order: a, b, c +// fn l2_transfer_amounts() -> List { +// [m_value_a, m_value_b, m_value_c] // } -// test l2_process_batch_extra_transfer_amounts() fail { -// // More transfer amounts than deposit intents -// let extra_transfers = [m_value_a, m_value_b, m_value_c, m_value_a] -// let (_, _, _) = -// process_batched_l2_deposit_intent_validation( -// l2_inputs, -// l2_indices, -// mpf_actions, // TODO: provide merkle proof actions -// extra_transfers, -// mock_vault_equity, -// mock_total_shares, -// prices, -// mock_l2_deposit_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root -// ) -// True +// // Incorrect transfer amounts (wrong order causes USD value mismatch) +// fn l2_incorrect_transfer_amounts() -> List { +// [m_value_b, m_value_a, m_value_c] // } +// // ========== L2 Tests ========== +// // L2 uses TransferIntent mechanism instead of storing value in intent UTxO. +// // indices are only for counting (values ignored), transfer_amounts matched in order. +// // Validation compares USD values of deposit_amount and transfer_amount. +// // TODO: Add merkle proofs and complete tests once merkle data is prepared + +// // test l2_process_batch_normal() { +// // let (total_usd_value, total_shares_added, final_merkle_root) = +// // process_batched_l2_deposit_intent_validation( +// // l2_inputs, +// // l2_indices, // Only used for counting, values ignored +// // mpf_actions, // TODO: provide merkle proof actions +// // l2_transfer_amounts(), +// // mock_vault_equity, +// // mock_total_shares, +// // prices, +// // mock_l2_deposit_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // +// // (total_usd_value == expected_total_usd)? && +// // (total_shares_added == expected_total_shares)? +// // } + +// // test l2_process_batch_mismatched_transfer_amounts() fail { +// // // Transfer amounts don't match deposit_amount in USD value +// // let (_, _, _) = +// // process_batched_l2_deposit_intent_validation( +// // l2_inputs, +// // l2_indices, +// // mpf_actions, // TODO: provide merkle proof actions +// // l2_incorrect_transfer_amounts(), // Wrong order causes USD mismatch +// // mock_vault_equity, +// // mock_total_shares, +// // prices, +// // mock_l2_deposit_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // True +// // } + +// // test l2_process_batch_extra_transfer_amounts() fail { +// // // More transfer amounts than deposit intents +// // let extra_transfers = [m_value_a, m_value_b, m_value_c, m_value_a] +// // let (_, _, _) = +// // process_batched_l2_deposit_intent_validation( +// // l2_inputs, +// // l2_indices, +// // mpf_actions, // TODO: provide merkle proof actions +// // extra_transfers, +// // mock_vault_equity, +// // mock_total_shares, +// // prices, +// // mock_l2_deposit_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // True +// // } diff --git a/validators/tests/l1_deposit_intent/burn_intent.ak b/validators/tests/l1_deposit_intent/burn_intent.ak index d5949a8..1bd507d 100644 --- a/validators/tests/l1_deposit_intent/burn_intent.ak +++ b/validators/tests/l1_deposit_intent/burn_intent.ak @@ -1,374 +1,374 @@ -use aiken/cbor -use aiken/merkle_patricia_forestry as mpf -use cardano/address.{from_script} -use cardano/assets.{add, from_asset, from_asset_list} -use cardano/transaction.{Transaction} -use deposit_utils.{cal_shares_amount} -use l1_deposit_intent/spend_and_mint as l1_deposit_intent -use mocktail.{ - complete, mint, mock_pub_key_address, mock_tx_hash, mocktail_tx, ref_tx_in, - ref_tx_in_inline_datum, required_signer_hash, tx_in, tx_in_inline_datum, - tx_out, tx_out_inline_datum, -} -use tests/utils.{ - mock_app_oracle, mock_app_oracle_address, mock_app_oracle_datum, - mock_deposit_intent_datum, mock_deposit_m_value, - mock_l1_deposit_intent_script_hash, mock_message, mock_operation_key, - mock_operator_shares, mock_signatures, mock_total_deposited, mock_total_shares, - mock_user_account, mock_vault_equity, mock_vault_nft, mock_vault_oracle_datum, - mock_vault_script_hash, -} -use types.{ - BurnIntent, IntentRedeemerL1, SharesInsert, SharesRecordEntry, - VaultOracleDatum, -} - -// ========== BurnIntent Tests ========== -// Spec: -// - Signed by operation_key from app_oracle -// - L1DepositIntent is burnt with total batched amount -// - Vault Oracle input with datum (identified by vault_oracle_nft) -// - Vault Oracle output with updated datum: -// - total_shares += sum(cal_shares) -// - total_deposited += sum(intent_usd_value) -// - shares_merkle_root updated -// - Deposit value sent to vault -// -// NOTE on indices in BurnIntent redeemer: -// The actual index values are NOT used in process_batched_deposit_intent_validation. -// Only the LENGTH of indices matters - it acts as a counter to ensure the correct number -// of deposit intent UTxOs are processed. The index values are discarded with `_output_index`. -// See deposit_utils.ak: `[_output_index, ..rest_of_indices]` -// This means [2], [0], [99] would all work the same for a single intent since length = 1. - -// Prices from mock_message: ADA=2, USDM=1 (used in price verification) - -// mock_deposit_m_value: 1749190790 ADA + 143533706 USDM -// USD value = 1749190790 * 2 + 143533706 * 1 = 3641915286 -const deposit_usd_value = 3641915286 - -fn computed_shares() -> Int { - cal_shares_amount(deposit_usd_value, mock_vault_equity, mock_total_shares) -} - -fn build_vault_oracle_input_datum() -> VaultOracleDatum { - mock_vault_oracle_datum -} - -fn build_vault_oracle_output_datum( - cal_shares: Int, - usd_value: Int, - new_merkle_root: ByteArray, -) -> VaultOracleDatum { - // Depositor is non-operator, so operator_shares_added = 0 - // operator_shares = operator_shares + operator_shares_added - // = 0 + 0 = 0 - VaultOracleDatum { - ..mock_vault_oracle_datum, - total_shares: mock_total_shares + cal_shares, - operator_shares: mock_operator_shares, - total_deposited: mock_total_deposited + usd_value, - shares_merkle_root: new_merkle_root, - } -} - -fn build_mpf_insert_action(_depositor_account, _cal_shares: Int, _usd_value: Int) { - // new_value is computed in deposit_utils, not passed in redeemer - SharesInsert { proof: [] } -} - -fn compute_new_merkle_root( - depositor_account, - cal_shares: Int, - usd_value: Int, -) -> ByteArray { - // Use Account directly as MPF key - let mpf_key = cbor.serialise(depositor_account) - let entry = - SharesRecordEntry { shares: cal_shares, total_deposited: usd_value } - let mpf_value = cbor.serialise(entry) - mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) -} - -type BurnIntentTestCase { - is_vault_oracle_input_present: Bool, - is_vault_oracle_output_correct: Bool, - is_app_oracle_ref_present: Bool, - is_deposit_sent_to_vault: Bool, - is_intent_burn_correct: Bool, - is_operation_signed: Bool, -} - -fn mock_burn_intent_tx(test_case: BurnIntentTestCase) -> Transaction { - let BurnIntentTestCase { - is_vault_oracle_input_present, - is_vault_oracle_output_correct, - is_app_oracle_ref_present, - is_deposit_sent_to_vault, - is_intent_burn_correct, - is_operation_signed, - } = test_case - - let policy_id = mock_l1_deposit_intent_script_hash - let depositor_account = mock_user_account - let cal_shares = computed_shares() - let new_merkle_root = - compute_new_merkle_root(depositor_account, cal_shares, deposit_usd_value) - - // Vault Oracle values - let vault_oracle_address = from_script(mock_vault_nft) - let vault_oracle_input_value = - from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) - let vault_oracle_output_value = - from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) - - let vault_oracle_output_datum = - if is_vault_oracle_output_correct { - build_vault_oracle_output_datum( - cal_shares, - deposit_usd_value, - new_merkle_root, - ) - } else { - // Incorrect: don't update total_shares - mock_vault_oracle_datum - } - - // App Oracle reference input - let app_oracle_ref_value = - from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) - - // Intent input - let intent_input_value = - from_asset_list(mock_deposit_m_value) |> add(policy_id, "", 1) - - // Vault output (receives deposit) - let vault_address = from_script(mock_vault_script_hash) - let vault_output_value = - if is_deposit_sent_to_vault { - from_asset_list(mock_deposit_m_value) - } else { - from_asset("", "", 1_000_000) - } - - // Burn amount - let burn_amount = - if is_intent_burn_correct { - -1 - } else { - -2 - } - - mocktail_tx() - // Input matching utxo_ref in mock_message: mock_utxo_ref(0, 0) - |> tx_in( - True, - mock_tx_hash(0), - 0, - from_asset("", "", 2_000_000), - mock_pub_key_address(99, None), - ) - // Vault Oracle input - |> tx_in( - is_vault_oracle_input_present, - mock_tx_hash(10), - 0, - vault_oracle_input_value, - vault_oracle_address, - ) - |> tx_in_inline_datum( - is_vault_oracle_input_present, - build_vault_oracle_input_datum(), - ) - // Intent input - |> tx_in( - True, - mock_tx_hash(20), - 0, - intent_input_value, - from_script(policy_id), - ) - |> tx_in_inline_datum(True, mock_deposit_intent_datum) - // App Oracle reference input - |> ref_tx_in( - is_app_oracle_ref_present, - mock_tx_hash(30), - 0, - app_oracle_ref_value, - mock_app_oracle_address, - ) - |> ref_tx_in_inline_datum(is_app_oracle_ref_present, mock_app_oracle_datum) - // Vault Oracle output - |> tx_out(True, vault_oracle_address, vault_oracle_output_value) - |> tx_out_inline_datum(True, vault_oracle_output_datum) - // Vault output (receives deposit) - |> tx_out(True, vault_address, vault_output_value) - // Burn intent token - |> mint(True, burn_amount, policy_id, "") - // Signed by operation_key - |> required_signer_hash(is_operation_signed, mock_operation_key) - |> complete() -} - -fn build_redeemer() -> IntentRedeemerL1 { - let depositor_account = mock_user_account - let cal_shares = computed_shares() - let mpf_action = - build_mpf_insert_action(depositor_account, cal_shares, deposit_usd_value) - // Index 2 because: [0]=utxo_ref_input, [1]=vault_oracle_input, [2]=intent_input - BurnIntent([2], mock_message, mock_signatures, [mpf_action]) -} - -// Success: All conditions met -test s2_mint_burn_intent_success() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_deposit_sent_to_vault: True, - is_intent_burn_correct: True, - is_operation_signed: True, - }, - ) - - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Missing vault oracle input -test s2_mint_burn_intent_fail_no_vault_oracle_input() fail { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: False, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_deposit_sent_to_vault: True, - is_intent_burn_correct: True, - is_operation_signed: True, - }, - ) - - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Incorrect vault oracle output datum -test s2_mint_burn_intent_fail_wrong_oracle_output() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: False, - is_app_oracle_ref_present: True, - is_deposit_sent_to_vault: True, - is_intent_burn_correct: True, - is_operation_signed: True, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Missing app oracle reference input -test s2_mint_burn_intent_fail_no_app_oracle_ref() fail { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: False, - is_deposit_sent_to_vault: True, - is_intent_burn_correct: True, - is_operation_signed: True, - }, - ) - - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Deposit not sent to vault -test s2_mint_burn_intent_fail_deposit_not_sent() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_deposit_sent_to_vault: False, - is_intent_burn_correct: True, - is_operation_signed: True, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Incorrect intent burn count -test s2_mint_burn_intent_fail_wrong_burn_count() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_deposit_sent_to_vault: True, - is_intent_burn_correct: False, - is_operation_signed: True, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Not signed by operation_key -test s2_mint_burn_intent_fail_not_signed() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_deposit_sent_to_vault: True, - is_intent_burn_correct: True, - is_operation_signed: False, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_deposit_intent_script_hash, - tx, - ) -} +// use aiken/cbor +// use aiken/merkle_patricia_forestry as mpf +// use cardano/address.{from_script} +// use cardano/assets.{add, from_asset, from_asset_list} +// use cardano/transaction.{Transaction} +// use deposit_utils.{cal_shares_amount} +// use l1_deposit_intent/spend_and_mint as l1_deposit_intent +// use mocktail.{ +// complete, mint, mock_pub_key_address, mock_tx_hash, mocktail_tx, ref_tx_in, +// ref_tx_in_inline_datum, required_signer_hash, tx_in, tx_in_inline_datum, +// tx_out, tx_out_inline_datum, +// } +// use tests/utils.{ +// mock_app_oracle, mock_app_oracle_address, mock_app_oracle_datum, +// mock_deposit_intent_datum, mock_deposit_m_value, +// mock_l1_deposit_intent_script_hash, mock_message, mock_operation_key, +// mock_operator_shares, mock_signatures, mock_total_deposited, mock_total_shares, +// mock_user_account, mock_vault_equity, mock_vault_nft, mock_vault_oracle_datum, +// mock_vault_script_hash, +// } +// use types.{ +// BurnIntent, IntentRedeemerL1, SharesInsert, SharesRecordEntry, +// VaultOracleDatum, +// } + +// // ========== BurnIntent Tests ========== +// // Spec: +// // - Signed by operation_key from app_oracle +// // - L1DepositIntent is burnt with total batched amount +// // - Vault Oracle input with datum (identified by vault_oracle_nft) +// // - Vault Oracle output with updated datum: +// // - total_shares += sum(cal_shares) +// // - total_deposited += sum(intent_usd_value) +// // - shares_merkle_root updated +// // - Deposit value sent to vault +// // +// // NOTE on indices in BurnIntent redeemer: +// // The actual index values are NOT used in process_batched_deposit_intent_validation. +// // Only the LENGTH of indices matters - it acts as a counter to ensure the correct number +// // of deposit intent UTxOs are processed. The index values are discarded with `_output_index`. +// // See deposit_utils.ak: `[_output_index, ..rest_of_indices]` +// // This means [2], [0], [99] would all work the same for a single intent since length = 1. + +// // Prices from mock_message: ADA=2, USDM=1 (used in price verification) + +// // mock_deposit_m_value: 1749190790 ADA + 143533706 USDM +// // USD value = 1749190790 * 2 + 143533706 * 1 = 3641915286 +// const deposit_usd_value = 3641915286 + +// fn computed_shares() -> Int { +// cal_shares_amount(deposit_usd_value, mock_vault_equity, mock_total_shares) +// } + +// fn build_vault_oracle_input_datum() -> VaultOracleDatum { +// mock_vault_oracle_datum +// } + +// fn build_vault_oracle_output_datum( +// cal_shares: Int, +// usd_value: Int, +// new_merkle_root: ByteArray, +// ) -> VaultOracleDatum { +// // Depositor is non-operator, so operator_shares_added = 0 +// // operator_shares = operator_shares + operator_shares_added +// // = 0 + 0 = 0 +// VaultOracleDatum { +// ..mock_vault_oracle_datum, +// total_shares: mock_total_shares + cal_shares, +// operator_shares: mock_operator_shares, +// total_deposited: mock_total_deposited + usd_value, +// shares_merkle_root: new_merkle_root, +// } +// } + +// fn build_mpf_insert_action(_depositor_account, _cal_shares: Int, _usd_value: Int) { +// // new_value is computed in deposit_utils, not passed in redeemer +// SharesInsert { proof: [] } +// } + +// fn compute_new_merkle_root( +// depositor_account, +// cal_shares: Int, +// usd_value: Int, +// ) -> ByteArray { +// // Use Account directly as MPF key +// let mpf_key = cbor.serialise(depositor_account) +// let entry = +// SharesRecordEntry { shares: cal_shares, total_deposited: usd_value } +// let mpf_value = cbor.serialise(entry) +// mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) +// } + +// type BurnIntentTestCase { +// is_vault_oracle_input_present: Bool, +// is_vault_oracle_output_correct: Bool, +// is_app_oracle_ref_present: Bool, +// is_deposit_sent_to_vault: Bool, +// is_intent_burn_correct: Bool, +// is_operation_signed: Bool, +// } + +// fn mock_burn_intent_tx(test_case: BurnIntentTestCase) -> Transaction { +// let BurnIntentTestCase { +// is_vault_oracle_input_present, +// is_vault_oracle_output_correct, +// is_app_oracle_ref_present, +// is_deposit_sent_to_vault, +// is_intent_burn_correct, +// is_operation_signed, +// } = test_case + +// let policy_id = mock_l1_deposit_intent_script_hash +// let depositor_account = mock_user_account +// let cal_shares = computed_shares() +// let new_merkle_root = +// compute_new_merkle_root(depositor_account, cal_shares, deposit_usd_value) + +// // Vault Oracle values +// let vault_oracle_address = from_script(mock_vault_nft) +// let vault_oracle_input_value = +// from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) +// let vault_oracle_output_value = +// from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) + +// let vault_oracle_output_datum = +// if is_vault_oracle_output_correct { +// build_vault_oracle_output_datum( +// cal_shares, +// deposit_usd_value, +// new_merkle_root, +// ) +// } else { +// // Incorrect: don't update total_shares +// mock_vault_oracle_datum +// } + +// // App Oracle reference input +// let app_oracle_ref_value = +// from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) + +// // Intent input +// let intent_input_value = +// from_asset_list(mock_deposit_m_value) |> add(policy_id, "", 1) + +// // Vault output (receives deposit) +// let vault_address = from_script(mock_vault_script_hash) +// let vault_output_value = +// if is_deposit_sent_to_vault { +// from_asset_list(mock_deposit_m_value) +// } else { +// from_asset("", "", 1_000_000) +// } + +// // Burn amount +// let burn_amount = +// if is_intent_burn_correct { +// -1 +// } else { +// -2 +// } + +// mocktail_tx() +// // Input matching utxo_ref in mock_message: mock_utxo_ref(0, 0) +// |> tx_in( +// True, +// mock_tx_hash(0), +// 0, +// from_asset("", "", 2_000_000), +// mock_pub_key_address(99, None), +// ) +// // Vault Oracle input +// |> tx_in( +// is_vault_oracle_input_present, +// mock_tx_hash(10), +// 0, +// vault_oracle_input_value, +// vault_oracle_address, +// ) +// |> tx_in_inline_datum( +// is_vault_oracle_input_present, +// build_vault_oracle_input_datum(), +// ) +// // Intent input +// |> tx_in( +// True, +// mock_tx_hash(20), +// 0, +// intent_input_value, +// from_script(policy_id), +// ) +// |> tx_in_inline_datum(True, mock_deposit_intent_datum) +// // App Oracle reference input +// |> ref_tx_in( +// is_app_oracle_ref_present, +// mock_tx_hash(30), +// 0, +// app_oracle_ref_value, +// mock_app_oracle_address, +// ) +// |> ref_tx_in_inline_datum(is_app_oracle_ref_present, mock_app_oracle_datum) +// // Vault Oracle output +// |> tx_out(True, vault_oracle_address, vault_oracle_output_value) +// |> tx_out_inline_datum(True, vault_oracle_output_datum) +// // Vault output (receives deposit) +// |> tx_out(True, vault_address, vault_output_value) +// // Burn intent token +// |> mint(True, burn_amount, policy_id, "") +// // Signed by operation_key +// |> required_signer_hash(is_operation_signed, mock_operation_key) +// |> complete() +// } + +// fn build_redeemer() -> IntentRedeemerL1 { +// let depositor_account = mock_user_account +// let cal_shares = computed_shares() +// let mpf_action = +// build_mpf_insert_action(depositor_account, cal_shares, deposit_usd_value) +// // Index 2 because: [0]=utxo_ref_input, [1]=vault_oracle_input, [2]=intent_input +// BurnIntent([2], mock_message, mock_signatures, [mpf_action]) +// } + +// // Success: All conditions met +// test s2_mint_burn_intent_success() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_deposit_sent_to_vault: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// }, +// ) + +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Missing vault oracle input +// test s2_mint_burn_intent_fail_no_vault_oracle_input() fail { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: False, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_deposit_sent_to_vault: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// }, +// ) + +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Incorrect vault oracle output datum +// test s2_mint_burn_intent_fail_wrong_oracle_output() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: False, +// is_app_oracle_ref_present: True, +// is_deposit_sent_to_vault: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Missing app oracle reference input +// test s2_mint_burn_intent_fail_no_app_oracle_ref() fail { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: False, +// is_deposit_sent_to_vault: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// }, +// ) + +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Deposit not sent to vault +// test s2_mint_burn_intent_fail_deposit_not_sent() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_deposit_sent_to_vault: False, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Incorrect intent burn count +// test s2_mint_burn_intent_fail_wrong_burn_count() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_deposit_sent_to_vault: True, +// is_intent_burn_correct: False, +// is_operation_signed: True, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Not signed by operation_key +// test s2_mint_burn_intent_fail_not_signed() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_deposit_sent_to_vault: True, +// is_intent_burn_correct: True, +// is_operation_signed: False, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } diff --git a/validators/tests/l1_deposit_intent/mint.ak b/validators/tests/l1_deposit_intent/mint.ak index 469a067..f4c4581 100644 --- a/validators/tests/l1_deposit_intent/mint.ak +++ b/validators/tests/l1_deposit_intent/mint.ak @@ -1,271 +1,271 @@ -use cardano/address.{from_script} -use cardano/assets.{add, from_asset, from_asset_list} -use cardano/transaction.{Transaction} -use l1_deposit_intent/spend_and_mint as l1_deposit_intent -use mocktail.{ - complete, mint, mock_policy_id, mock_pub_key_hash, mock_tx_hash, mocktail_tx, - required_signer_hash, tx_in, tx_in_inline_datum, tx_out, tx_out_inline_datum, -} -use tests/utils.{ - mock_deposit_intent_datum, mock_deposit_m_value, - mock_l1_deposit_intent_script_hash, mock_user_trade_account, mock_vault_nft, -} -use types.{CancelIntent, DepositIntentDatum, MintIntent} - -// ========== MintIntent Tests ========== -// Spec: -// - Deposit amount > 0 -// - Net deposit value sent to L1DepositIntent address equals datum amount -// - No vault reference needed (user creates intent independently) - -type MintIntentTestCase { - is_token_minted_correctly: Bool, - is_value_deposited_correctly: Bool, - is_output_to_correct_address: Bool, -} - -fn mock_mint_intent_tx(test_case: MintIntentTestCase) -> Transaction { - let MintIntentTestCase { - is_token_minted_correctly, - is_value_deposited_correctly, - is_output_to_correct_address, - } = test_case - - let policy_id = mock_l1_deposit_intent_script_hash - let wrong_policy_id = mock_policy_id(999) - - let deposit_value = - if is_value_deposited_correctly { - from_asset_list(mock_deposit_m_value) - } else { - // Wrong value - less than datum amount - from_asset("", "", 1_000_000) - } - - let output_address = - if is_output_to_correct_address { - from_script(policy_id) - } else { - from_script(wrong_policy_id) - } - - let mint_amount = - if is_token_minted_correctly { - 1 - } else { - 2 - } - - let output_value = deposit_value |> add(policy_id, "", 1) - - mocktail_tx() - |> mint(True, mint_amount, policy_id, "") - |> tx_out(True, output_address, output_value) - |> tx_out_inline_datum(True, mock_deposit_intent_datum) - |> complete() -} - -// Success: Mint intent with correct token and value -test s2_mint_mint_intent_success() { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: True, - is_value_deposited_correctly: True, - is_output_to_correct_address: True, - }, - ) - - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Wrong mint amount (minted 2 instead of 1) -test s2_mint_mint_intent_fail_wrong_mint_amount() { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: False, - is_value_deposited_correctly: True, - is_output_to_correct_address: True, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Wrong deposit value (less than datum amount) -test s2_mint_mint_intent_fail_wrong_deposit_value() { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: True, - is_value_deposited_correctly: False, - is_output_to_correct_address: True, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Output to wrong address (not script address) -test s2_mint_mint_intent_fail_wrong_output_address() fail { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: True, - is_value_deposited_correctly: True, - is_output_to_correct_address: False, - }, - ) - - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// ========== CancelIntent Tests ========== -// Spec: -// - L1DepositIntent token is burnt -// - The intent UTxO value returned to depositor (refund) -// - Signed by the depositor -// - No vault interaction required - -type CancelIntentTestCase { - is_token_burnt_correctly: Bool, - is_signed_by_depositor: Bool, -} - -fn mock_cancel_intent_tx(test_case: CancelIntentTestCase) -> Transaction { - let CancelIntentTestCase { is_token_burnt_correctly, is_signed_by_depositor } = - test_case - - let policy_id = mock_l1_deposit_intent_script_hash - let depositor_pkh = mock_pub_key_hash(0) - let wrong_pkh = mock_pub_key_hash(999) - - let burn_amount = - if is_token_burnt_correctly { - -1 - } else { - -2 - } - - let signer_pkh = - if is_signed_by_depositor { - depositor_pkh - } else { - wrong_pkh - } - - let input_value = - from_asset_list(mock_deposit_m_value) |> add(policy_id, "", 1) - - mocktail_tx() - |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) - |> tx_in_inline_datum(True, mock_deposit_intent_datum) - |> mint(True, burn_amount, policy_id, "") - |> required_signer_hash(True, signer_pkh) - |> complete() -} - -// Success: Cancel intent with correct burn and signature -test s2_mint_cancel_intent_success() { - let tx = - mock_cancel_intent_tx( - CancelIntentTestCase { - is_token_burnt_correctly: True, - is_signed_by_depositor: True, - }, - ) - - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - CancelIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Wrong burn amount (burnt 2 instead of 1) -test s2_mint_cancel_intent_fail_wrong_burn_amount() { - let tx = - mock_cancel_intent_tx( - CancelIntentTestCase { - is_token_burnt_correctly: False, - is_signed_by_depositor: True, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - CancelIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Fail: Not signed by depositor -test s2_mint_cancel_intent_fail_not_signed_by_depositor() { - let tx = - mock_cancel_intent_tx( - CancelIntentTestCase { - is_token_burnt_correctly: True, - is_signed_by_depositor: False, - }, - ) - - !l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - CancelIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} - -// Note: Spec says "Deposit amount > 0" but this is enforced by backend, not on-chain. -// Empty deposit technically passes validation because value_geq(any_value, empty_value) == True. -// This test documents the actual on-chain behavior. -test s2_mint_mint_intent_with_empty_deposit_passes() { - let policy_id = mock_l1_deposit_intent_script_hash - let empty_m_value = [] - let empty_datum = - DepositIntentDatum { - depositor: mock_user_trade_account, - deposit_amount: empty_m_value, - } - - let output_value = from_asset("", "", 2_000_000) |> add(policy_id, "", 1) - - let tx = - mocktail_tx() - |> mint(True, 1, policy_id, "") - |> tx_out(True, from_script(policy_id), output_value) - |> tx_out_inline_datum(True, empty_datum) - |> complete() - - // Empty deposit passes on-chain validation (backend restricts accepted assets) - l1_deposit_intent.l1_deposit_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_deposit_intent_script_hash, - tx, - ) -} +// use cardano/address.{from_script} +// use cardano/assets.{add, from_asset, from_asset_list} +// use cardano/transaction.{Transaction} +// use l1_deposit_intent/spend_and_mint as l1_deposit_intent +// use mocktail.{ +// complete, mint, mock_policy_id, mock_pub_key_hash, mock_tx_hash, mocktail_tx, +// required_signer_hash, tx_in, tx_in_inline_datum, tx_out, tx_out_inline_datum, +// } +// use tests/utils.{ +// mock_deposit_intent_datum, mock_deposit_m_value, +// mock_l1_deposit_intent_script_hash, mock_user_trade_account, mock_vault_nft, +// } +// use types.{CancelIntent, DepositIntentDatum, MintIntent} + +// // ========== MintIntent Tests ========== +// // Spec: +// // - Deposit amount > 0 +// // - Net deposit value sent to L1DepositIntent address equals datum amount +// // - No vault reference needed (user creates intent independently) + +// type MintIntentTestCase { +// is_token_minted_correctly: Bool, +// is_value_deposited_correctly: Bool, +// is_output_to_correct_address: Bool, +// } + +// fn mock_mint_intent_tx(test_case: MintIntentTestCase) -> Transaction { +// let MintIntentTestCase { +// is_token_minted_correctly, +// is_value_deposited_correctly, +// is_output_to_correct_address, +// } = test_case + +// let policy_id = mock_l1_deposit_intent_script_hash +// let wrong_policy_id = mock_policy_id(999) + +// let deposit_value = +// if is_value_deposited_correctly { +// from_asset_list(mock_deposit_m_value) +// } else { +// // Wrong value - less than datum amount +// from_asset("", "", 1_000_000) +// } + +// let output_address = +// if is_output_to_correct_address { +// from_script(policy_id) +// } else { +// from_script(wrong_policy_id) +// } + +// let mint_amount = +// if is_token_minted_correctly { +// 1 +// } else { +// 2 +// } + +// let output_value = deposit_value |> add(policy_id, "", 1) + +// mocktail_tx() +// |> mint(True, mint_amount, policy_id, "") +// |> tx_out(True, output_address, output_value) +// |> tx_out_inline_datum(True, mock_deposit_intent_datum) +// |> complete() +// } + +// // Success: Mint intent with correct token and value +// test s2_mint_mint_intent_success() { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: True, +// is_value_deposited_correctly: True, +// is_output_to_correct_address: True, +// }, +// ) + +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Wrong mint amount (minted 2 instead of 1) +// test s2_mint_mint_intent_fail_wrong_mint_amount() { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: False, +// is_value_deposited_correctly: True, +// is_output_to_correct_address: True, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Wrong deposit value (less than datum amount) +// test s2_mint_mint_intent_fail_wrong_deposit_value() { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: True, +// is_value_deposited_correctly: False, +// is_output_to_correct_address: True, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Output to wrong address (not script address) +// test s2_mint_mint_intent_fail_wrong_output_address() fail { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: True, +// is_value_deposited_correctly: True, +// is_output_to_correct_address: False, +// }, +// ) + +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // ========== CancelIntent Tests ========== +// // Spec: +// // - L1DepositIntent token is burnt +// // - The intent UTxO value returned to depositor (refund) +// // - Signed by the depositor +// // - No vault interaction required + +// type CancelIntentTestCase { +// is_token_burnt_correctly: Bool, +// is_signed_by_depositor: Bool, +// } + +// fn mock_cancel_intent_tx(test_case: CancelIntentTestCase) -> Transaction { +// let CancelIntentTestCase { is_token_burnt_correctly, is_signed_by_depositor } = +// test_case + +// let policy_id = mock_l1_deposit_intent_script_hash +// let depositor_pkh = mock_pub_key_hash(0) +// let wrong_pkh = mock_pub_key_hash(999) + +// let burn_amount = +// if is_token_burnt_correctly { +// -1 +// } else { +// -2 +// } + +// let signer_pkh = +// if is_signed_by_depositor { +// depositor_pkh +// } else { +// wrong_pkh +// } + +// let input_value = +// from_asset_list(mock_deposit_m_value) |> add(policy_id, "", 1) + +// mocktail_tx() +// |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) +// |> tx_in_inline_datum(True, mock_deposit_intent_datum) +// |> mint(True, burn_amount, policy_id, "") +// |> required_signer_hash(True, signer_pkh) +// |> complete() +// } + +// // Success: Cancel intent with correct burn and signature +// test s2_mint_cancel_intent_success() { +// let tx = +// mock_cancel_intent_tx( +// CancelIntentTestCase { +// is_token_burnt_correctly: True, +// is_signed_by_depositor: True, +// }, +// ) + +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// CancelIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Wrong burn amount (burnt 2 instead of 1) +// test s2_mint_cancel_intent_fail_wrong_burn_amount() { +// let tx = +// mock_cancel_intent_tx( +// CancelIntentTestCase { +// is_token_burnt_correctly: False, +// is_signed_by_depositor: True, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// CancelIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Not signed by depositor +// test s2_mint_cancel_intent_fail_not_signed_by_depositor() { +// let tx = +// mock_cancel_intent_tx( +// CancelIntentTestCase { +// is_token_burnt_correctly: True, +// is_signed_by_depositor: False, +// }, +// ) + +// !l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// CancelIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } + +// // Note: Spec says "Deposit amount > 0" but this is enforced by backend, not on-chain. +// // Empty deposit technically passes validation because value_geq(any_value, empty_value) == True. +// // This test documents the actual on-chain behavior. +// test s2_mint_mint_intent_with_empty_deposit_passes() { +// let policy_id = mock_l1_deposit_intent_script_hash +// let empty_m_value = [] +// let empty_datum = +// DepositIntentDatum { +// depositor: mock_user_trade_account, +// deposit_amount: empty_m_value, +// } + +// let output_value = from_asset("", "", 2_000_000) |> add(policy_id, "", 1) + +// let tx = +// mocktail_tx() +// |> mint(True, 1, policy_id, "") +// |> tx_out(True, from_script(policy_id), output_value) +// |> tx_out_inline_datum(True, empty_datum) +// |> complete() + +// // Empty deposit passes on-chain validation (backend restricts accepted assets) +// l1_deposit_intent.l1_deposit_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_deposit_intent_script_hash, +// tx, +// ) +// } diff --git a/validators/tests/l1_deposit_intent/spend.ak b/validators/tests/l1_deposit_intent/spend.ak index b69c865..4edc051 100644 --- a/validators/tests/l1_deposit_intent/spend.ak +++ b/validators/tests/l1_deposit_intent/spend.ak @@ -1,110 +1,110 @@ -use cardano/address.{from_script} -use cardano/assets.{add, from_asset} -use cardano/transaction.{Mint, Transaction} -use l1_deposit_intent/spend_and_mint as l1_deposit_intent -use mocktail.{ - add_redeemer, complete, mint, mock_script_hash, mock_tx_hash, mock_utxo_ref, - mocktail_tx, tx_in, tx_in_inline_datum, -} -use tests/utils.{ - mock_deposit_intent_datum, mock_l1_deposit_intent_script_hash, mock_vault_nft, -} -use types.{BurnIntent, MintIntent} +// use cardano/address.{from_script} +// use cardano/assets.{add, from_asset} +// use cardano/transaction.{Mint, Transaction} +// use l1_deposit_intent/spend_and_mint as l1_deposit_intent +// use mocktail.{ +// add_redeemer, complete, mint, mock_script_hash, mock_tx_hash, mock_utxo_ref, +// mocktail_tx, tx_in, tx_in_inline_datum, +// } +// use tests/utils.{ +// mock_deposit_intent_datum, mock_l1_deposit_intent_script_hash, mock_vault_nft, +// } +// use types.{BurnIntent, MintIntent} -// ========== ProcessIntent (Spend) Tests ========== -// Spec: L1DepositIntent is burnt (spend just validates that mint redeemer is BurnIntent) +// // ========== ProcessIntent (Spend) Tests ========== +// // Spec: L1DepositIntent is burnt (spend just validates that mint redeemer is BurnIntent) -type ProcessIntentTestCase { - is_mint_policy_correct: Bool, - is_mint_redeemer_burn_intent: Bool, -} +// type ProcessIntentTestCase { +// is_mint_policy_correct: Bool, +// is_mint_redeemer_burn_intent: Bool, +// } -fn mock_process_intent_tx(test_case: ProcessIntentTestCase) -> Transaction { - let ProcessIntentTestCase { - is_mint_policy_correct, - is_mint_redeemer_burn_intent, - } = test_case +// fn mock_process_intent_tx(test_case: ProcessIntentTestCase) -> Transaction { +// let ProcessIntentTestCase { +// is_mint_policy_correct, +// is_mint_redeemer_burn_intent, +// } = test_case - let policy_id = mock_l1_deposit_intent_script_hash - let wrong_policy_id = mock_script_hash(999) +// let policy_id = mock_l1_deposit_intent_script_hash +// let wrong_policy_id = mock_script_hash(999) - let mint_redeemer: Data = - if is_mint_redeemer_burn_intent { - BurnIntent([], #"", [], []) - } else { - MintIntent - } +// let mint_redeemer: Data = +// if is_mint_redeemer_burn_intent { +// BurnIntent([], #"", [], []) +// } else { +// MintIntent +// } - let mint_policy = - if is_mint_policy_correct { - policy_id - } else { - wrong_policy_id - } +// let mint_policy = +// if is_mint_policy_correct { +// policy_id +// } else { +// wrong_policy_id +// } - let input_value = from_asset(policy_id, "", 1) |> add("", "", 2_000_000) +// let input_value = from_asset(policy_id, "", 1) |> add("", "", 2_000_000) - mocktail_tx() - |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) - |> tx_in_inline_datum(True, mock_deposit_intent_datum) - |> mint(True, -1, mint_policy, "") - |> complete() - |> add_redeemer(True, Pair(Mint(mint_policy), mint_redeemer)) -} +// mocktail_tx() +// |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) +// |> tx_in_inline_datum(True, mock_deposit_intent_datum) +// |> mint(True, -1, mint_policy, "") +// |> complete() +// |> add_redeemer(True, Pair(Mint(mint_policy), mint_redeemer)) +// } -// Success: Spend intent with correct BurnIntent redeemer -test s2_spend_process_intent_success() { - let tx = - mock_process_intent_tx( - ProcessIntentTestCase { - is_mint_policy_correct: True, - is_mint_redeemer_burn_intent: True, - }, - ) +// // Success: Spend intent with correct BurnIntent redeemer +// test s2_spend_process_intent_success() { +// let tx = +// mock_process_intent_tx( +// ProcessIntentTestCase { +// is_mint_policy_correct: True, +// is_mint_redeemer_burn_intent: True, +// }, +// ) - l1_deposit_intent.l1_deposit_intent.spend( - mock_vault_nft, - None, - None, - mock_utxo_ref(0, 0), - tx, - ) -} +// l1_deposit_intent.l1_deposit_intent.spend( +// mock_vault_nft, +// None, +// None, +// mock_utxo_ref(0, 0), +// tx, +// ) +// } -// Fail: Wrong mint policy (different script) -test s2_spend_process_intent_fail_wrong_policy() fail { - let tx = - mock_process_intent_tx( - ProcessIntentTestCase { - is_mint_policy_correct: False, - is_mint_redeemer_burn_intent: True, - }, - ) +// // Fail: Wrong mint policy (different script) +// test s2_spend_process_intent_fail_wrong_policy() fail { +// let tx = +// mock_process_intent_tx( +// ProcessIntentTestCase { +// is_mint_policy_correct: False, +// is_mint_redeemer_burn_intent: True, +// }, +// ) - l1_deposit_intent.l1_deposit_intent.spend( - mock_vault_nft, - None, - None, - mock_utxo_ref(0, 0), - tx, - ) -} +// l1_deposit_intent.l1_deposit_intent.spend( +// mock_vault_nft, +// None, +// None, +// mock_utxo_ref(0, 0), +// tx, +// ) +// } -// Fail: MintIntent redeemer instead of BurnIntent -test s2_spend_process_intent_fail_wrong_redeemer() fail { - let tx = - mock_process_intent_tx( - ProcessIntentTestCase { - is_mint_policy_correct: True, - is_mint_redeemer_burn_intent: False, - }, - ) +// // Fail: MintIntent redeemer instead of BurnIntent +// test s2_spend_process_intent_fail_wrong_redeemer() fail { +// let tx = +// mock_process_intent_tx( +// ProcessIntentTestCase { +// is_mint_policy_correct: True, +// is_mint_redeemer_burn_intent: False, +// }, +// ) - l1_deposit_intent.l1_deposit_intent.spend( - mock_vault_nft, - None, - None, - mock_utxo_ref(0, 0), - tx, - ) -} +// l1_deposit_intent.l1_deposit_intent.spend( +// mock_vault_nft, +// None, +// None, +// mock_utxo_ref(0, 0), +// tx, +// ) +// } diff --git a/validators/tests/l1_withdrawal_intent/burn_intent.ak b/validators/tests/l1_withdrawal_intent/burn_intent.ak index 8904732..38ea425 100644 --- a/validators/tests/l1_withdrawal_intent/burn_intent.ak +++ b/validators/tests/l1_withdrawal_intent/burn_intent.ak @@ -1,652 +1,658 @@ -use aiken/cbor -use aiken/merkle_patricia_forestry as mpf -use cardano/address.{from_script} -use cardano/assets.{add, from_asset} -use cardano/transaction.{Transaction} -use l1_withdrawal_intent/spend_and_mint as l1_withdrawal_intent -use mocktail.{ - complete, mint, mock_pub_key_address, mock_tx_hash, mocktail_tx, ref_tx_in, - ref_tx_in_inline_datum, required_signer_hash, tx_in, tx_in_inline_datum, - tx_out, tx_out_inline_datum, -} -use tests/utils.{ - mock_app_oracle, mock_app_oracle_address, mock_app_oracle_datum, - mock_l1_withdrawal_intent_script_hash, mock_message, mock_operation_key, - mock_operator_account, mock_operator_inner_account, mock_operator_key, - mock_operator_shares, mock_signatures, mock_total_deposited, mock_total_shares, - mock_user_account, mock_user_trade_account, mock_vault_equity, mock_vault_nft, - mock_vault_oracle_datum, mock_vault_script_hash, null_hash, -} -use types.{ - BurnIntent, IntentRedeemerL1, SharesDelete, SharesRecordEntry, - VaultOracleDatum, WithdrawalIntentDatum, -} -use withdraw_utils.{convert_shares_to_usd} - -// ========== BurnIntent Tests ========== -// Spec: -// - Signed by operation_key from app_oracle OR operator_key from vault oracle -// - L1WithdrawalIntent is burnt with total batched amount -// - Vault Oracle input with datum (identified by vault_oracle_nft) -// - Vault Oracle output with updated datum: -// - total_shares = total_shares - sum(shares_to_redeem) + sum(fee_shares) -// - operator_shares += sum(fee_shares) -// - total_deposited -= sum(cost_basis) -// - shares_merkle_root updated -// - total_fee_share_collected += sum(fee_shares) -// - Vault unlocks net_payout to user -// -// TODO: These tests require a mock_message that includes vault_oracle_nft with price 0. -// The current mock_message only has ADA=2, USDM=1. The convert_value_to_usd function -// fails when the vault value contains the NFT without a corresponding price. -// Update mock_message and mock_signatures in tests/utils.ak to include the NFT price. -// -// Prices from mock_message: ADA=2, USDM=1 (TODO: add vault_oracle_nft=0) - -// Test values: -// - shares_to_redeem = 1_250_000_000_000_000 (to get integer gross_value) -// - gross_value = shares_to_redeem * vault_equity / total_shares -// = 1_250_000_000_000_000 * 2_400_000_000 / 3_000_000_000_000_000 -// = 1_000_000_000 USD -// - cost_basis = 1_000_000_000 (no profit, so fee = 0) -// - With operator_fee_rate_bp = 0, fee = 0 anyway -// - user_receives = gross_value = 1_000_000_000 USD -// - In ADA (price=2): 500_000_000 ADA - -const mock_shares_to_redeem = 1_250_000_000_000_000 - -const mock_cost_basis = 1_000_000_000 - -fn mock_l1_withdrawal_datum() -> WithdrawalIntentDatum { - WithdrawalIntentDatum { - withdrawer: mock_user_trade_account, - shares_to_redeem: mock_shares_to_redeem, - } -} - -fn computed_gross_value() -> Int { - convert_shares_to_usd( - mock_shares_to_redeem, - mock_total_shares, - mock_vault_equity, - ) -} - -fn computed_user_receives() -> Int { - // fee = 0 since operator_fee_rate_bp = 0 - computed_gross_value() -} - -// Build initial merkle root with withdrawer's shares -fn build_initial_merkle_root() -> ByteArray { - // Use Account directly as MPF key - let mpf_key = cbor.serialise(mock_user_account) - let entry = - SharesRecordEntry { - shares: mock_shares_to_redeem, - total_deposited: mock_cost_basis, - } - let mpf_value = cbor.serialise(entry) - mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) -} - -fn build_vault_oracle_input_datum() -> VaultOracleDatum { - VaultOracleDatum { - ..mock_vault_oracle_datum, - shares_merkle_root: build_initial_merkle_root(), - } -} - -fn build_vault_oracle_output_datum( - new_merkle_root: ByteArray, - is_correct: Bool, -) -> VaultOracleDatum { - if is_correct { - // With operator_fee_rate_bp = 0, fee = 0 and fee_shares = 0 - // Withdrawer is non-operator, so operator_shares_withdrawn = 0 - // operator_shares = operator_shares - operator_shares_withdrawn + fee_shares - // = 0 - 0 + 0 = 0 - VaultOracleDatum { - ..mock_vault_oracle_datum, - total_shares: mock_total_shares - mock_shares_to_redeem, - operator_shares: mock_operator_shares, - total_deposited: mock_total_deposited - mock_cost_basis, - shares_merkle_root: new_merkle_root, - total_fee_share_collected: 0, - } - } else { - // Incorrect: don't update total_shares - mock_vault_oracle_datum - } -} - -fn build_shares_delete_action() -> types.SharesMPFAction { - let entry = - SharesRecordEntry { - shares: mock_shares_to_redeem, - total_deposited: mock_cost_basis, - } - let mpf_value = cbor.serialise(entry) - SharesDelete { proof: [], old_value: mpf_value } -} - -type BurnIntentTestCase { - is_vault_oracle_input_present: Bool, - is_vault_oracle_output_correct: Bool, - is_app_oracle_ref_present: Bool, - is_vault_unlock_correct: Bool, - is_intent_burn_correct: Bool, - is_operation_signed: Bool, - is_operator_signed: Bool, -} - -fn mock_burn_intent_tx(test_case: BurnIntentTestCase) -> Transaction { - let BurnIntentTestCase { - is_vault_oracle_input_present, - is_vault_oracle_output_correct, - is_app_oracle_ref_present, - is_vault_unlock_correct, - is_intent_burn_correct, - is_operation_signed, - is_operator_signed, - } = test_case - - let policy_id = mock_l1_withdrawal_intent_script_hash - let withdrawer_address = mock_pub_key_address(0, None) - let user_receives = computed_user_receives() - - // Vault Oracle + Vault combined (single UTxO holds both oracle datum and vault funds) - // Located at vault_script_hash (where vault funds are), identified by vault_oracle_nft - let vault_address = from_script(mock_vault_script_hash) - let ada_to_unlock = user_receives / 2 - - // The vault/oracle UTxO has: oracle NFT + actual vault funds - // Starting with 1 billion ADA in the vault - let vault_oracle_input_value = - from_asset(mock_vault_nft, "", 1) |> add("", "", 1_000_000_000) - - // After full withdrawal (SharesDelete), merkle root becomes empty - let new_merkle_root = null_hash - - let vault_oracle_output_datum = - build_vault_oracle_output_datum( - new_merkle_root, - is_vault_oracle_output_correct, - ) - - // Vault output keeps remaining funds + oracle NFT - let vault_oracle_output_value = - if is_vault_unlock_correct { - // Vault keeps (1_000_000_000 - 500_000_000) = 500_000_000 ADA + oracle NFT - from_asset(mock_vault_nft, "", 1) - |> add("", "", 1_000_000_000 - ada_to_unlock) - } else { - // Incorrect: vault keeps all - from_asset(mock_vault_nft, "", 1) |> add("", "", 1_000_000_000) - } - - // App Oracle reference input - let app_oracle_ref_value = - from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) - - // Intent input (only has intent token + min ADA) - let intent_input_value = - from_asset("", "", 2_000_000) |> add(policy_id, "", 1) - - // Withdrawer receives the unlocked value - let withdrawer_output_value = - if is_vault_unlock_correct { - from_asset("", "", ada_to_unlock) - } else { - from_asset("", "", 1_000_000) - } - - // Burn amount - let burn_amount = - if is_intent_burn_correct { - -1 - } else { - -2 - } - - mocktail_tx() - // Input matching utxo_ref in mock_message: mock_utxo_ref(0, 0) - |> tx_in( - True, - mock_tx_hash(0), - 0, - from_asset("", "", 2_000_000), - mock_pub_key_address(99, None), - ) - // Vault Oracle + Vault combined input (single UTxO) - |> tx_in( - is_vault_oracle_input_present, - mock_tx_hash(10), - 0, - vault_oracle_input_value, - vault_address, - ) - |> tx_in_inline_datum( - is_vault_oracle_input_present, - build_vault_oracle_input_datum(), - ) - // Intent input - |> tx_in( - True, - mock_tx_hash(20), - 0, - intent_input_value, - from_script(policy_id), - ) - |> tx_in_inline_datum(True, mock_l1_withdrawal_datum()) - // App Oracle reference input - |> ref_tx_in( - is_app_oracle_ref_present, - mock_tx_hash(30), - 0, - app_oracle_ref_value, - mock_app_oracle_address, - ) - |> ref_tx_in_inline_datum(is_app_oracle_ref_present, mock_app_oracle_datum) - // Vault Oracle + Vault combined output - |> tx_out(True, vault_address, vault_oracle_output_value) - |> tx_out_inline_datum(True, vault_oracle_output_datum) - // Withdrawer output (receives unlocked funds) - |> tx_out(True, withdrawer_address, withdrawer_output_value) - // Burn intent token - |> mint(True, burn_amount, policy_id, "") - // Signed by operation_key and/or operator_key - |> required_signer_hash(is_operation_signed, mock_operation_key) - |> required_signer_hash(is_operator_signed, mock_operator_key) - |> complete() -} - -fn build_redeemer() -> IntentRedeemerL1 { - let mpf_action = build_shares_delete_action() - // Index 3 because: [0]=utxo_ref_input, [1]=vault_oracle_input, [2]=vault_input, [3]=intent_input - // Output index 1 because: [0]=vault_oracle_output, [1]=withdrawer_output - BurnIntent([1], mock_message, mock_signatures, [mpf_action]) -} - -// Success: All conditions met, signed by operation_key -test s3_mint_burn_intent_success() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: True, - is_intent_burn_correct: True, - is_operation_signed: True, - is_operator_signed: False, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Success: Signed by operator_key instead of operation_key -test s3_mint_burn_intent_success_operator_signed() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: True, - is_intent_burn_correct: True, - is_operation_signed: False, - is_operator_signed: True, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Missing vault oracle input -test s3_mint_burn_intent_fail_no_vault_oracle_input() fail { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: False, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: True, - is_intent_burn_correct: True, - is_operation_signed: True, - is_operator_signed: False, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Incorrect vault oracle output datum -test s3_mint_burn_intent_fail_wrong_oracle_output() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: False, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: True, - is_intent_burn_correct: True, - is_operation_signed: True, - is_operator_signed: False, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Missing app oracle reference input -test s3_mint_burn_intent_fail_no_app_oracle_ref() fail { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: False, - is_vault_unlock_correct: True, - is_intent_burn_correct: True, - is_operation_signed: True, - is_operator_signed: False, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Vault doesn't unlock correct amount to user -test s3_mint_burn_intent_fail_vault_unlock_mismatch() fail { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: False, - is_intent_burn_correct: True, - is_operation_signed: True, - is_operator_signed: False, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Incorrect intent burn count -test s3_mint_burn_intent_fail_wrong_burn_count() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: True, - is_intent_burn_correct: False, - is_operation_signed: True, - is_operator_signed: False, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Not signed by either operation_key or operator_key -test s3_mint_burn_intent_fail_not_authorized() { - let tx = - mock_burn_intent_tx( - BurnIntentTestCase { - is_vault_oracle_input_present: True, - is_vault_oracle_output_correct: True, - is_app_oracle_ref_present: True, - is_vault_unlock_correct: True, - is_intent_burn_correct: True, - is_operation_signed: False, - is_operator_signed: False, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// ========== Operator Min Deposit Percentage Tests ========== -// These tests verify that when the operator withdraws, they must maintain -// at least operator_min_deposit_rate_bp of total_shares. -// -// Test scenario: -// - operator_min_deposit_rate_bp = 10 (from mock_vault_oracle_datum) -// - Operator is the withdrawer (uses mock_operator_account) -// - Test values chosen to produce integer results with mock_vault_equity/prices -// -// For the tests below: -// - We use the same shares_to_redeem calculation as regular tests -// - total_shares = 1_000_000_000_000_000 (1 quadrillion) -// - operator_shares varies to test pass/fail scenarios - -// Operator shares for passing test: 20% of total, withdraw some but stay above 10% -const operator_test_total_shares = 1_000_000_000_000_000 - -// Shares to redeem (same calculation as regular tests to maintain vault unlock consistency) -// shares_to_redeem = 100_000_000_000_000 (10% of total) -const operator_shares_to_redeem = 100_000_000_000_000 - -// Cost basis matching the shares withdrawn (scaled proportionally) -const operator_cost_basis = 80_000_000 - -// Passing case: operator has 250T shares (25%), withdraws 100T, ends with 150T (16.6% of 900T) -// new_operator_shares = 150T, new_total_shares = 900T -// 150T * 100 >= 900T * 10 → TRUE -const operator_shares_pass = 250_000_000_000_000 - -// Failing case: operator has 150T shares (15%), withdraws 100T, ends with 50T (5.5% of 900T) -// new_operator_shares = 50T, new_total_shares = 900T -// 50T * 100 >= 900T * 10 → 5000T >= 9000T → FALSE -const operator_shares_fail = 150_000_000_000_000 - -fn mock_operator_withdrawal_datum() -> WithdrawalIntentDatum { - WithdrawalIntentDatum { - withdrawer: mock_operator_account, - shares_to_redeem: operator_shares_to_redeem, - } -} - -fn build_operator_initial_merkle_root() -> ByteArray { - // Use operator Account directly as MPF key (same as validator) - let mpf_key = cbor.serialise(mock_operator_inner_account) - let entry = - SharesRecordEntry { - shares: operator_shares_to_redeem, - total_deposited: operator_cost_basis, - } - let mpf_value = cbor.serialise(entry) - mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) -} - -fn build_operator_vault_oracle_input_datum( - operator_shares: Int, -) -> VaultOracleDatum { - VaultOracleDatum { - ..mock_vault_oracle_datum, - total_shares: operator_test_total_shares, - operator_shares: operator_shares, - total_deposited: mock_total_deposited, - shares_merkle_root: build_operator_initial_merkle_root(), - } -} - -fn build_operator_vault_oracle_output_datum( - operator_shares: Int, -) -> VaultOracleDatum { - // After withdrawal: - // - total_shares decreases by shares_to_redeem - // - operator_shares decreases by shares_to_redeem (operator is withdrawing) - // - No fee since operator_fee_rate_bp = 0 - let new_total_shares = operator_test_total_shares - operator_shares_to_redeem - let new_operator_shares = operator_shares - operator_shares_to_redeem - - VaultOracleDatum { - ..mock_vault_oracle_datum, - total_shares: new_total_shares, - operator_shares: new_operator_shares, - total_deposited: mock_total_deposited - operator_cost_basis, - shares_merkle_root: null_hash, - total_fee_share_collected: 0, - } -} - -fn build_operator_shares_delete_action() -> types.SharesMPFAction { - let entry = - SharesRecordEntry { - shares: operator_shares_to_redeem, - total_deposited: operator_cost_basis, - } - let mpf_value = cbor.serialise(entry) - SharesDelete { proof: [], old_value: mpf_value } -} - -fn mock_operator_burn_intent_tx(operator_shares: Int) -> Transaction { - let policy_id = mock_l1_withdrawal_intent_script_hash - let operator_address = mock_pub_key_address(10, None) - - // Calculate user receives (gross value with no fee) - // gross_value = shares_to_redeem * vault_equity / total_shares - let gross_value = - operator_shares_to_redeem * mock_vault_equity / operator_test_total_shares - let user_receives = gross_value - let ada_to_unlock = user_receives / 2 - - let vault_address = from_script(mock_vault_script_hash) - let vault_oracle_input_value = - from_asset(mock_vault_nft, "", 1) |> add("", "", 1_000_000_000) - - let vault_oracle_output_value = - from_asset(mock_vault_nft, "", 1) - |> add("", "", 1_000_000_000 - ada_to_unlock) - - let app_oracle_ref_value = - from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) - - let intent_input_value = - from_asset("", "", 2_000_000) |> add(policy_id, "", 1) - - let operator_output_value = from_asset("", "", ada_to_unlock) - - mocktail_tx() - // Input matching utxo_ref in mock_message - |> tx_in( - True, - mock_tx_hash(0), - 0, - from_asset("", "", 2_000_000), - mock_pub_key_address(99, None), - ) - // Vault Oracle input - |> tx_in(True, mock_tx_hash(10), 0, vault_oracle_input_value, vault_address) - |> tx_in_inline_datum( - True, - build_operator_vault_oracle_input_datum(operator_shares), - ) - // Intent input - |> tx_in( - True, - mock_tx_hash(20), - 0, - intent_input_value, - from_script(policy_id), - ) - |> tx_in_inline_datum(True, mock_operator_withdrawal_datum()) - // App Oracle reference input - |> ref_tx_in( - True, - mock_tx_hash(30), - 0, - app_oracle_ref_value, - mock_app_oracle_address, - ) - |> ref_tx_in_inline_datum(True, mock_app_oracle_datum) - // Vault Oracle output - |> tx_out(True, vault_address, vault_oracle_output_value) - |> tx_out_inline_datum( - True, - build_operator_vault_oracle_output_datum(operator_shares), - ) - // Operator receives unlocked funds - |> tx_out(True, operator_address, operator_output_value) - // Burn intent token - |> mint(True, -1, policy_id, "") - // Signed by operation_key - |> required_signer_hash(True, mock_operation_key) - |> complete() -} - -fn build_operator_redeemer() -> IntentRedeemerL1 { - let mpf_action = build_operator_shares_delete_action() - BurnIntent([1], mock_message, mock_signatures, [mpf_action]) -} - -// Success: Operator withdraws but stays above min deposit percentage (16.6% >= 10%) -test s3_mint_burn_intent_success_operator_above_min_deposit() { - let tx = mock_operator_burn_intent_tx(operator_shares_pass) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_operator_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Operator withdraws and drops below min deposit percentage (5.5% < 10%) -test s3_mint_burn_intent_fail_operator_below_min_deposit() { - let tx = mock_operator_burn_intent_tx(operator_shares_fail) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - build_operator_redeemer(), - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} +// use aiken/cbor +// use aiken/merkle_patricia_forestry as mpf +// use cardano/address.{from_script} +// use cardano/assets.{add, from_asset} +// use cardano/transaction.{Transaction} +// use l1_withdrawal_intent/spend_and_mint as l1_withdrawal_intent +// use mocktail.{ +// complete, mint, mock_pub_key_address, mock_tx_hash, mocktail_tx, ref_tx_in, +// ref_tx_in_inline_datum, required_signer_hash, tx_in, tx_in_inline_datum, +// tx_out, tx_out_inline_datum, +// } +// use tests/utils.{ +// mock_app_oracle, mock_app_oracle_address, mock_app_oracle_datum, +// mock_l1_withdrawal_intent_script_hash, mock_message, mock_operation_key, +// mock_operator_account, mock_operator_inner_account, mock_operator_key, +// mock_operator_shares, mock_signatures, mock_total_deposited, mock_total_shares, +// mock_user_account, mock_user_trade_account, mock_vault_equity, mock_vault_nft, +// mock_vault_oracle_datum, mock_vault_script_hash, null_hash, +// } +// use types.{ +// BurnIntent, IntentRedeemerL1, SharesDelete, SharesRecordEntry, +// VaultOracleDatum, WithdrawalIntentDatum, +// } +// use withdraw_utils.{convert_shares_to_usd} + +// // ========== BurnIntent Tests ========== +// // Spec: +// // - Signed by operation_key from app_oracle OR operator_key from vault oracle +// // - L1WithdrawalIntent is burnt with total batched amount +// // - Vault Oracle input with datum (identified by vault_oracle_nft) +// // - Vault Oracle output with updated datum: +// // - total_shares = total_shares - sum(shares_to_redeem) + sum(fee_shares) +// // - operator_shares += sum(fee_shares) +// // - total_deposited -= sum(cost_basis) +// // - shares_merkle_root updated +// // - total_fee_share_collected += sum(fee_shares) +// // - Vault unlocks net_payout to user +// // +// // TODO: These tests require a mock_message that includes vault_oracle_nft with price 0. +// // The current mock_message only has ADA=2, USDM=1. The convert_value_to_usd function +// // fails when the vault value contains the NFT without a corresponding price. +// // Update mock_message and mock_signatures in tests/utils.ak to include the NFT price. +// // +// // Prices from mock_message: ADA=2, USDM=1 (TODO: add vault_oracle_nft=0) + +// // Test values: +// // - shares_to_redeem = 1_250_000_000_000_000 (to get integer gross_value) +// // - gross_value = shares_to_redeem * vault_equity / total_shares +// // = 1_250_000_000_000_000 * 2_400_000_000 / 3_000_000_000_000_000 +// // = 1_000_000_000 USD +// // - cost_basis = 1_000_000_000 (no profit, so fee = 0) +// // - With operator_fee_rate_bp = 0, fee = 0 anyway +// // - user_receives = gross_value = 1_000_000_000 USD +// // - In ADA (price=2): 500_000_000 ADA + +// const mock_shares_to_redeem = 1_250_000_000_000_000 + +// const mock_cost_basis = 1_000_000_000 + +// fn mock_l1_withdrawal_datum() -> WithdrawalIntentDatum { +// WithdrawalIntentDatum { +// withdrawer: mock_user_trade_account, +// shares_to_redeem: mock_shares_to_redeem, +// } +// } + +// fn computed_gross_value() -> Int { +// convert_shares_to_usd( +// mock_shares_to_redeem, +// mock_total_shares, +// mock_vault_equity, +// ) +// } + +// fn computed_user_receives() -> Int { +// // fee = 0 since operator_fee_rate_bp = 0 +// computed_gross_value() +// } + +// // Build initial merkle root with withdrawer's shares +// fn build_initial_merkle_root() -> ByteArray { +// // Use Account directly as MPF key +// let mpf_key = cbor.serialise(mock_user_account) +// let entry = +// SharesRecordEntry { +// shares: mock_shares_to_redeem, +// total_deposited: mock_cost_basis, +// } +// let mpf_value = cbor.serialise(entry) +// mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) +// } + +// fn build_vault_oracle_input_datum() -> VaultOracleDatum { +// VaultOracleDatum { +// ..mock_vault_oracle_datum, +// shares_merkle_root: build_initial_merkle_root(), +// } +// } + +// fn build_vault_oracle_output_datum( +// new_merkle_root: ByteArray, +// is_correct: Bool, +// ) -> VaultOracleDatum { +// if is_correct { +// // With operator_fee_rate_bp = 0, fee = 0 and fee_shares = 0 +// // Withdrawer is non-operator, so operator_shares_withdrawn = 0 +// // operator_shares = operator_shares - operator_shares_withdrawn + fee_shares +// // = 0 - 0 + 0 = 0 +// VaultOracleDatum { +// ..mock_vault_oracle_datum, +// total_shares: mock_total_shares - mock_shares_to_redeem, +// operator_shares: mock_operator_shares, +// total_deposited: mock_total_deposited - mock_cost_basis, +// shares_merkle_root: new_merkle_root, +// total_fee_share_collected: 0, +// } +// } else { +// // Incorrect: don't update total_shares +// mock_vault_oracle_datum +// } +// } + +// fn build_shares_delete_action() -> types.SharesMPFAction { +// let entry = +// SharesRecordEntry { +// shares: mock_shares_to_redeem, +// total_deposited: mock_cost_basis, +// } +// let mpf_value = cbor.serialise(entry) +// SharesDelete { proof: [], old_value: mpf_value } +// } + +// type BurnIntentTestCase { +// is_vault_oracle_input_present: Bool, +// is_vault_oracle_output_correct: Bool, +// is_app_oracle_ref_present: Bool, +// is_vault_unlock_correct: Bool, +// is_intent_burn_correct: Bool, +// is_operation_signed: Bool, +// is_operator_signed: Bool, +// } + +// fn mock_burn_intent_tx(test_case: BurnIntentTestCase) -> Transaction { +// let BurnIntentTestCase { +// is_vault_oracle_input_present, +// is_vault_oracle_output_correct, +// is_app_oracle_ref_present, +// is_vault_unlock_correct, +// is_intent_burn_correct, +// is_operation_signed, +// is_operator_signed, +// } = test_case + +// let policy_id = mock_l1_withdrawal_intent_script_hash +// let withdrawer_address = mock_pub_key_address(0, None) +// let user_receives = computed_user_receives() + +// // Vault Oracle + Vault combined (single UTxO holds both oracle datum and vault funds) +// // Located at vault_script_hash (where vault funds are), identified by vault_oracle_nft +// let vault_address = from_script(mock_vault_script_hash) +// let ada_to_unlock = user_receives / 2 + +// // The vault/oracle UTxO has: oracle NFT + actual vault funds +// // Starting with 1 billion ADA in the vault +// let vault_oracle_input_value = +// from_asset(mock_vault_nft, "", 1) |> add("", "", 1_000_000_000) + +// // After full withdrawal (SharesDelete), merkle root becomes empty +// let new_merkle_root = null_hash + +// let vault_oracle_output_datum = +// build_vault_oracle_output_datum( +// new_merkle_root, +// is_vault_oracle_output_correct, +// ) + +// // Vault output keeps remaining funds + oracle NFT +// let vault_oracle_output_value = +// if is_vault_unlock_correct { +// // Vault keeps (1_000_000_000 - 500_000_000) = 500_000_000 ADA + oracle NFT +// from_asset(mock_vault_nft, "", 1) +// |> add("", "", 1_000_000_000 - ada_to_unlock) +// } else { +// // Incorrect: vault keeps all +// from_asset(mock_vault_nft, "", 1) |> add("", "", 1_000_000_000) +// } + +// // App Oracle reference input +// let app_oracle_ref_value = +// from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) + +// // Intent input (only has intent token + min ADA) +// let intent_input_value = +// from_asset("", "", 2_000_000) |> add(policy_id, "", 1) + +// // Withdrawer receives the unlocked value +// let withdrawer_output_value = +// if is_vault_unlock_correct { +// from_asset("", "", ada_to_unlock) +// } else { +// from_asset("", "", 1_000_000) +// } + +// // Burn amount +// let burn_amount = +// if is_intent_burn_correct { +// -1 +// } else { +// -2 +// } + +// mocktail_tx() +// // Input matching utxo_ref in mock_message: mock_utxo_ref(0, 0) +// |> tx_in( +// True, +// mock_tx_hash(0), +// 0, +// from_asset("", "", 2_000_000), +// mock_pub_key_address(99, None), +// ) +// // Vault Oracle + Vault combined input (single UTxO) +// |> tx_in( +// is_vault_oracle_input_present, +// mock_tx_hash(10), +// 0, +// vault_oracle_input_value, +// vault_address, +// ) +// |> tx_in_inline_datum( +// is_vault_oracle_input_present, +// build_vault_oracle_input_datum(), +// ) +// // Intent input +// |> tx_in( +// True, +// mock_tx_hash(20), +// 0, +// intent_input_value, +// from_script(policy_id), +// ) +// |> tx_in_inline_datum(True, mock_l1_withdrawal_datum()) +// // App Oracle reference input +// |> ref_tx_in( +// is_app_oracle_ref_present, +// mock_tx_hash(30), +// 0, +// app_oracle_ref_value, +// mock_app_oracle_address, +// ) +// |> ref_tx_in_inline_datum(is_app_oracle_ref_present, mock_app_oracle_datum) +// // Vault Oracle + Vault combined output +// |> tx_out(True, vault_address, vault_oracle_output_value) +// |> tx_out_inline_datum(True, vault_oracle_output_datum) +// // Withdrawer output (receives unlocked funds) +// |> tx_out(True, withdrawer_address, withdrawer_output_value) +// // Burn intent token +// |> mint(True, burn_amount, policy_id, "") +// // Signed by operation_key and/or operator_key +// |> required_signer_hash(is_operation_signed, mock_operation_key) +// |> required_signer_hash(is_operator_signed, mock_operator_key) +// |> complete() +// } + +// fn build_redeemer() -> IntentRedeemerL1 { +// let mpf_action = build_shares_delete_action() +// // Index 3 because: [0]=utxo_ref_input, [1]=vault_oracle_input, [2]=vault_input, [3]=intent_input +// // Output index 1 because: [0]=vault_oracle_output, [1]=withdrawer_output +// BurnIntent([1], mock_message, mock_signatures, [mpf_action]) +// } + +// // Success: All conditions met, signed by operation_key +// test s3_mint_burn_intent_success() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// is_operator_signed: False, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Success: Signed by operator_key instead of operation_key +// test s3_mint_burn_intent_success_operator_signed() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: True, +// is_operation_signed: False, +// is_operator_signed: True, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Missing vault oracle input +// test s3_mint_burn_intent_fail_no_vault_oracle_input() fail { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: False, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// is_operator_signed: False, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Incorrect vault oracle output datum +// test s3_mint_burn_intent_fail_wrong_oracle_output() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: False, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// is_operator_signed: False, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Missing app oracle reference input +// test s3_mint_burn_intent_fail_no_app_oracle_ref() fail { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: False, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// is_operator_signed: False, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Vault doesn't unlock correct amount to user +// test s3_mint_burn_intent_fail_vault_unlock_mismatch() fail { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: False, +// is_intent_burn_correct: True, +// is_operation_signed: True, +// is_operator_signed: False, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Incorrect intent burn count +// test s3_mint_burn_intent_fail_wrong_burn_count() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: False, +// is_operation_signed: True, +// is_operator_signed: False, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Not signed by either operation_key or operator_key +// test s3_mint_burn_intent_fail_not_authorized() { +// let tx = +// mock_burn_intent_tx( +// BurnIntentTestCase { +// is_vault_oracle_input_present: True, +// is_vault_oracle_output_correct: True, +// is_app_oracle_ref_present: True, +// is_vault_unlock_correct: True, +// is_intent_burn_correct: True, +// is_operation_signed: False, +// is_operator_signed: False, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // ========== Operator Min Deposit Percentage Tests ========== +// // These tests verify that when the operator withdraws, they must maintain +// // at least operator_min_deposit_rate_bp of total_shares. +// // +// // Test scenario: +// // - operator_min_deposit_rate_bp = 10 (from mock_vault_oracle_datum) +// // - Operator is the withdrawer (uses mock_operator_account) +// // - Test values chosen to produce integer results with mock_vault_equity/prices +// // +// // For the tests below: +// // - We use the same shares_to_redeem calculation as regular tests +// // - total_shares = 1_000_000_000_000_000 (1 quadrillion) +// // - operator_shares varies to test pass/fail scenarios + +// // Operator shares for passing test: 20% of total, withdraw some but stay above 10% +// const operator_test_total_shares = 1_000_000_000_000_000 + +// // Shares to redeem (same calculation as regular tests to maintain vault unlock consistency) +// // shares_to_redeem = 100_000_000_000_000 (10% of total) +// const operator_shares_to_redeem = 100_000_000_000_000 + +// // Cost basis matching the shares withdrawn (scaled proportionally) +// const operator_cost_basis = 80_000_000 + +// // Passing case: operator has 250T shares (25%), withdraws 100T, ends with 150T (16.6% of 900T) +// // new_operator_shares = 150T, new_total_shares = 900T +// // 150T * 100 >= 900T * 10 → TRUE +// const operator_shares_pass = 250_000_000_000_000 + +// // Failing case: operator has 150T shares (15%), withdraws 100T, ends with 50T (5.5% of 900T) +// // new_operator_shares = 50T, new_total_shares = 900T +// // 50T * 100 >= 900T * 10 → 5000T >= 9000T → FALSE +// const operator_shares_fail = 150_000_000_000_000 + +// fn mock_operator_withdrawal_datum() -> WithdrawalIntentDatum { +// WithdrawalIntentDatum { +// withdrawer: mock_operator_account, +// shares_to_redeem: operator_shares_to_redeem, +// } +// } + +// fn build_operator_initial_merkle_root() -> ByteArray { +// // Use operator Account directly as MPF key (same as validator) +// let mpf_key = cbor.serialise(mock_operator_inner_account) +// let entry = +// SharesRecordEntry { +// shares: operator_shares_to_redeem, +// total_deposited: operator_cost_basis, +// } +// let mpf_value = cbor.serialise(entry) +// mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) +// } + +// fn build_operator_vault_oracle_input_datum( +// operator_shares: Int, +// ) -> VaultOracleDatum { +// VaultOracleDatum { +// ..mock_vault_oracle_datum, +// total_shares: operator_test_total_shares, +// operator_shares: operator_shares, +// total_deposited: mock_total_deposited, +// shares_merkle_root: build_operator_initial_merkle_root(), +// } +// } + +// fn build_operator_vault_oracle_output_datum( +// operator_shares: Int, +// ) -> VaultOracleDatum { +// // After withdrawal: +// // - total_shares decreases by shares_to_redeem +// // - operator_shares decreases by shares_to_redeem (operator is withdrawing) +// // - No fee since operator_fee_rate_bp = 0 +// let new_total_shares = operator_test_total_shares - operator_shares_to_redeem +// let new_operator_shares = operator_shares - operator_shares_to_redeem + +// VaultOracleDatum { +// ..mock_vault_oracle_datum, +// total_shares: new_total_shares, +// operator_shares: new_operator_shares, +// total_deposited: mock_total_deposited - operator_cost_basis, +// shares_merkle_root: null_hash, +// total_fee_share_collected: 0, +// } +// } + +// fn build_operator_shares_delete_action() -> types.SharesMPFAction { +// let entry = +// SharesRecordEntry { +// shares: operator_shares_to_redeem, +// total_deposited: operator_cost_basis, +// } +// let mpf_value = cbor.serialise(entry) +// SharesDelete { proof: [], old_value: mpf_value } +// } + +// fn mock_operator_burn_intent_tx(operator_shares: Int) -> Transaction { +// let policy_id = mock_l1_withdrawal_intent_script_hash +// let operator_address = mock_pub_key_address(10, None) + +// // Calculate user receives (gross value with no fee) +// // gross_value = shares_to_redeem * vault_equity / total_shares +// let gross_value = +// operator_shares_to_redeem * mock_vault_equity / operator_test_total_shares +// let user_receives = gross_value +// let ada_to_unlock = user_receives / 2 + +// let vault_address = from_script(mock_vault_script_hash) +// let vault_oracle_input_value = +// from_asset(mock_vault_nft, "", 1) |> add("", "", 1_000_000_000) + +// let vault_oracle_output_value = +// from_asset(mock_vault_nft, "", 1) +// |> add("", "", 1_000_000_000 - ada_to_unlock) + +// let app_oracle_ref_value = +// from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) + +// let intent_input_value = +// from_asset("", "", 2_000_000) |> add(policy_id, "", 1) + +// let operator_output_value = from_asset("", "", ada_to_unlock) + +// mocktail_tx() +// // Input matching utxo_ref in mock_message +// |> tx_in( +// True, +// mock_tx_hash(0), +// 0, +// from_asset("", "", 2_000_000), +// mock_pub_key_address(99, None), +// ) +// // Vault Oracle input +// |> tx_in( +// True, +// mock_tx_hash(10), +// 0, +// vault_oracle_input_value, +// vault_address, +// ) +// |> tx_in_inline_datum( +// True, +// build_operator_vault_oracle_input_datum(operator_shares), +// ) +// // Intent input +// |> tx_in( +// True, +// mock_tx_hash(20), +// 0, +// intent_input_value, +// from_script(policy_id), +// ) +// |> tx_in_inline_datum(True, mock_operator_withdrawal_datum()) +// // App Oracle reference input +// |> ref_tx_in( +// True, +// mock_tx_hash(30), +// 0, +// app_oracle_ref_value, +// mock_app_oracle_address, +// ) +// |> ref_tx_in_inline_datum(True, mock_app_oracle_datum) +// // Vault Oracle output +// |> tx_out(True, vault_address, vault_oracle_output_value) +// |> tx_out_inline_datum( +// True, +// build_operator_vault_oracle_output_datum(operator_shares), +// ) +// // Operator receives unlocked funds +// |> tx_out(True, operator_address, operator_output_value) +// // Burn intent token +// |> mint(True, -1, policy_id, "") +// // Signed by operation_key +// |> required_signer_hash(True, mock_operation_key) +// |> complete() +// } + +// fn build_operator_redeemer() -> IntentRedeemerL1 { +// let mpf_action = build_operator_shares_delete_action() +// BurnIntent([1], mock_message, mock_signatures, [mpf_action]) +// } + +// // Success: Operator withdraws but stays above min deposit percentage (16.6% >= 10%) +// test s3_mint_burn_intent_success_operator_above_min_deposit() { +// let tx = mock_operator_burn_intent_tx(operator_shares_pass) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_operator_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Operator withdraws and drops below min deposit percentage (5.5% < 10%) +// test s3_mint_burn_intent_fail_operator_below_min_deposit() { +// let tx = mock_operator_burn_intent_tx(operator_shares_fail) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// build_operator_redeemer(), +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } diff --git a/validators/tests/l1_withdrawal_intent/mint.ak b/validators/tests/l1_withdrawal_intent/mint.ak index cede957..e1dc327 100644 --- a/validators/tests/l1_withdrawal_intent/mint.ak +++ b/validators/tests/l1_withdrawal_intent/mint.ak @@ -1,248 +1,248 @@ -use cardano/address.{from_script} -use cardano/assets.{add, from_lovelace} -use cardano/transaction.{Transaction} -use l1_withdrawal_intent/spend_and_mint as l1_withdrawal_intent -use mocktail.{ - complete, mint, mock_policy_id, mock_pub_key_hash, mock_tx_hash, mocktail_tx, - required_signer_hash, tx_in, tx_in_inline_datum, tx_out, tx_out_inline_datum, -} -use tests/utils.{ - mock_l1_withdrawal_intent_script_hash, mock_user_trade_account, mock_vault_nft, -} -use types.{CancelIntent, MintIntent, WithdrawalIntentDatum} - -// ========== MintIntent Tests ========== -// Spec: -// - Withdrawal amount > 0 (shares_to_redeem > 0) -// - No vault reference needed (user creates intent independently) - -const mock_l1_withdrawal_intent_datum: WithdrawalIntentDatum = - WithdrawalIntentDatum { - withdrawer: mock_user_trade_account, - shares_to_redeem: 1_000_000, - } - -type MintIntentTestCase { - is_token_minted_correctly: Bool, - is_output_to_correct_address: Bool, - is_shares_valid: Bool, -} - -fn mock_mint_intent_tx(test_case: MintIntentTestCase) -> Transaction { - let MintIntentTestCase { - is_token_minted_correctly, - is_output_to_correct_address, - is_shares_valid, - } = test_case - - let policy_id = mock_l1_withdrawal_intent_script_hash - let wrong_policy_id = mock_policy_id(999) - - let output_address = - if is_output_to_correct_address { - from_script(policy_id) - } else { - from_script(wrong_policy_id) - } - - let mint_amount = - if is_token_minted_correctly { - 1 - } else { - 2 - } - - // Intent output has min ADA + intent token - let output_value = from_lovelace(2_000_000) |> add(policy_id, "", 1) - - // Datum with shares amount (or 0 if testing invalid) - let datum = - if is_shares_valid { - mock_l1_withdrawal_intent_datum - } else { - WithdrawalIntentDatum { - withdrawer: mock_user_trade_account, - shares_to_redeem: 0, - } - } - - mocktail_tx() - |> mint(True, mint_amount, policy_id, "") - |> tx_out(True, output_address, output_value) - |> tx_out_inline_datum(True, datum) - |> complete() -} - -// Success: Mint intent with correct token and valid shares amount -test s3_mint_mint_intent_success() { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: True, - is_output_to_correct_address: True, - is_shares_valid: True, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Wrong mint amount (minted 2 instead of 1) -test s3_mint_mint_intent_fail_wrong_mint_amount() { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: False, - is_output_to_correct_address: True, - is_shares_valid: True, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Output to wrong address (not script address) -test s3_mint_mint_intent_fail_wrong_output_address() fail { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: True, - is_output_to_correct_address: False, - is_shares_valid: True, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Zero shares_to_redeem -test s3_mint_mint_intent_fail_zero_shares() { - let tx = - mock_mint_intent_tx( - MintIntentTestCase { - is_token_minted_correctly: True, - is_output_to_correct_address: True, - is_shares_valid: False, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - MintIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// ========== CancelIntent Tests ========== -// Spec: -// - L1WithdrawalIntent token is burnt -// - The intent UTxO value returned to withdrawer (refund) -// - Signed by the withdrawer -// - No vault interaction required - -type CancelIntentTestCase { - is_token_burnt_correctly: Bool, - is_signed_by_withdrawer: Bool, -} - -fn mock_cancel_intent_tx(test_case: CancelIntentTestCase) -> Transaction { - let CancelIntentTestCase { is_token_burnt_correctly, is_signed_by_withdrawer } = - test_case - - let policy_id = mock_l1_withdrawal_intent_script_hash - let withdrawer_pkh = mock_pub_key_hash(0) - let wrong_pkh = mock_pub_key_hash(999) - - let burn_amount = - if is_token_burnt_correctly { - -1 - } else { - -2 - } - - let signer_pkh = - if is_signed_by_withdrawer { - withdrawer_pkh - } else { - wrong_pkh - } - - let input_value = from_lovelace(2_000_000) |> add(policy_id, "", 1) - - mocktail_tx() - |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) - |> tx_in_inline_datum(True, mock_l1_withdrawal_intent_datum) - |> mint(True, burn_amount, policy_id, "") - |> required_signer_hash(True, signer_pkh) - |> complete() -} - -// Success: Cancel intent with correct burn and signature -test s3_mint_cancel_intent_success() { - let tx = - mock_cancel_intent_tx( - CancelIntentTestCase { - is_token_burnt_correctly: True, - is_signed_by_withdrawer: True, - }, - ) - - l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - CancelIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Wrong burn amount (burnt 2 instead of 1) -test s3_mint_cancel_intent_fail_wrong_burn_amount() { - let tx = - mock_cancel_intent_tx( - CancelIntentTestCase { - is_token_burnt_correctly: False, - is_signed_by_withdrawer: True, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - CancelIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} - -// Fail: Not signed by withdrawer -test s3_mint_cancel_intent_fail_not_signed_by_withdrawer() { - let tx = - mock_cancel_intent_tx( - CancelIntentTestCase { - is_token_burnt_correctly: True, - is_signed_by_withdrawer: False, - }, - ) - - !l1_withdrawal_intent.l1_withdrawal_intent.mint( - mock_vault_nft, - CancelIntent, - mock_l1_withdrawal_intent_script_hash, - tx, - ) -} +// use cardano/address.{from_script} +// use cardano/assets.{add, from_lovelace} +// use cardano/transaction.{Transaction} +// use l1_withdrawal_intent/spend_and_mint as l1_withdrawal_intent +// use mocktail.{ +// complete, mint, mock_policy_id, mock_pub_key_hash, mock_tx_hash, mocktail_tx, +// required_signer_hash, tx_in, tx_in_inline_datum, tx_out, tx_out_inline_datum, +// } +// use tests/utils.{ +// mock_l1_withdrawal_intent_script_hash, mock_user_trade_account, mock_vault_nft, +// } +// use types.{CancelIntent, MintIntent, WithdrawalIntentDatum} + +// // ========== MintIntent Tests ========== +// // Spec: +// // - Withdrawal amount > 0 (shares_to_redeem > 0) +// // - No vault reference needed (user creates intent independently) + +// const mock_l1_withdrawal_intent_datum: WithdrawalIntentDatum = +// WithdrawalIntentDatum { +// withdrawer: mock_user_trade_account, +// shares_to_redeem: 1_000_000, +// } + +// type MintIntentTestCase { +// is_token_minted_correctly: Bool, +// is_output_to_correct_address: Bool, +// is_shares_valid: Bool, +// } + +// fn mock_mint_intent_tx(test_case: MintIntentTestCase) -> Transaction { +// let MintIntentTestCase { +// is_token_minted_correctly, +// is_output_to_correct_address, +// is_shares_valid, +// } = test_case + +// let policy_id = mock_l1_withdrawal_intent_script_hash +// let wrong_policy_id = mock_policy_id(999) + +// let output_address = +// if is_output_to_correct_address { +// from_script(policy_id) +// } else { +// from_script(wrong_policy_id) +// } + +// let mint_amount = +// if is_token_minted_correctly { +// 1 +// } else { +// 2 +// } + +// // Intent output has min ADA + intent token +// let output_value = from_lovelace(2_000_000) |> add(policy_id, "", 1) + +// // Datum with shares amount (or 0 if testing invalid) +// let datum = +// if is_shares_valid { +// mock_l1_withdrawal_intent_datum +// } else { +// WithdrawalIntentDatum { +// withdrawer: mock_user_trade_account, +// shares_to_redeem: 0, +// } +// } + +// mocktail_tx() +// |> mint(True, mint_amount, policy_id, "") +// |> tx_out(True, output_address, output_value) +// |> tx_out_inline_datum(True, datum) +// |> complete() +// } + +// // Success: Mint intent with correct token and valid shares amount +// test s3_mint_mint_intent_success() { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: True, +// is_output_to_correct_address: True, +// is_shares_valid: True, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Wrong mint amount (minted 2 instead of 1) +// test s3_mint_mint_intent_fail_wrong_mint_amount() { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: False, +// is_output_to_correct_address: True, +// is_shares_valid: True, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Output to wrong address (not script address) +// test s3_mint_mint_intent_fail_wrong_output_address() fail { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: True, +// is_output_to_correct_address: False, +// is_shares_valid: True, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Zero shares_to_redeem +// test s3_mint_mint_intent_fail_zero_shares() { +// let tx = +// mock_mint_intent_tx( +// MintIntentTestCase { +// is_token_minted_correctly: True, +// is_output_to_correct_address: True, +// is_shares_valid: False, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// MintIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // ========== CancelIntent Tests ========== +// // Spec: +// // - L1WithdrawalIntent token is burnt +// // - The intent UTxO value returned to withdrawer (refund) +// // - Signed by the withdrawer +// // - No vault interaction required + +// type CancelIntentTestCase { +// is_token_burnt_correctly: Bool, +// is_signed_by_withdrawer: Bool, +// } + +// fn mock_cancel_intent_tx(test_case: CancelIntentTestCase) -> Transaction { +// let CancelIntentTestCase { is_token_burnt_correctly, is_signed_by_withdrawer } = +// test_case + +// let policy_id = mock_l1_withdrawal_intent_script_hash +// let withdrawer_pkh = mock_pub_key_hash(0) +// let wrong_pkh = mock_pub_key_hash(999) + +// let burn_amount = +// if is_token_burnt_correctly { +// -1 +// } else { +// -2 +// } + +// let signer_pkh = +// if is_signed_by_withdrawer { +// withdrawer_pkh +// } else { +// wrong_pkh +// } + +// let input_value = from_lovelace(2_000_000) |> add(policy_id, "", 1) + +// mocktail_tx() +// |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) +// |> tx_in_inline_datum(True, mock_l1_withdrawal_intent_datum) +// |> mint(True, burn_amount, policy_id, "") +// |> required_signer_hash(True, signer_pkh) +// |> complete() +// } + +// // Success: Cancel intent with correct burn and signature +// test s3_mint_cancel_intent_success() { +// let tx = +// mock_cancel_intent_tx( +// CancelIntentTestCase { +// is_token_burnt_correctly: True, +// is_signed_by_withdrawer: True, +// }, +// ) + +// l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// CancelIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Wrong burn amount (burnt 2 instead of 1) +// test s3_mint_cancel_intent_fail_wrong_burn_amount() { +// let tx = +// mock_cancel_intent_tx( +// CancelIntentTestCase { +// is_token_burnt_correctly: False, +// is_signed_by_withdrawer: True, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// CancelIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } + +// // Fail: Not signed by withdrawer +// test s3_mint_cancel_intent_fail_not_signed_by_withdrawer() { +// let tx = +// mock_cancel_intent_tx( +// CancelIntentTestCase { +// is_token_burnt_correctly: True, +// is_signed_by_withdrawer: False, +// }, +// ) + +// !l1_withdrawal_intent.l1_withdrawal_intent.mint( +// mock_vault_nft, +// CancelIntent, +// mock_l1_withdrawal_intent_script_hash, +// tx, +// ) +// } diff --git a/validators/tests/l1_withdrawal_intent/spend.ak b/validators/tests/l1_withdrawal_intent/spend.ak index 20258e1..6152d06 100644 --- a/validators/tests/l1_withdrawal_intent/spend.ak +++ b/validators/tests/l1_withdrawal_intent/spend.ak @@ -1,116 +1,116 @@ -use cardano/address.{from_script} -use cardano/assets.{add, from_lovelace} -use cardano/transaction.{Mint, Transaction} -use l1_withdrawal_intent/spend_and_mint as l1_withdrawal_intent -use mocktail.{ - add_redeemer, complete, mint, mock_script_hash, mock_tx_hash, mock_utxo_ref, - mocktail_tx, tx_in, tx_in_inline_datum, -} -use tests/utils.{ - mock_l1_withdrawal_intent_script_hash, mock_user_trade_account, mock_vault_nft, -} -use types.{BurnIntent, MintIntent, WithdrawalIntentDatum} +// use cardano/address.{from_script} +// use cardano/assets.{add, from_lovelace} +// use cardano/transaction.{Mint, Transaction} +// use l1_withdrawal_intent/spend_and_mint as l1_withdrawal_intent +// use mocktail.{ +// add_redeemer, complete, mint, mock_script_hash, mock_tx_hash, mock_utxo_ref, +// mocktail_tx, tx_in, tx_in_inline_datum, +// } +// use tests/utils.{ +// mock_l1_withdrawal_intent_script_hash, mock_user_trade_account, mock_vault_nft, +// } +// use types.{BurnIntent, MintIntent, WithdrawalIntentDatum} -// ========== ProcessIntent (Spend) Tests ========== -// Spec: L1WithdrawalIntent is burnt (spend just validates that mint redeemer is BurnIntent) +// // ========== ProcessIntent (Spend) Tests ========== +// // Spec: L1WithdrawalIntent is burnt (spend just validates that mint redeemer is BurnIntent) -const mock_withdrawal_intent_datum: WithdrawalIntentDatum = - WithdrawalIntentDatum { - withdrawer: mock_user_trade_account, - shares_to_redeem: 1_000_000, - } +// const mock_withdrawal_intent_datum: WithdrawalIntentDatum = +// WithdrawalIntentDatum { +// withdrawer: mock_user_trade_account, +// shares_to_redeem: 1_000_000, +// } -type ProcessIntentTestCase { - is_mint_policy_correct: Bool, - is_mint_redeemer_burn_intent: Bool, -} +// type ProcessIntentTestCase { +// is_mint_policy_correct: Bool, +// is_mint_redeemer_burn_intent: Bool, +// } -fn mock_process_intent_tx(test_case: ProcessIntentTestCase) -> Transaction { - let ProcessIntentTestCase { - is_mint_policy_correct, - is_mint_redeemer_burn_intent, - } = test_case +// fn mock_process_intent_tx(test_case: ProcessIntentTestCase) -> Transaction { +// let ProcessIntentTestCase { +// is_mint_policy_correct, +// is_mint_redeemer_burn_intent, +// } = test_case - let policy_id = mock_l1_withdrawal_intent_script_hash - let wrong_policy_id = mock_script_hash(999) +// let policy_id = mock_l1_withdrawal_intent_script_hash +// let wrong_policy_id = mock_script_hash(999) - let mint_redeemer: Data = - if is_mint_redeemer_burn_intent { - BurnIntent([], #"", [], []) - } else { - MintIntent - } +// let mint_redeemer: Data = +// if is_mint_redeemer_burn_intent { +// BurnIntent([], #"", [], []) +// } else { +// MintIntent +// } - let mint_policy = - if is_mint_policy_correct { - policy_id - } else { - wrong_policy_id - } +// let mint_policy = +// if is_mint_policy_correct { +// policy_id +// } else { +// wrong_policy_id +// } - let input_value = from_lovelace(2_000_000) |> add(policy_id, "", 1) +// let input_value = from_lovelace(2_000_000) |> add(policy_id, "", 1) - mocktail_tx() - |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) - |> tx_in_inline_datum(True, mock_withdrawal_intent_datum) - |> mint(True, -1, mint_policy, "") - |> complete() - |> add_redeemer(True, Pair(Mint(mint_policy), mint_redeemer)) -} +// mocktail_tx() +// |> tx_in(True, mock_tx_hash(0), 0, input_value, from_script(policy_id)) +// |> tx_in_inline_datum(True, mock_withdrawal_intent_datum) +// |> mint(True, -1, mint_policy, "") +// |> complete() +// |> add_redeemer(True, Pair(Mint(mint_policy), mint_redeemer)) +// } -// Success: Spend intent with correct BurnIntent redeemer -test s3_spend_process_intent_success() { - let tx = - mock_process_intent_tx( - ProcessIntentTestCase { - is_mint_policy_correct: True, - is_mint_redeemer_burn_intent: True, - }, - ) +// // Success: Spend intent with correct BurnIntent redeemer +// test s3_spend_process_intent_success() { +// let tx = +// mock_process_intent_tx( +// ProcessIntentTestCase { +// is_mint_policy_correct: True, +// is_mint_redeemer_burn_intent: True, +// }, +// ) - l1_withdrawal_intent.l1_withdrawal_intent.spend( - mock_vault_nft, - None, - None, - mock_utxo_ref(0, 0), - tx, - ) -} +// l1_withdrawal_intent.l1_withdrawal_intent.spend( +// mock_vault_nft, +// None, +// None, +// mock_utxo_ref(0, 0), +// tx, +// ) +// } -// Fail: Wrong mint policy (different script) -test s3_spend_process_intent_fail_wrong_policy() fail { - let tx = - mock_process_intent_tx( - ProcessIntentTestCase { - is_mint_policy_correct: False, - is_mint_redeemer_burn_intent: True, - }, - ) +// // Fail: Wrong mint policy (different script) +// test s3_spend_process_intent_fail_wrong_policy() fail { +// let tx = +// mock_process_intent_tx( +// ProcessIntentTestCase { +// is_mint_policy_correct: False, +// is_mint_redeemer_burn_intent: True, +// }, +// ) - l1_withdrawal_intent.l1_withdrawal_intent.spend( - mock_vault_nft, - None, - None, - mock_utxo_ref(0, 0), - tx, - ) -} +// l1_withdrawal_intent.l1_withdrawal_intent.spend( +// mock_vault_nft, +// None, +// None, +// mock_utxo_ref(0, 0), +// tx, +// ) +// } -// Fail: MintIntent redeemer instead of BurnIntent -test s3_spend_process_intent_fail_wrong_redeemer() fail { - let tx = - mock_process_intent_tx( - ProcessIntentTestCase { - is_mint_policy_correct: True, - is_mint_redeemer_burn_intent: False, - }, - ) +// // Fail: MintIntent redeemer instead of BurnIntent +// test s3_spend_process_intent_fail_wrong_redeemer() fail { +// let tx = +// mock_process_intent_tx( +// ProcessIntentTestCase { +// is_mint_policy_correct: True, +// is_mint_redeemer_burn_intent: False, +// }, +// ) - l1_withdrawal_intent.l1_withdrawal_intent.spend( - mock_vault_nft, - None, - None, - mock_utxo_ref(0, 0), - tx, - ) -} +// l1_withdrawal_intent.l1_withdrawal_intent.spend( +// mock_vault_nft, +// None, +// None, +// mock_utxo_ref(0, 0), +// tx, +// ) +// } diff --git a/validators/tests/utils.ak b/validators/tests/utils.ak index 4008505..1e4334d 100644 --- a/validators/tests/utils.ak +++ b/validators/tests/utils.ak @@ -12,7 +12,7 @@ use mocktail.{ } use types.{ DepositIntentDatum, L2DepositIntentDatum, L2WithdrawalIntentDatum, MValue, - SharesRecordEntry, VaultOracleDatum, WithdrawalIntentDatum, + SharesRecordEntry, VaultConfig, VaultOracleDatum, WithdrawalIntentDatum, } // ========== Null hash (empty MPF trie root) ========== @@ -250,6 +250,20 @@ pub const mock_vault_oracle_datum: VaultOracleDatum = total_fee_share_collected: 0, } +// Config Oracle datum (simplified, L1 only) +pub const mock_vault_config_datum: VaultConfig = + VaultConfig { + app_oracle: mock_app_oracle, + vault_script_hash: mock_vault_script_hash, + l1_deposit_intent_script_hash: mock_l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash: mock_l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash: mock_l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash: mock_l2_withdrawal_intent_script_hash, + pluggable_logic: mock_pluggable_logic, + operator_account: mock_operator_account, + hydra_node_pub_keys: mock_node_pub_keys, + } + // ========== DexOrderBook datum ========== pub const mock_dex_order_book_datum: DexOrderBookDatum = diff --git a/validators/tests/vault/withdrawal.ak b/validators/tests/vault/withdrawal.ak index 9f79ab2..4a9689c 100644 --- a/validators/tests/vault/withdrawal.ak +++ b/validators/tests/vault/withdrawal.ak @@ -7,7 +7,7 @@ use mocktail.{ } use tests/utils.{ mock_app_oracle, mock_app_oracle_address, mock_app_oracle_datum, - mock_operation_key, mock_operator_key, mock_vault_nft, mock_vault_oracle_datum, + mock_operator_key, mock_vault_nft, mock_vault_oracle_datum, } use vault/spend_withdrawal as vault @@ -17,7 +17,6 @@ type WithdrawTestCase { is_vault_oracle_referenced: Bool, is_app_oracle_referenced: Bool, is_operator_signed: Bool, - is_operation_signed: Bool, } fn default_withdraw_test_case() -> WithdrawTestCase { @@ -25,7 +24,6 @@ fn default_withdraw_test_case() -> WithdrawTestCase { is_vault_oracle_referenced: True, is_app_oracle_referenced: True, is_operator_signed: True, - is_operation_signed: False, } } @@ -34,7 +32,6 @@ fn mock_withdraw_tx(test_case: WithdrawTestCase) -> Transaction { is_vault_oracle_referenced, is_app_oracle_referenced, is_operator_signed, - is_operation_signed, } = test_case let vault_oracle_address = from_script(mock_vault_nft) @@ -66,7 +63,6 @@ fn mock_withdraw_tx(test_case: WithdrawTestCase) -> Transaction { |> ref_tx_in_inline_datum(is_app_oracle_referenced, mock_app_oracle_datum) // Signatures |> required_signer_hash(is_operator_signed, mock_operator_key) - |> required_signer_hash(is_operation_signed, mock_operation_key) |> complete() } @@ -81,22 +77,11 @@ test s1_withdraw_success_with_operator_signed() { run_withdraw(default_withdraw_test_case()) } -test s1_withdraw_success_with_operation_signed() { - let test_case = - WithdrawTestCase { - ..default_withdraw_test_case(), - is_operator_signed: False, - is_operation_signed: True, - } - run_withdraw(test_case) -} - test s1_withdraw_success_with_both_signed() { let test_case = WithdrawTestCase { ..default_withdraw_test_case(), is_operator_signed: True, - is_operation_signed: True, } run_withdraw(test_case) } @@ -115,7 +100,6 @@ test s1_withdraw_fail_without_any_signature() { WithdrawTestCase { ..default_withdraw_test_case(), is_operator_signed: False, - is_operation_signed: False, } !run_withdraw(test_case) } diff --git a/validators/tests/vault_oracle/mint.ak b/validators/tests/vault_oracle/mint.ak index 6ff2632..eb0d7e8 100644 --- a/validators/tests/vault_oracle/mint.ak +++ b/validators/tests/vault_oracle/mint.ak @@ -13,22 +13,26 @@ use tests/utils.{ mock_l1_withdrawal_intent_script_hash, mock_l2_deposit_intent_script_hash, mock_l2_withdrawal_intent_script_hash, mock_node_pub_keys, mock_operation_key, mock_operator_account, mock_operator_inner_account, mock_operator_key, - mock_pluggable_logic, mock_vault_nft, mock_vault_oracle_datum, - mock_vault_script_hash, mock_vault_stake_rotation_script_hash, null_hash, + mock_pluggable_logic, mock_vault_config_datum, mock_vault_nft, + mock_vault_oracle_datum, mock_vault_script_hash, + mock_vault_stake_rotation_script_hash, null_hash, } -use types.{CloseVault, MintVault, VaultOracleDatum} +use types.{CloseVault, MintVault, VaultConfig, VaultOracleDatum} use vault_oracle/spend_mint as vault_oracle // ========== MintVault Test Case ========== -// MintVault is a simple one-shot minting policy: +// MintVault is a split oracle minting policy: // - Consume initial_utxo (one-shot guarantee) -// - Mint exactly 1 NFT -// - Output datum has initial state = 0 (total_shares=0, shares_merkle_root=null_hash, etc.) +// - Mint exactly 2 NFTs (same token name, distinguished by datum type) +// - Output Config Oracle (VaultConfig) and State Oracle (VaultOracleDatum) +// - State Oracle: all state fields = 0, shares_merkle_root = null_hash +// - Config fields must match between both datums // - No signatures required (anyone can create a vault) type MintVaultTestCase { is_initial_utxo_consumed: Bool, is_oracle_nft_minted: Bool, + is_config_output_present: Bool, is_total_shares_zero: Bool, is_operator_shares_zero: Bool, is_total_deposited_zero: Bool, @@ -38,12 +42,14 @@ type MintVaultTestCase { is_app_oracle_correct: Bool, is_app_oracle_referenced: Bool, is_hydra_keys_valid: Bool, + is_config_matching: Bool, } fn default_mint_vault_test_case() -> MintVaultTestCase { MintVaultTestCase { is_initial_utxo_consumed: True, is_oracle_nft_minted: True, + is_config_output_present: True, is_total_shares_zero: True, is_operator_shares_zero: True, is_total_deposited_zero: True, @@ -53,10 +59,13 @@ fn default_mint_vault_test_case() -> MintVaultTestCase { is_app_oracle_correct: True, is_app_oracle_referenced: True, is_hydra_keys_valid: True, + is_config_matching: True, } } -fn mock_mint_vault_datum(test_case: MintVaultTestCase) -> VaultOracleDatum { +fn mock_mint_vault_datums( + test_case: MintVaultTestCase, +) -> (VaultOracleDatum, VaultConfig) { let MintVaultTestCase { is_total_shares_zero, is_operator_shares_zero, @@ -66,6 +75,7 @@ fn mock_mint_vault_datum(test_case: MintVaultTestCase) -> VaultOracleDatum { is_charge_percentage_valid, is_app_oracle_correct, is_hydra_keys_valid, + is_config_matching, .. } = test_case @@ -109,7 +119,7 @@ fn mock_mint_vault_datum(test_case: MintVaultTestCase) -> VaultOracleDatum { if is_charge_percentage_valid { 10 } else { - 101 + 10001 } let app_oracle = @@ -128,43 +138,79 @@ fn mock_mint_vault_datum(test_case: MintVaultTestCase) -> VaultOracleDatum { [#"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"] } - VaultOracleDatum { - app_oracle, - vault_script_hash: mock_vault_script_hash, - l1_deposit_intent_script_hash: mock_l1_deposit_intent_script_hash, - l1_withdrawal_intent_script_hash: mock_l1_withdrawal_intent_script_hash, - l2_deposit_intent_script_hash: mock_l2_deposit_intent_script_hash, - l2_withdrawal_intent_script_hash: mock_l2_withdrawal_intent_script_hash, - pluggable_logic: mock_pluggable_logic, - vault_stake_rotation_script_hash: mock_vault_stake_rotation_script_hash, - operator_account: mock_operator_account, - operator_fee_rate_bp, - operator_min_deposit_rate_bp: 10, - hydra_node_pub_keys, - is_active: True, - total_shares, - operator_shares, - total_deposited, - shares_merkle_root, - total_fee_share_collected, - } + let vault_oracle_datum = + VaultOracleDatum { + app_oracle, + vault_script_hash: mock_vault_script_hash, + l1_deposit_intent_script_hash: mock_l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash: mock_l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash: mock_l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash: mock_l2_withdrawal_intent_script_hash, + pluggable_logic: mock_pluggable_logic, + vault_stake_rotation_script_hash: mock_vault_stake_rotation_script_hash, + operator_account: mock_operator_account, + operator_fee_rate_bp, + operator_min_deposit_rate_bp: 10, + hydra_node_pub_keys, + is_active: True, + total_shares, + operator_shares, + total_deposited, + shares_merkle_root, + total_fee_share_collected, + } + + // Config datum - should match state oracle's config fields + let vault_config_datum = + if is_config_matching { + VaultConfig { + app_oracle, + vault_script_hash: mock_vault_script_hash, + l1_deposit_intent_script_hash: mock_l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash: mock_l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash: mock_l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash: mock_l2_withdrawal_intent_script_hash, + pluggable_logic: mock_pluggable_logic, + operator_account: mock_operator_account, + hydra_node_pub_keys, + } + } else { + // Mismatched config - use different pluggable_logic + VaultConfig { + app_oracle, + vault_script_hash: mock_vault_script_hash, + l1_deposit_intent_script_hash: mock_l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash: mock_l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash: mock_l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash: mock_l2_withdrawal_intent_script_hash, + pluggable_logic: #"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + operator_account: mock_operator_account, + hydra_node_pub_keys, + } + } + + (vault_oracle_datum, vault_config_datum) } fn mock_mint_vault_tx(test_case: MintVaultTestCase) -> Transaction { let MintVaultTestCase { is_initial_utxo_consumed, is_oracle_nft_minted, + is_config_output_present, is_app_oracle_referenced, .. } = test_case - let vault_datum = mock_mint_vault_datum(test_case) + let (vault_oracle_datum, vault_config_datum) = + mock_mint_vault_datums(test_case) let vault_nft_policy = mock_vault_nft let app_oracle_value = from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) let vault_oracle_output_value = from_asset(vault_nft_policy, "", 1) |> add("", "", 2_000_000) + let vault_config_output_value = + from_asset(vault_nft_policy, "", 1) |> add("", "", 2_000_000) // Initial utxo index - use 99,0 to match mock_initial_utxo, or different if not consumed let initial_utxo_index = @@ -174,9 +220,10 @@ fn mock_mint_vault_tx(test_case: MintVaultTestCase) -> Transaction { 999 } + // Mint 2 NFTs for split oracle (or 0 if not minting) let mint_quantity = if is_oracle_nft_minted { - 1 + 2 } else { 0 } @@ -199,11 +246,18 @@ fn mock_mint_vault_tx(test_case: MintVaultTestCase) -> Transaction { from_asset("", "", 2_000_000), mock_pub_key_address(0, None), ) - // Mint vault oracle NFT + // Mint vault oracle NFTs (2 for split oracle) |> mint(True, mint_quantity, vault_nft_policy, "") - // Vault oracle output + // Config Oracle output (VaultConfig datum) + |> tx_out( + is_config_output_present, + from_script(vault_nft_policy), + vault_config_output_value, + ) + |> tx_out_inline_datum(is_config_output_present, vault_config_datum) + // State Oracle output (VaultOracleDatum) |> tx_out(True, from_script(vault_nft_policy), vault_oracle_output_value) - |> tx_out_inline_datum(True, vault_datum) + |> tx_out_inline_datum(True, vault_oracle_datum) |> complete() } @@ -324,10 +378,29 @@ test s0_mint_fail_mint_vault_with_invalid_hydra_keys() { !run_mint_vault(test_case) } +test s0_mint_fail_mint_vault_without_config_output() fail { + let test_case = + MintVaultTestCase { + ..default_mint_vault_test_case(), + is_config_output_present: False, + } + run_mint_vault(test_case) +} + +test s0_mint_fail_mint_vault_with_mismatched_config() { + let test_case = + MintVaultTestCase { + ..default_mint_vault_test_case(), + is_config_matching: False, + } + !run_mint_vault(test_case) +} + // ========== CloseVault Test Case ========== type CloseVaultTestCase { - is_oracle_input_present: Bool, + is_state_oracle_input_present: Bool, + is_config_oracle_input_present: Bool, is_oracle_nft_burnt: Bool, is_app_oracle_referenced: Bool, is_total_shares_zero: Bool, @@ -338,7 +411,8 @@ type CloseVaultTestCase { fn default_close_vault_test_case() -> CloseVaultTestCase { CloseVaultTestCase { - is_oracle_input_present: True, + is_state_oracle_input_present: True, + is_config_oracle_input_present: True, is_oracle_nft_burnt: True, is_app_oracle_referenced: True, is_total_shares_zero: True, @@ -348,7 +422,9 @@ fn default_close_vault_test_case() -> CloseVaultTestCase { } } -fn mock_close_vault_datum(test_case: CloseVaultTestCase) -> VaultOracleDatum { +fn mock_close_vault_state_datum( + test_case: CloseVaultTestCase, +) -> VaultOracleDatum { let CloseVaultTestCase { is_total_shares_zero, is_merkle_empty, .. } = test_case @@ -379,7 +455,8 @@ fn mock_close_vault_datum(test_case: CloseVaultTestCase) -> VaultOracleDatum { fn mock_close_vault_tx(test_case: CloseVaultTestCase) -> Transaction { let CloseVaultTestCase { - is_oracle_input_present, + is_state_oracle_input_present, + is_config_oracle_input_present, is_oracle_nft_burnt, is_app_oracle_referenced, is_operator_signed, @@ -388,7 +465,7 @@ fn mock_close_vault_tx(test_case: CloseVaultTestCase) -> Transaction { } = test_case let vault_nft_policy = mock_vault_nft - let close_vault_datum = mock_close_vault_datum(test_case) + let close_vault_state_datum = mock_close_vault_state_datum(test_case) let app_oracle_value = from_asset(mock_app_oracle, "", 1) |> add("", "", 2_000_000) @@ -405,17 +482,32 @@ fn mock_close_vault_tx(test_case: CloseVaultTestCase) -> Transaction { mock_app_oracle_address, ) |> ref_tx_in_inline_datum(is_app_oracle_referenced, mock_app_oracle_datum) - // Vault oracle input + // Config Oracle input (VaultConfig datum) |> tx_in( - is_oracle_input_present, + is_config_oracle_input_present, mock_tx_hash(1), 0, vault_oracle_input_value, from_script(vault_nft_policy), ) - |> tx_in_inline_datum(is_oracle_input_present, close_vault_datum) - // Burn vault oracle NFT - |> mint(is_oracle_nft_burnt, -1, vault_nft_policy, "") + |> tx_in_inline_datum( + is_config_oracle_input_present, + mock_vault_config_datum, + ) + // State Oracle input (VaultOracleDatum) + |> tx_in( + is_state_oracle_input_present, + mock_tx_hash(1), + 1, + vault_oracle_input_value, + from_script(vault_nft_policy), + ) + |> tx_in_inline_datum( + is_state_oracle_input_present, + close_vault_state_datum, + ) + // Burn both oracle NFTs (-2) + |> mint(is_oracle_nft_burnt, -2, vault_nft_policy, "") // Signatures |> required_signer_hash(is_operator_signed, mock_operator_key) |> required_signer_hash(is_operation_signed, mock_operation_key) @@ -440,11 +532,20 @@ test s0_mint_success_close_vault() { run_close_vault(test_case) } -test s0_mint_fail_close_vault_without_oracle_input() fail { +test s0_mint_fail_close_vault_without_state_oracle_input() fail { + let test_case = + CloseVaultTestCase { + ..default_close_vault_test_case(), + is_state_oracle_input_present: False, + } + run_close_vault(test_case) +} + +test s0_mint_fail_close_vault_without_config_oracle_input() fail { let test_case = CloseVaultTestCase { ..default_close_vault_test_case(), - is_oracle_input_present: False, + is_config_oracle_input_present: False, } run_close_vault(test_case) } diff --git a/validators/tests/vault_oracle/spend.ak b/validators/tests/vault_oracle/spend.ak index be2ca94..daf0445 100644 --- a/validators/tests/vault_oracle/spend.ak +++ b/validators/tests/vault_oracle/spend.ak @@ -1,306 +1,24 @@ -use aiken/cbor -use aiken/merkle_patricia_forestry as mpf use cardano/address.{from_script} -use cardano/assets.{add, from_asset, from_asset_list} +use cardano/assets.{add, from_asset} use cardano/transaction.{Mint, Transaction} use mocktail.{ add_redeemer, complete, mint, mock_tx_hash, mock_utxo_ref, mocktail_tx, - ref_tx_in, ref_tx_in_inline_datum, required_signer_hash, script_withdrawal, - tx_in, tx_in_inline_datum, tx_out, tx_out_inline_datum, + required_signer_hash, tx_in, tx_in_inline_datum, tx_out, tx_out_inline_datum, } use tests/utils.{ - mock_app_oracle, mock_app_oracle_address, mock_app_oracle_datum, - mock_create_vault_deposit_m_value, mock_create_vault_initial_shares, - mock_create_vault_message, mock_create_vault_signatures, - mock_create_vault_total_deposited, mock_hydra_signer_1, mock_hydra_signer_2, - mock_hydra_signer_3, mock_initial_utxo, mock_l1_deposit_intent_script_hash, + mock_app_oracle, mock_hydra_signer_1, mock_hydra_signer_2, mock_hydra_signer_3, + mock_initial_utxo, mock_l1_deposit_intent_script_hash, mock_l1_withdrawal_intent_script_hash, mock_l2_deposit_intent_script_hash, - mock_l2_withdrawal_intent_script_hash, mock_pluggable_logic, - mock_user_trade_account, mock_vault_nft, mock_vault_oracle_datum, - mock_vault_script_hash, null_hash, + mock_l2_withdrawal_intent_script_hash, mock_vault_config_datum, mock_vault_nft, + mock_vault_oracle_datum, } use types.{ - BurnIntent, CancelIntent, HydraCommit, HydraDecommit, L1InitialDeposit, - PluggableLogic, ProcessL1Deposit, ProcessL1Withdrawal, ProcessL2Deposit, - ProcessL2Withdrawal, SharesRecordEntry, UpdateConfig, VaultOracleDatum, - VaultOracleSpendRedeemer, + BurnIntent, BurnIntentL2, BurnVault, CancelIntent, CancelIntentL2, HydraCommit, + HydraDecommit, ProcessL1Deposit, ProcessL1Withdrawal, ProcessL2Deposit, + ProcessL2Withdrawal, UpdateConfig, VaultOracleDatum, VaultOracleSpendRedeemer, } use vault_oracle/spend_mint as vault_oracle -// ========== L1InitialDeposit Test Case ========== - -type L1InitialDepositTestCase { - is_total_shares_zero: Bool, - is_keys_valid: Bool, - is_output_total_shares_correct: Bool, - is_output_operator_shares_zero: Bool, - is_output_total_deposited_correct: Bool, - is_output_merkle_root_correct: Bool, - is_output_fee_collected_zero: Bool, - is_deposit_in_vault: Bool, -} - -fn default_l1_initial_deposit_test_case() -> L1InitialDepositTestCase { - L1InitialDepositTestCase { - is_total_shares_zero: True, - is_keys_valid: True, - is_output_total_shares_correct: True, - is_output_operator_shares_zero: True, - is_output_total_deposited_correct: True, - is_output_merkle_root_correct: True, - is_output_fee_collected_zero: True, - is_deposit_in_vault: True, - } -} - -// Input datum for L1InitialDeposit: must have total_shares = 0 -fn mock_l1_initial_deposit_input_datum( - test_case: L1InitialDepositTestCase, -) -> VaultOracleDatum { - let L1InitialDepositTestCase { is_total_shares_zero, is_keys_valid, .. } = - test_case - - let total_shares = - if is_total_shares_zero { - 0 - } else { - 100 - } - - // For invalid keys, use different keys - let hydra_node_pub_keys = - if is_keys_valid { - mock_vault_oracle_datum.hydra_node_pub_keys - } else { - [#"0000000000000000000000000000000000000000000000000000000000000000"] - } - - VaultOracleDatum { - ..mock_vault_oracle_datum, - total_shares: total_shares, - operator_shares: 0, - total_deposited: 0, - shares_merkle_root: null_hash, - total_fee_share_collected: 0, - hydra_node_pub_keys: hydra_node_pub_keys, - } -} - -// Compute expected merkle root for depositor's initial shares -fn compute_expected_merkle_root() -> ByteArray { - let mpf_key = cbor.serialise(mock_user_trade_account) - let entry = - SharesRecordEntry { - shares: mock_create_vault_initial_shares, - total_deposited: mock_create_vault_total_deposited, - } - let mpf_value = cbor.serialise(entry) - mpf.root(mpf.insert(mpf.empty, mpf_key, mpf_value, [])) -} - -// Output datum for L1InitialDeposit -fn mock_l1_initial_deposit_output_datum( - test_case: L1InitialDepositTestCase, -) -> VaultOracleDatum { - let L1InitialDepositTestCase { - is_output_total_shares_correct, - is_output_operator_shares_zero, - is_output_total_deposited_correct, - is_output_merkle_root_correct, - is_output_fee_collected_zero, - .. - } = test_case - - let total_shares = - if is_output_total_shares_correct { - mock_create_vault_initial_shares - } else { - mock_create_vault_initial_shares + 1 - } - - let operator_shares = - if is_output_operator_shares_zero { - 0 - } else { - 100 - } - - let total_deposited = - if is_output_total_deposited_correct { - mock_create_vault_total_deposited - } else { - mock_create_vault_total_deposited + 1 - } - - let shares_merkle_root = - if is_output_merkle_root_correct { - compute_expected_merkle_root() - } else { - #"1111111111111111111111111111111111111111111111111111111111111111" - } - - let total_fee_share_collected = - if is_output_fee_collected_zero { - 0 - } else { - 100 - } - - VaultOracleDatum { - ..mock_vault_oracle_datum, - total_shares: total_shares, - operator_shares: operator_shares, - total_deposited: total_deposited, - shares_merkle_root: shares_merkle_root, - total_fee_share_collected: total_fee_share_collected, - } -} - -fn mock_l1_initial_deposit_tx( - test_case: L1InitialDepositTestCase, -) -> Transaction { - let L1InitialDepositTestCase { is_deposit_in_vault, .. } = test_case - - let vault_oracle_address = from_script(mock_vault_nft) - let vault_address = from_script(mock_vault_script_hash) - let app_oracle_value = from_asset(mock_app_oracle, "", 1) - let vault_oracle_value = - from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) - - let input_datum = mock_l1_initial_deposit_input_datum(test_case) - let output_datum = mock_l1_initial_deposit_output_datum(test_case) - - // Deposit value to vault - let deposit_value = from_asset_list(mock_create_vault_deposit_m_value) - let vault_output_value = - if is_deposit_in_vault { - deposit_value - } else { - from_asset("", "", 1_000_000) - } - - mocktail_tx() - // App oracle reference input - |> ref_tx_in( - True, - mock_tx_hash(1), - 0, - app_oracle_value, - mock_app_oracle_address, - ) - |> ref_tx_in_inline_datum(True, mock_app_oracle_datum) - // Vault oracle input - |> tx_in(True, mock_tx_hash(0), 0, vault_oracle_value, vault_oracle_address) - |> tx_in_inline_datum(True, input_datum) - // Vault oracle output - |> tx_out(True, vault_oracle_address, vault_oracle_value) - |> tx_out_inline_datum(True, output_datum) - // Vault output (deposit) - |> tx_out(True, vault_address, vault_output_value) - |> complete() -} - -fn run_l1_initial_deposit(test_case: L1InitialDepositTestCase) -> Bool { - let tx = mock_l1_initial_deposit_tx(test_case) - let input_datum = mock_l1_initial_deposit_input_datum(test_case) - - let redeemer = - L1InitialDeposit { - depositor: mock_user_trade_account, - initial_deposit: mock_create_vault_deposit_m_value, - prices_message: mock_create_vault_message, - signatures: mock_create_vault_signatures, - initial_shares_proof: [], - } - - vault_oracle.vault_oracle.spend( - mock_initial_utxo, - mock_app_oracle, - Some(input_datum), - redeemer, - mock_utxo_ref(0, 0), - tx, - ) -} - -// ========== L1InitialDeposit Tests ========== - -test s0_spend_success_l1_initial_deposit() { - run_l1_initial_deposit(default_l1_initial_deposit_test_case()) -} - -test s0_spend_fail_l1_initial_deposit_when_total_shares_not_zero() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_total_shares_zero: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_with_invalid_keys() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_keys_valid: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_when_output_total_shares_wrong() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_output_total_shares_correct: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_when_operator_shares_not_zero() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_output_operator_shares_zero: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_when_output_total_deposited_wrong() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_output_total_deposited_correct: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_when_merkle_root_wrong() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_output_merkle_root_correct: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_when_fee_collected_not_zero() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_output_fee_collected_zero: False, - } - !run_l1_initial_deposit(test_case) -} - -test s0_spend_fail_l1_initial_deposit_when_deposit_not_in_vault() { - let test_case = - L1InitialDepositTestCase { - ..default_l1_initial_deposit_test_case(), - is_deposit_in_vault: False, - } - !run_l1_initial_deposit(test_case) -} - // ========== ProcessIntent Test Case ========== type ProcessIntentTestCase { @@ -312,7 +30,7 @@ fn default_process_intent_test_case() -> ProcessIntentTestCase { ProcessIntentTestCase { is_intent_burnt: True, is_burn_intent_redeemer: True } } -fn mock_process_intent_tx( +fn mock_process_l1_intent_tx( intent_script_hash: ByteArray, test_case: ProcessIntentTestCase, ) -> Transaction { @@ -333,16 +51,55 @@ fn mock_process_intent_tx( |> add_redeemer(True, Pair(Mint(intent_script_hash), burn_redeemer)) } -fn run_process_intent( +fn mock_process_l2_intent_tx( + intent_script_hash: ByteArray, + test_case: ProcessIntentTestCase, +) -> Transaction { + let ProcessIntentTestCase { is_intent_burnt, is_burn_intent_redeemer } = + test_case + + let burn_redeemer: Data = + if is_burn_intent_redeemer { + BurnIntentL2 + } else { + // Use some other redeemer that's not BurnIntentL2 + CancelIntentL2 + } + + mocktail_tx() + |> mint(is_intent_burnt, -1, intent_script_hash, "") + |> complete() + |> add_redeemer(True, Pair(Mint(intent_script_hash), burn_redeemer)) +} + +fn run_process_l1_intent( + intent_script_hash: ByteArray, + redeemer: VaultOracleSpendRedeemer, + test_case: ProcessIntentTestCase, +) -> Bool { + let tx = mock_process_l1_intent_tx(intent_script_hash, test_case) + let datum: Data = mock_vault_oracle_datum + vault_oracle.vault_oracle.spend( + mock_initial_utxo, + mock_app_oracle, + Some(datum), + redeemer, + mock_utxo_ref(0, 0), + tx, + ) +} + +fn run_process_l2_intent( intent_script_hash: ByteArray, redeemer: VaultOracleSpendRedeemer, test_case: ProcessIntentTestCase, ) -> Bool { - let tx = mock_process_intent_tx(intent_script_hash, test_case) + let tx = mock_process_l2_intent_tx(intent_script_hash, test_case) + let datum: Data = mock_vault_oracle_datum vault_oracle.vault_oracle.spend( mock_initial_utxo, mock_app_oracle, - Some(mock_vault_oracle_datum), + Some(datum), redeemer, mock_utxo_ref(0, 0), tx, @@ -352,7 +109,7 @@ fn run_process_intent( // ========== ProcessL1Deposit Tests ========== test s0_spend_success_process_l1_deposit() { - run_process_intent( + run_process_l1_intent( mock_l1_deposit_intent_script_hash, ProcessL1Deposit, default_process_intent_test_case(), @@ -365,7 +122,7 @@ test s0_spend_fail_process_l1_deposit_without_burn_intent_redeemer() { ..default_process_intent_test_case(), is_burn_intent_redeemer: False, } - !run_process_intent( + !run_process_l1_intent( mock_l1_deposit_intent_script_hash, ProcessL1Deposit, test_case, @@ -375,7 +132,7 @@ test s0_spend_fail_process_l1_deposit_without_burn_intent_redeemer() { // ========== ProcessL1Withdrawal Tests ========== test s0_spend_success_process_l1_withdrawal() { - run_process_intent( + run_process_l1_intent( mock_l1_withdrawal_intent_script_hash, ProcessL1Withdrawal, default_process_intent_test_case(), @@ -385,7 +142,7 @@ test s0_spend_success_process_l1_withdrawal() { // ========== ProcessL2Deposit Tests ========== test s0_spend_success_process_l2_deposit() { - run_process_intent( + run_process_l2_intent( mock_l2_deposit_intent_script_hash, ProcessL2Deposit, default_process_intent_test_case(), @@ -395,7 +152,7 @@ test s0_spend_success_process_l2_deposit() { // ========== ProcessL2Withdrawal Tests ========== test s0_spend_success_process_l2_withdrawal() { - run_process_intent( + run_process_l2_intent( mock_l2_withdrawal_intent_script_hash, ProcessL2Withdrawal, default_process_intent_test_case(), @@ -434,10 +191,12 @@ fn mock_hydra_commit_tx(test_case: HydraCommitTestCase) -> Transaction { fn run_hydra_commit(test_case: HydraCommitTestCase) -> Bool { let tx = mock_hydra_commit_tx(test_case) + let datum: Data = mock_vault_oracle_datum + vault_oracle.vault_oracle.spend( mock_initial_utxo, mock_app_oracle, - Some(mock_vault_oracle_datum), + Some(datum), HydraCommit, mock_utxo_ref(0, 0), tx, @@ -533,10 +292,12 @@ fn mock_hydra_decommit_tx(test_case: HydraDecommitTestCase) -> Transaction { fn run_hydra_decommit(test_case: HydraDecommitTestCase) -> Bool { let tx = mock_hydra_decommit_tx(test_case) + let datum: Data = mock_vault_oracle_datum + vault_oracle.vault_oracle.spend( mock_initial_utxo, mock_app_oracle, - Some(mock_vault_oracle_datum), + Some(datum), HydraDecommit, mock_utxo_ref(0, 0), tx, @@ -585,129 +346,161 @@ test s0_spend_fail_hydra_decommit_when_input_not_equal_output() { !run_hydra_decommit(test_case) } -// ========== PluggableLogic Test Case ========== +// ========== UpdateConfig Test Case (State Oracle) ========== +// When spending VaultOracleDatum (State Oracle), state CAN change. +// Only charge percentage validation applies. -type PluggableLogicTestCase { - is_withdrawal_script_validated: Bool, +type UpdateConfigStateOracleTestCase { + is_hydra_signer_1_signed: Bool, + is_hydra_signer_2_signed: Bool, + is_hydra_signer_3_signed: Bool, + is_charge_percentage_valid: Bool, } -fn default_pluggable_logic_test_case() -> PluggableLogicTestCase { - PluggableLogicTestCase { is_withdrawal_script_validated: True } +fn default_update_config_state_oracle_test_case() -> UpdateConfigStateOracleTestCase { + UpdateConfigStateOracleTestCase { + is_hydra_signer_1_signed: True, + is_hydra_signer_2_signed: True, + is_hydra_signer_3_signed: True, + is_charge_percentage_valid: True, + } } -fn mock_pluggable_logic_tx(test_case: PluggableLogicTestCase) -> Transaction { - let PluggableLogicTestCase { is_withdrawal_script_validated } = test_case +fn mock_update_config_state_oracle_output_datum( + test_case: UpdateConfigStateOracleTestCase, +) -> VaultOracleDatum { + let UpdateConfigStateOracleTestCase { is_charge_percentage_valid, .. } = + test_case + + let operator_fee_rate_bp = + if is_charge_percentage_valid { + 50 + } else { + 101 + } + + // State can change when spending State Oracle + VaultOracleDatum { + ..mock_vault_oracle_datum, + total_shares: mock_vault_oracle_datum.total_shares + 100, + operator_shares: mock_vault_oracle_datum.operator_shares + 10, + operator_fee_rate_bp: operator_fee_rate_bp, + } +} + +fn mock_update_config_state_oracle_tx( + test_case: UpdateConfigStateOracleTestCase, +) -> Transaction { + let UpdateConfigStateOracleTestCase { + is_hydra_signer_1_signed, + is_hydra_signer_2_signed, + is_hydra_signer_3_signed, + .. + } = test_case + + let vault_oracle_address = from_script(mock_vault_nft) + let vault_value = from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) + let output_datum = mock_update_config_state_oracle_output_datum(test_case) mocktail_tx() - |> script_withdrawal( - is_withdrawal_script_validated, - mock_pluggable_logic, - 0, - ) + |> tx_in(True, mock_tx_hash(0), 0, vault_value, vault_oracle_address) + |> tx_in_inline_datum(True, mock_vault_oracle_datum) + |> tx_out(True, vault_oracle_address, vault_value) + |> tx_out_inline_datum(True, output_datum) + |> required_signer_hash(is_hydra_signer_1_signed, mock_hydra_signer_1) + |> required_signer_hash(is_hydra_signer_2_signed, mock_hydra_signer_2) + |> required_signer_hash(is_hydra_signer_3_signed, mock_hydra_signer_3) |> complete() } -fn run_pluggable_logic(test_case: PluggableLogicTestCase) -> Bool { - let tx = mock_pluggable_logic_tx(test_case) +fn run_update_config_state_oracle( + test_case: UpdateConfigStateOracleTestCase, +) -> Bool { + let tx = mock_update_config_state_oracle_tx(test_case) + let datum: Data = mock_vault_oracle_datum + vault_oracle.vault_oracle.spend( mock_initial_utxo, mock_app_oracle, - Some(mock_vault_oracle_datum), - PluggableLogic, + Some(datum), + UpdateConfig, mock_utxo_ref(0, 0), tx, ) } -// ========== PluggableLogic Tests ========== +// ========== UpdateConfig State Oracle Tests ========== -test s0_spend_success_pluggable_logic() { - run_pluggable_logic(default_pluggable_logic_test_case()) +test s0_spend_success_update_config_state_oracle() { + run_update_config_state_oracle(default_update_config_state_oracle_test_case()) } -test s0_spend_fail_pluggable_logic_without_withdrawal_script() { +test s0_spend_fail_update_config_state_oracle_without_signer_1() { let test_case = - PluggableLogicTestCase { is_withdrawal_script_validated: False } - !run_pluggable_logic(test_case) + UpdateConfigStateOracleTestCase { + ..default_update_config_state_oracle_test_case(), + is_hydra_signer_1_signed: False, + } + !run_update_config_state_oracle(test_case) } -// ========== UpdateConfig Test Case ========== +test s0_spend_fail_update_config_state_oracle_without_signer_2() { + let test_case = + UpdateConfigStateOracleTestCase { + ..default_update_config_state_oracle_test_case(), + is_hydra_signer_2_signed: False, + } + !run_update_config_state_oracle(test_case) +} -type UpdateConfigTestCase { +test s0_spend_fail_update_config_state_oracle_without_signer_3() { + let test_case = + UpdateConfigStateOracleTestCase { + ..default_update_config_state_oracle_test_case(), + is_hydra_signer_3_signed: False, + } + !run_update_config_state_oracle(test_case) +} + +test s0_spend_fail_update_config_state_oracle_with_invalid_charge_percentage() { + let test_case = + UpdateConfigStateOracleTestCase { + ..default_update_config_state_oracle_test_case(), + is_charge_percentage_valid: False, + } + !run_update_config_state_oracle(test_case) +} + +// ========== UpdateConfig Test Case (Config Oracle) ========== +// When spending VaultConfig (Config Oracle), state fields in output must remain 0. + +type UpdateConfigConfigOracleTestCase { is_hydra_signer_1_signed: Bool, is_hydra_signer_2_signed: Bool, is_hydra_signer_3_signed: Bool, - is_total_shares_unchanged: Bool, - is_operator_shares_unchanged: Bool, - is_total_deposited_unchanged: Bool, - is_merkle_root_unchanged: Bool, - is_fee_collected_unchanged: Bool, is_charge_percentage_valid: Bool, + is_state_zero: Bool, } -fn default_update_config_test_case() -> UpdateConfigTestCase { - UpdateConfigTestCase { +fn default_update_config_config_oracle_test_case() -> UpdateConfigConfigOracleTestCase { + UpdateConfigConfigOracleTestCase { is_hydra_signer_1_signed: True, is_hydra_signer_2_signed: True, is_hydra_signer_3_signed: True, - is_total_shares_unchanged: True, - is_operator_shares_unchanged: True, - is_total_deposited_unchanged: True, - is_merkle_root_unchanged: True, - is_fee_collected_unchanged: True, is_charge_percentage_valid: True, + is_state_zero: True, } } -fn mock_update_config_output_datum( - test_case: UpdateConfigTestCase, +fn mock_update_config_config_oracle_output_datum( + test_case: UpdateConfigConfigOracleTestCase, ) -> VaultOracleDatum { - let UpdateConfigTestCase { - is_total_shares_unchanged, - is_operator_shares_unchanged, - is_total_deposited_unchanged, - is_merkle_root_unchanged, - is_fee_collected_unchanged, + let UpdateConfigConfigOracleTestCase { is_charge_percentage_valid, + is_state_zero, .. } = test_case - let total_shares = - if is_total_shares_unchanged { - mock_vault_oracle_datum.total_shares - } else { - mock_vault_oracle_datum.total_shares + 1 - } - - let operator_shares = - if is_operator_shares_unchanged { - mock_vault_oracle_datum.operator_shares - } else { - mock_vault_oracle_datum.operator_shares + 1 - } - - let total_deposited = - if is_total_deposited_unchanged { - mock_vault_oracle_datum.total_deposited - } else { - mock_vault_oracle_datum.total_deposited + 1 - } - - let shares_merkle_root = - if is_merkle_root_unchanged { - mock_vault_oracle_datum.shares_merkle_root - } else { - // Different hash - #"1111111111111111111111111111111111111111111111111111111111111111" - } - - let total_fee_share_collected = - if is_fee_collected_unchanged { - mock_vault_oracle_datum.total_fee_share_collected - } else { - mock_vault_oracle_datum.total_fee_share_collected + 1 - } - let operator_fee_rate_bp = if is_charge_percentage_valid { 50 @@ -715,6 +508,21 @@ fn mock_update_config_output_datum( 101 } + // State fields must be 0 when spending Config Oracle + let ( + total_shares, + operator_shares, + total_deposited, + shares_merkle_root, + total_fee_share_collected, + ) = + if is_state_zero { + (0, 0, 0, "", 0) + } else { + // Non-zero state should fail + (100, 10, 1000, "", 5) + } + VaultOracleDatum { ..mock_vault_oracle_datum, total_shares: total_shares, @@ -726,8 +534,10 @@ fn mock_update_config_output_datum( } } -fn mock_update_config_tx(test_case: UpdateConfigTestCase) -> Transaction { - let UpdateConfigTestCase { +fn mock_update_config_config_oracle_tx( + test_case: UpdateConfigConfigOracleTestCase, +) -> Transaction { + let UpdateConfigConfigOracleTestCase { is_hydra_signer_1_signed, is_hydra_signer_2_signed, is_hydra_signer_3_signed, @@ -736,11 +546,11 @@ fn mock_update_config_tx(test_case: UpdateConfigTestCase) -> Transaction { let vault_oracle_address = from_script(mock_vault_nft) let vault_value = from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) - let output_datum = mock_update_config_output_datum(test_case) + let output_datum = mock_update_config_config_oracle_output_datum(test_case) mocktail_tx() |> tx_in(True, mock_tx_hash(0), 0, vault_value, vault_oracle_address) - |> tx_in_inline_datum(True, mock_vault_oracle_datum) + |> tx_in_inline_datum(True, mock_vault_config_datum) |> tx_out(True, vault_oracle_address, vault_value) |> tx_out_inline_datum(True, output_datum) |> required_signer_hash(is_hydra_signer_1_signed, mock_hydra_signer_1) @@ -749,101 +559,110 @@ fn mock_update_config_tx(test_case: UpdateConfigTestCase) -> Transaction { |> complete() } -fn run_update_config(test_case: UpdateConfigTestCase) -> Bool { - let tx = mock_update_config_tx(test_case) +fn run_update_config_config_oracle( + test_case: UpdateConfigConfigOracleTestCase, +) -> Bool { + let tx = mock_update_config_config_oracle_tx(test_case) + let datum: Data = mock_vault_config_datum + vault_oracle.vault_oracle.spend( mock_initial_utxo, mock_app_oracle, - Some(mock_vault_oracle_datum), + Some(datum), UpdateConfig, mock_utxo_ref(0, 0), tx, ) } -// ========== UpdateConfig Tests ========== +// ========== UpdateConfig Config Oracle Tests ========== -test s0_spend_success_update_config() { - run_update_config(default_update_config_test_case()) +test s0_spend_success_update_config_config_oracle() { + run_update_config_config_oracle( + default_update_config_config_oracle_test_case(), + ) } -test s0_spend_fail_update_config_without_signer_1() { +test s0_spend_fail_update_config_config_oracle_without_signer_1() { let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), + UpdateConfigConfigOracleTestCase { + ..default_update_config_config_oracle_test_case(), is_hydra_signer_1_signed: False, } - !run_update_config(test_case) + !run_update_config_config_oracle(test_case) } -test s0_spend_fail_update_config_without_signer_2() { +test s0_spend_fail_update_config_config_oracle_with_invalid_charge_percentage() { let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_hydra_signer_2_signed: False, + UpdateConfigConfigOracleTestCase { + ..default_update_config_config_oracle_test_case(), + is_charge_percentage_valid: False, } - !run_update_config(test_case) + !run_update_config_config_oracle(test_case) } -test s0_spend_fail_update_config_without_signer_3() { +test s0_spend_fail_update_config_config_oracle_with_nonzero_state() { let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_hydra_signer_3_signed: False, + UpdateConfigConfigOracleTestCase { + ..default_update_config_config_oracle_test_case(), + is_state_zero: False, } - !run_update_config(test_case) + !run_update_config_config_oracle(test_case) } -test s0_spend_fail_update_config_when_total_shares_changed() { - let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_total_shares_unchanged: False, - } - !run_update_config(test_case) +// ========== BurnVault Test Case ========== +// BurnVault allows spending oracle when NFTs are being burnt. + +type BurnVaultTestCase { + is_oracle_burnt: Bool, } -test s0_spend_fail_update_config_when_operator_shares_changed() { - let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_operator_shares_unchanged: False, - } - !run_update_config(test_case) +fn default_burn_vault_test_case() -> BurnVaultTestCase { + BurnVaultTestCase { is_oracle_burnt: True } } -test s0_spend_fail_update_config_when_total_deposited_changed() { - let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_total_deposited_unchanged: False, +fn mock_burn_vault_tx(test_case: BurnVaultTestCase) -> Transaction { + let BurnVaultTestCase { is_oracle_burnt } = test_case + + let vault_oracle_address = from_script(mock_vault_nft) + let vault_value = from_asset(mock_vault_nft, "", 1) |> add("", "", 2_000_000) + + // Both oracles must be burnt (-2 total) + let burn_quantity = + if is_oracle_burnt { + -2 + } else { + -1 } - !run_update_config(test_case) + + mocktail_tx() + |> tx_in(True, mock_tx_hash(0), 0, vault_value, vault_oracle_address) + |> tx_in_inline_datum(True, mock_vault_oracle_datum) + |> mint(True, burn_quantity, mock_vault_nft, "") + |> complete() } -test s0_spend_fail_update_config_when_merkle_root_changed() { - let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_merkle_root_unchanged: False, - } - !run_update_config(test_case) +fn run_burn_vault(test_case: BurnVaultTestCase) -> Bool { + let tx = mock_burn_vault_tx(test_case) + let datum: Data = mock_vault_oracle_datum + + vault_oracle.vault_oracle.spend( + mock_initial_utxo, + mock_app_oracle, + Some(datum), + BurnVault, + mock_utxo_ref(0, 0), + tx, + ) } -test s0_spend_fail_update_config_when_fee_collected_changed() { - let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_fee_collected_unchanged: False, - } - !run_update_config(test_case) +// ========== BurnVault Tests ========== + +test s0_spend_success_burn_vault() { + run_burn_vault(default_burn_vault_test_case()) } -test s0_spend_fail_update_config_with_invalid_charge_percentage() { - let test_case = - UpdateConfigTestCase { - ..default_update_config_test_case(), - is_charge_percentage_valid: False, - } - !run_update_config(test_case) +test s0_spend_fail_burn_vault_without_burning() { + let test_case = BurnVaultTestCase { is_oracle_burnt: False } + !run_burn_vault(test_case) } diff --git a/validators/tests/withdraw_utils/process_batch.ak b/validators/tests/withdraw_utils/process_batch.ak index cf64df4..016b091 100644 --- a/validators/tests/withdraw_utils/process_batch.ak +++ b/validators/tests/withdraw_utils/process_batch.ak @@ -1,472 +1,472 @@ -use cardano/address.{Address, from_script} -use cardano/assets.{AssetName, PolicyId, from_asset, from_lovelace} -use cardano/transaction.{InlineDatum, Input, NoDatum} -use hydra_dex/types.{Account, UserTradeAccount} as dd_types -use mocktail.{mock_output, mock_pub_key_address, mock_utxo_ref} -use tests/utils.{ - mock_l1_withdrawal_intent_script_hash, mock_l2_withdrawal_intent_script_hash, - mock_operator_fee_rate_bp, mock_total_shares, mock_vault_equity, -} -use types.{MValue, WithdrawalIntentDatum} -use withdraw_utils.{ - cal_per_user_operator_fee, compute_fee_shares, convert_shares_to_usd, -} - -// ========== Mock User Accounts ========== - -// Inner Account types -const mock_user_inner_account_0: Account = - Account { - account_id: "user_0", - master_key: mock_pub_key_address(0, None).payment_credential, - operation_key: mock_pub_key_address(0, None).payment_credential, - } - -const mock_user_inner_account_1: Account = - Account { - account_id: "user_1", - master_key: mock_pub_key_address(1, None).payment_credential, - operation_key: mock_pub_key_address(1, None).payment_credential, - } - -const mock_user_inner_account_2: Account = - Account { - account_id: "user_2", - master_key: mock_pub_key_address(2, None).payment_credential, - operation_key: mock_pub_key_address(2, None).payment_credential, - } - -// Wrap in UserTradeAccount for intent datums -const mock_user_account_0: dd_types.UserAccount = - UserTradeAccount { - account: mock_user_inner_account_0, - trading_logic: mock_l1_withdrawal_intent_script_hash, - } - -const mock_user_account_1: dd_types.UserAccount = - UserTradeAccount { - account: mock_user_inner_account_1, - trading_logic: mock_l1_withdrawal_intent_script_hash, - } - -const mock_user_account_2: dd_types.UserAccount = - UserTradeAccount { - account: mock_user_inner_account_2, - trading_logic: mock_l1_withdrawal_intent_script_hash, - } - -// Derive addresses from accounts for output validation -fn user_address_0() -> Address { - Address { - payment_credential: mock_user_inner_account_0.master_key, - stake_credential: None, - } -} - -fn user_address_1() -> Address { - Address { - payment_credential: mock_user_inner_account_1.master_key, - stake_credential: None, - } -} - -fn user_address_2() -> Address { - Address { - payment_credential: mock_user_inner_account_2.master_key, - stake_credential: None, - } -} - -// ========== Constants ========== - -const usdm_policy = #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913" - -const usdm_name = #"5553444d" - -// prices: (price, scale) tuple - USD = amount * price / 10^scale -pub const prices: Pairs<(PolicyId, AssetName), (Int, Int)> = - [Pair((#"", #""), (2, 0)), Pair((usdm_policy, usdm_name), (1, 0))] - -// ========== Shares amounts ========== -// Using values that produce meaningful withdrawal amounts - -pub const shares_amount_a: Int = 1_250_000_000_000_000 - -pub const shares_amount_b: Int = 2_500_000_000_000_000 - -pub const shares_amount_c: Int = 625_000_000_000_000 - -// ========== Withdrawal intent datums ========== - -const withdrawal_intent_datum_a: Data = - WithdrawalIntentDatum { - withdrawer: mock_user_account_0, - shares_to_redeem: shares_amount_a, - } - -const withdrawal_intent_datum_b: Data = - WithdrawalIntentDatum { - withdrawer: mock_user_account_1, - shares_to_redeem: shares_amount_b, - } - -const withdrawal_intent_datum_c: Data = - WithdrawalIntentDatum { - withdrawer: mock_user_account_2, - shares_to_redeem: shares_amount_c, - } - -// ========== Non-intent inputs ========== - -const input_x = - Input { - output_reference: mock_utxo_ref(99, 0), - output: mock_output( - mock_pub_key_address(999, None), - from_lovelace(1000000), - NoDatum, - None, - ), - } - -const input_y = - Input { - output_reference: mock_utxo_ref(99, 1), - output: mock_output( - mock_pub_key_address(999, None), - from_lovelace(1000000), - NoDatum, - None, - ), - } - -// ========== Intent inputs ========== - -pub const intent_input_a = - Input { - output_reference: mock_utxo_ref(0, 0), - output: mock_output( - from_script(mock_l1_withdrawal_intent_script_hash), - from_lovelace(2000000), - InlineDatum(withdrawal_intent_datum_a), - None, - ), - } - -pub const intent_input_b = - Input { - output_reference: mock_utxo_ref(1, 0), - output: mock_output( - from_script(mock_l1_withdrawal_intent_script_hash), - from_lovelace(2000000), - InlineDatum(withdrawal_intent_datum_b), - None, - ), - } - -pub const intent_input_c = - Input { - output_reference: mock_utxo_ref(2, 0), - output: mock_output( - from_script(mock_l1_withdrawal_intent_script_hash), - from_lovelace(2000000), - InlineDatum(withdrawal_intent_datum_c), - None, - ), - } - -// ========== Input lists ========== - -const inputs = - [input_x, intent_input_a, intent_input_b, input_y, intent_input_c] - -const insufficient_inputs = [input_x, intent_input_a, intent_input_b, input_y] - -// ========== Indices ========== - -const indices = [1, 0, 2] - -const excessive_indices = [0, 1, 2, 3] - -// ========== Helper functions to calculate expected values ========== - -fn user_receives_a() -> Int { - let gross = - convert_shares_to_usd(shares_amount_a, mock_total_shares, mock_vault_equity) - // Cost basis would come from MPF - placeholder using 50% of gross - let cost_basis = gross / 2 - let fee = - cal_per_user_operator_fee( - gross, - cost_basis, - mock_operator_fee_rate_bp, - ) - gross - fee -} - -fn user_receives_b() -> Int { - let gross = - convert_shares_to_usd(shares_amount_b, mock_total_shares, mock_vault_equity) - let cost_basis = gross / 2 - let fee = - cal_per_user_operator_fee( - gross, - cost_basis, - mock_operator_fee_rate_bp, - ) - gross - fee -} - -fn user_receives_c() -> Int { - let gross = - convert_shares_to_usd(shares_amount_c, mock_total_shares, mock_vault_equity) - let cost_basis = gross / 2 - let fee = - cal_per_user_operator_fee( - gross, - cost_basis, - mock_operator_fee_rate_bp, - ) - gross - fee -} - -// ========== User outputs (in USDM, price=1, scale=1) ========== - -pub fn intent_output_a() { - mock_output( - user_address_0(), - from_asset(usdm_policy, usdm_name, user_receives_a()), - NoDatum, - None, - ) -} - -pub fn intent_output_b() { - mock_output( - user_address_1(), - from_asset(usdm_policy, usdm_name, user_receives_b()), - NoDatum, - None, - ) -} - -pub fn intent_output_c() { - mock_output( - user_address_2(), - from_asset(usdm_policy, usdm_name, user_receives_c()), - NoDatum, - None, - ) -} - -// indices = [1, 0, 2] → intent_a→output[1], intent_b→output[0], intent_c→output[2] -fn outputs() { - [intent_output_b(), intent_output_a(), intent_output_c()] -} - -fn incorrect_outputs() { - [intent_output_a(), intent_output_b(), intent_output_c()] -} - -// ========== L2 Intent inputs (using L2 script hash) ========== -// In L2, indices are only used for COUNTING (values ignored). -// Transfer amounts are matched in order with intent UTxOs. - -const l2_withdrawal_intent_datum_a: Data = - WithdrawalIntentDatum { - withdrawer: mock_user_account_0, - shares_to_redeem: shares_amount_a, - } - -const l2_withdrawal_intent_datum_b: Data = - WithdrawalIntentDatum { - withdrawer: mock_user_account_1, - shares_to_redeem: shares_amount_b, - } - -const l2_withdrawal_intent_datum_c: Data = - WithdrawalIntentDatum { - withdrawer: mock_user_account_2, - shares_to_redeem: shares_amount_c, - } - -pub const l2_intent_input_a = - Input { - output_reference: mock_utxo_ref(10, 0), - output: mock_output( - from_script(mock_l2_withdrawal_intent_script_hash), - from_lovelace(2000000), - InlineDatum(l2_withdrawal_intent_datum_a), - None, - ), - } - -pub const l2_intent_input_b = - Input { - output_reference: mock_utxo_ref(11, 0), - output: mock_output( - from_script(mock_l2_withdrawal_intent_script_hash), - from_lovelace(2000000), - InlineDatum(l2_withdrawal_intent_datum_b), - None, - ), - } - -pub const l2_intent_input_c = - Input { - output_reference: mock_utxo_ref(12, 0), - output: mock_output( - from_script(mock_l2_withdrawal_intent_script_hash), - from_lovelace(2000000), - InlineDatum(l2_withdrawal_intent_datum_c), - None, - ), - } - -// L2 input list -const l2_inputs = - [input_x, l2_intent_input_a, l2_intent_input_b, input_y, l2_intent_input_c] - -// L2 indices — only used for counting, actual values ignored -// We have 3 intents, so 3 indices (values don't matter for L2) -const l2_indices = [0, 0, 0] - -// L2 transfer amounts as MValue (in USDM, price=1/scale=1 means USD value = amount) -// These must match user_receives_a, user_receives_b, user_receives_c in order -fn l2_transfer_amount_a() -> MValue { - [Pair(usdm_policy, [Pair(usdm_name, user_receives_a())])] -} - -fn l2_transfer_amount_b() -> MValue { - [Pair(usdm_policy, [Pair(usdm_name, user_receives_b())])] -} - -fn l2_transfer_amount_c() -> MValue { - [Pair(usdm_policy, [Pair(usdm_name, user_receives_c())])] -} - -// Transfer amounts in order matching intent processing order -// Intents are processed: a, b, c (in input list order, skipping non-intent) -fn l2_transfer_amounts() -> List { - [l2_transfer_amount_a(), l2_transfer_amount_b(), l2_transfer_amount_c()] -} - -// Incorrect transfer amounts (wrong order) -fn l2_incorrect_transfer_amounts() -> List { - [l2_transfer_amount_b(), l2_transfer_amount_a(), l2_transfer_amount_c()] -} - -// ========== Expected totals ========== - -const expected_total_shares = - shares_amount_a + shares_amount_b + shares_amount_c - -const expected_total_user_receives = - user_receives_a() + user_receives_b() + user_receives_c() -// ========== Tests ========== -// TODO: Add merkle proofs and complete tests once merkle data is prepared - -// test process_batch_normal() { -// let ( -// total_shares_amount, -// total_user_receives, -// total_fee_shares, -// total_cost_removed, -// final_merkle_root, -// ) = -// process_batched_withdrawal_intent_validation( -// inputs, -// outputs, -// indices, -// mpf_actions, // TODO: provide merkle proof actions -// mock_vault_equity, -// mock_total_shares, -// mock_operator_fee_rate_bp, -// prices, -// mock_l1_withdrawal_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root -// ) -// -// (total_shares_amount == expected_total_shares)? && -// (total_user_receives == expected_total_user_receives)? +// use cardano/address.{Address, from_script} +// use cardano/assets.{AssetName, PolicyId, from_asset, from_lovelace} +// use cardano/transaction.{InlineDatum, Input, NoDatum} +// use hydra_dex/types.{Account, UserTradeAccount} as dd_types +// use mocktail.{mock_output, mock_pub_key_address, mock_utxo_ref} +// use tests/utils.{ +// mock_l1_withdrawal_intent_script_hash, mock_l2_withdrawal_intent_script_hash, +// mock_operator_fee_rate_bp, mock_total_shares, mock_vault_equity, +// } +// use types.{MValue, WithdrawalIntentDatum} +// use withdraw_utils.{ +// cal_per_user_operator_fee, compute_fee_shares, convert_shares_to_usd, // } -// test process_batch_insufficient_inputs() fail { -// // TODO: Add merkle data +// // ========== Mock User Accounts ========== + +// // Inner Account types +// const mock_user_inner_account_0: Account = +// Account { +// account_id: "user_0", +// master_key: mock_pub_key_address(0, None).payment_credential, +// operation_key: mock_pub_key_address(0, None).payment_credential, +// } + +// const mock_user_inner_account_1: Account = +// Account { +// account_id: "user_1", +// master_key: mock_pub_key_address(1, None).payment_credential, +// operation_key: mock_pub_key_address(1, None).payment_credential, +// } + +// const mock_user_inner_account_2: Account = +// Account { +// account_id: "user_2", +// master_key: mock_pub_key_address(2, None).payment_credential, +// operation_key: mock_pub_key_address(2, None).payment_credential, +// } + +// // Wrap in UserTradeAccount for intent datums +// const mock_user_account_0: dd_types.UserAccount = +// UserTradeAccount { +// account: mock_user_inner_account_0, +// trading_logic: mock_l1_withdrawal_intent_script_hash, +// } + +// const mock_user_account_1: dd_types.UserAccount = +// UserTradeAccount { +// account: mock_user_inner_account_1, +// trading_logic: mock_l1_withdrawal_intent_script_hash, +// } + +// const mock_user_account_2: dd_types.UserAccount = +// UserTradeAccount { +// account: mock_user_inner_account_2, +// trading_logic: mock_l1_withdrawal_intent_script_hash, +// } + +// // Derive addresses from accounts for output validation +// fn user_address_0() -> Address { +// Address { +// payment_credential: mock_user_inner_account_0.master_key, +// stake_credential: None, +// } // } -// test process_batch_excessive_indices() fail { -// // TODO: Add merkle data +// fn user_address_1() -> Address { +// Address { +// payment_credential: mock_user_inner_account_1.master_key, +// stake_credential: None, +// } // } -// test process_batch_incorrect_outputs() fail { -// // TODO: Add merkle data +// fn user_address_2() -> Address { +// Address { +// payment_credential: mock_user_inner_account_2.master_key, +// stake_credential: None, +// } // } -// ========== L2 Tests ========== -// L2 uses TransferIntent mechanism instead of direct outputs. -// indices are only for counting (values ignored), transfer_amounts matched in order. -// TODO: Add merkle proofs and complete tests once merkle data is prepared - -// test l2_process_batch_normal() { -// let ( -// total_shares_amount, -// total_user_receives, -// total_fee_shares, -// total_cost_removed, -// final_merkle_root, -// ) = -// process_batched_l2_withdrawal_intent_validation( -// l2_inputs, -// l2_indices, // Only used for counting, values ignored -// mpf_actions, // TODO: provide merkle proof actions -// l2_transfer_amounts(), -// mock_vault_equity, -// mock_total_shares, +// // ========== Constants ========== + +// const usdm_policy = #"c69b981db7a65e339a6d783755f85a2e03afa1cece9714c55fe4c913" + +// const usdm_name = #"5553444d" + +// // prices: (price, scale) tuple - USD = amount * price / 10^scale +// pub const prices: Pairs<(PolicyId, AssetName), (Int, Int)> = +// [Pair((#"", #""), (2, 0)), Pair((usdm_policy, usdm_name), (1, 0))] + +// // ========== Shares amounts ========== +// // Using values that produce meaningful withdrawal amounts + +// pub const shares_amount_a: Int = 1_250_000_000_000_000 + +// pub const shares_amount_b: Int = 2_500_000_000_000_000 + +// pub const shares_amount_c: Int = 625_000_000_000_000 + +// // ========== Withdrawal intent datums ========== + +// const withdrawal_intent_datum_a: Data = +// WithdrawalIntentDatum { +// withdrawer: mock_user_account_0, +// shares_to_redeem: shares_amount_a, +// } + +// const withdrawal_intent_datum_b: Data = +// WithdrawalIntentDatum { +// withdrawer: mock_user_account_1, +// shares_to_redeem: shares_amount_b, +// } + +// const withdrawal_intent_datum_c: Data = +// WithdrawalIntentDatum { +// withdrawer: mock_user_account_2, +// shares_to_redeem: shares_amount_c, +// } + +// // ========== Non-intent inputs ========== + +// const input_x = +// Input { +// output_reference: mock_utxo_ref(99, 0), +// output: mock_output( +// mock_pub_key_address(999, None), +// from_lovelace(1000000), +// NoDatum, +// None, +// ), +// } + +// const input_y = +// Input { +// output_reference: mock_utxo_ref(99, 1), +// output: mock_output( +// mock_pub_key_address(999, None), +// from_lovelace(1000000), +// NoDatum, +// None, +// ), +// } + +// // ========== Intent inputs ========== + +// pub const intent_input_a = +// Input { +// output_reference: mock_utxo_ref(0, 0), +// output: mock_output( +// from_script(mock_l1_withdrawal_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(withdrawal_intent_datum_a), +// None, +// ), +// } + +// pub const intent_input_b = +// Input { +// output_reference: mock_utxo_ref(1, 0), +// output: mock_output( +// from_script(mock_l1_withdrawal_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(withdrawal_intent_datum_b), +// None, +// ), +// } + +// pub const intent_input_c = +// Input { +// output_reference: mock_utxo_ref(2, 0), +// output: mock_output( +// from_script(mock_l1_withdrawal_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(withdrawal_intent_datum_c), +// None, +// ), +// } + +// // ========== Input lists ========== + +// const inputs = +// [input_x, intent_input_a, intent_input_b, input_y, intent_input_c] + +// const insufficient_inputs = [input_x, intent_input_a, intent_input_b, input_y] + +// // ========== Indices ========== + +// const indices = [1, 0, 2] + +// const excessive_indices = [0, 1, 2, 3] + +// // ========== Helper functions to calculate expected values ========== + +// fn user_receives_a() -> Int { +// let gross = +// convert_shares_to_usd(shares_amount_a, mock_total_shares, mock_vault_equity) +// // Cost basis would come from MPF - placeholder using 50% of gross +// let cost_basis = gross / 2 +// let fee = +// cal_per_user_operator_fee( +// gross, +// cost_basis, // mock_operator_fee_rate_bp, -// prices, -// mock_l2_withdrawal_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root // ) -// -// (total_shares_amount == expected_total_shares)? && -// (total_user_receives == expected_total_user_receives)? +// gross - fee // } -// test l2_process_batch_mismatched_transfer_amounts() fail { -// // Transfer amounts don't match calculated user_receives -// let (_, _, _, _, _) = -// process_batched_l2_withdrawal_intent_validation( -// l2_inputs, -// l2_indices, -// mpf_actions, // TODO: provide merkle proof actions -// l2_incorrect_transfer_amounts(), // Wrong order causes mismatch -// mock_vault_equity, -// mock_total_shares, +// fn user_receives_b() -> Int { +// let gross = +// convert_shares_to_usd(shares_amount_b, mock_total_shares, mock_vault_equity) +// let cost_basis = gross / 2 +// let fee = +// cal_per_user_operator_fee( +// gross, +// cost_basis, // mock_operator_fee_rate_bp, -// prices, -// mock_l2_withdrawal_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root // ) -// True +// gross - fee // } -// test l2_process_batch_extra_transfer_amounts() fail { -// // More transfer amounts than withdrawal intents -// let extra_transfers = -// [l2_transfer_amount_a(), l2_transfer_amount_b(), l2_transfer_amount_c(), l2_transfer_amount_a()] -// let (_, _, _, _, _) = -// process_batched_l2_withdrawal_intent_validation( -// l2_inputs, -// l2_indices, -// mpf_actions, // TODO: provide merkle proof actions -// extra_transfers, -// mock_vault_equity, -// mock_total_shares, +// fn user_receives_c() -> Int { +// let gross = +// convert_shares_to_usd(shares_amount_c, mock_total_shares, mock_vault_equity) +// let cost_basis = gross / 2 +// let fee = +// cal_per_user_operator_fee( +// gross, +// cost_basis, // mock_operator_fee_rate_bp, -// prices, -// mock_l2_withdrawal_intent_script_hash, -// initial_merkle_root, // TODO: provide initial root // ) -// True +// gross - fee // } + +// // ========== User outputs (in USDM, price=1, scale=1) ========== + +// pub fn intent_output_a() { +// mock_output( +// user_address_0(), +// from_asset(usdm_policy, usdm_name, user_receives_a()), +// NoDatum, +// None, +// ) +// } + +// pub fn intent_output_b() { +// mock_output( +// user_address_1(), +// from_asset(usdm_policy, usdm_name, user_receives_b()), +// NoDatum, +// None, +// ) +// } + +// pub fn intent_output_c() { +// mock_output( +// user_address_2(), +// from_asset(usdm_policy, usdm_name, user_receives_c()), +// NoDatum, +// None, +// ) +// } + +// // indices = [1, 0, 2] → intent_a→output[1], intent_b→output[0], intent_c→output[2] +// fn outputs() { +// [intent_output_b(), intent_output_a(), intent_output_c()] +// } + +// fn incorrect_outputs() { +// [intent_output_a(), intent_output_b(), intent_output_c()] +// } + +// // ========== L2 Intent inputs (using L2 script hash) ========== +// // In L2, indices are only used for COUNTING (values ignored). +// // Transfer amounts are matched in order with intent UTxOs. + +// const l2_withdrawal_intent_datum_a: Data = +// WithdrawalIntentDatum { +// withdrawer: mock_user_account_0, +// shares_to_redeem: shares_amount_a, +// } + +// const l2_withdrawal_intent_datum_b: Data = +// WithdrawalIntentDatum { +// withdrawer: mock_user_account_1, +// shares_to_redeem: shares_amount_b, +// } + +// const l2_withdrawal_intent_datum_c: Data = +// WithdrawalIntentDatum { +// withdrawer: mock_user_account_2, +// shares_to_redeem: shares_amount_c, +// } + +// pub const l2_intent_input_a = +// Input { +// output_reference: mock_utxo_ref(10, 0), +// output: mock_output( +// from_script(mock_l2_withdrawal_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(l2_withdrawal_intent_datum_a), +// None, +// ), +// } + +// pub const l2_intent_input_b = +// Input { +// output_reference: mock_utxo_ref(11, 0), +// output: mock_output( +// from_script(mock_l2_withdrawal_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(l2_withdrawal_intent_datum_b), +// None, +// ), +// } + +// pub const l2_intent_input_c = +// Input { +// output_reference: mock_utxo_ref(12, 0), +// output: mock_output( +// from_script(mock_l2_withdrawal_intent_script_hash), +// from_lovelace(2000000), +// InlineDatum(l2_withdrawal_intent_datum_c), +// None, +// ), +// } + +// // L2 input list +// const l2_inputs = +// [input_x, l2_intent_input_a, l2_intent_input_b, input_y, l2_intent_input_c] + +// // L2 indices — only used for counting, actual values ignored +// // We have 3 intents, so 3 indices (values don't matter for L2) +// const l2_indices = [0, 0, 0] + +// // L2 transfer amounts as MValue (in USDM, price=1/scale=1 means USD value = amount) +// // These must match user_receives_a, user_receives_b, user_receives_c in order +// fn l2_transfer_amount_a() -> MValue { +// [Pair(usdm_policy, [Pair(usdm_name, user_receives_a())])] +// } + +// fn l2_transfer_amount_b() -> MValue { +// [Pair(usdm_policy, [Pair(usdm_name, user_receives_b())])] +// } + +// fn l2_transfer_amount_c() -> MValue { +// [Pair(usdm_policy, [Pair(usdm_name, user_receives_c())])] +// } + +// // Transfer amounts in order matching intent processing order +// // Intents are processed: a, b, c (in input list order, skipping non-intent) +// fn l2_transfer_amounts() -> List { +// [l2_transfer_amount_a(), l2_transfer_amount_b(), l2_transfer_amount_c()] +// } + +// // Incorrect transfer amounts (wrong order) +// fn l2_incorrect_transfer_amounts() -> List { +// [l2_transfer_amount_b(), l2_transfer_amount_a(), l2_transfer_amount_c()] +// } + +// // ========== Expected totals ========== + +// const expected_total_shares = +// shares_amount_a + shares_amount_b + shares_amount_c + +// const expected_total_user_receives = +// user_receives_a() + user_receives_b() + user_receives_c() +// // ========== Tests ========== +// // TODO: Add merkle proofs and complete tests once merkle data is prepared + +// // test process_batch_normal() { +// // let ( +// // total_shares_amount, +// // total_user_receives, +// // total_fee_shares, +// // total_cost_removed, +// // final_merkle_root, +// // ) = +// // process_batched_withdrawal_intent_validation( +// // inputs, +// // outputs, +// // indices, +// // mpf_actions, // TODO: provide merkle proof actions +// // mock_vault_equity, +// // mock_total_shares, +// // mock_operator_fee_rate_bp, +// // prices, +// // mock_l1_withdrawal_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // +// // (total_shares_amount == expected_total_shares)? && +// // (total_user_receives == expected_total_user_receives)? +// // } + +// // test process_batch_insufficient_inputs() fail { +// // // TODO: Add merkle data +// // } + +// // test process_batch_excessive_indices() fail { +// // // TODO: Add merkle data +// // } + +// // test process_batch_incorrect_outputs() fail { +// // // TODO: Add merkle data +// // } + +// // ========== L2 Tests ========== +// // L2 uses TransferIntent mechanism instead of direct outputs. +// // indices are only for counting (values ignored), transfer_amounts matched in order. +// // TODO: Add merkle proofs and complete tests once merkle data is prepared + +// // test l2_process_batch_normal() { +// // let ( +// // total_shares_amount, +// // total_user_receives, +// // total_fee_shares, +// // total_cost_removed, +// // final_merkle_root, +// // ) = +// // process_batched_l2_withdrawal_intent_validation( +// // l2_inputs, +// // l2_indices, // Only used for counting, values ignored +// // mpf_actions, // TODO: provide merkle proof actions +// // l2_transfer_amounts(), +// // mock_vault_equity, +// // mock_total_shares, +// // mock_operator_fee_rate_bp, +// // prices, +// // mock_l2_withdrawal_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // +// // (total_shares_amount == expected_total_shares)? && +// // (total_user_receives == expected_total_user_receives)? +// // } + +// // test l2_process_batch_mismatched_transfer_amounts() fail { +// // // Transfer amounts don't match calculated user_receives +// // let (_, _, _, _, _) = +// // process_batched_l2_withdrawal_intent_validation( +// // l2_inputs, +// // l2_indices, +// // mpf_actions, // TODO: provide merkle proof actions +// // l2_incorrect_transfer_amounts(), // Wrong order causes mismatch +// // mock_vault_equity, +// // mock_total_shares, +// // mock_operator_fee_rate_bp, +// // prices, +// // mock_l2_withdrawal_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // True +// // } + +// // test l2_process_batch_extra_transfer_amounts() fail { +// // // More transfer amounts than withdrawal intents +// // let extra_transfers = +// // [l2_transfer_amount_a(), l2_transfer_amount_b(), l2_transfer_amount_c(), l2_transfer_amount_a()] +// // let (_, _, _, _, _) = +// // process_batched_l2_withdrawal_intent_validation( +// // l2_inputs, +// // l2_indices, +// // mpf_actions, // TODO: provide merkle proof actions +// // extra_transfers, +// // mock_vault_equity, +// // mock_total_shares, +// // mock_operator_fee_rate_bp, +// // prices, +// // mock_l2_withdrawal_intent_script_hash, +// // initial_merkle_root, // TODO: provide initial root +// // ) +// // True +// // } diff --git a/validators/vault/spend_withdrawal.ak b/validators/vault/spend_withdrawal.ak index af2851a..f844413 100644 --- a/validators/vault/spend_withdrawal.ak +++ b/validators/vault/spend_withdrawal.ak @@ -4,12 +4,13 @@ use cardano/transaction.{Mint, OutputReference, Transaction} use cocktail.{key_signed} use hydra_dex/types.{AppOracleDatum, UserTradeAccount} as dd_types use types.{ - DepositIntoDeltaDeFi, ProcessWithdrawal, StakeRotation, VaultOracleDatum, - VaultPluggableLogic, VaultSpendRedeemer, + DepositIntoDeltaDeFi, ProcessWithdrawal, StakeRotation, VaultConfig, + VaultOracleDatum, VaultPluggableLogic, VaultSpendRedeemer, } use utils.{ check_any_policy_minted, check_mint_redeemer_is_burn_intent_l1, - get_app_oracle_datum, get_vault_oracle_datum, withdrawal_script_validated, + get_app_oracle_datum, get_vault_config, get_vault_oracle_datum, + withdrawal_script_validated, } validator vault(vault_oracle: PolicyId) { @@ -41,10 +42,10 @@ validator vault(vault_oracle: PolicyId) { check_mint_redeemer_is_burn_intent_l1(mint_purpose, redeemers)? } DepositIntoDeltaDeFi -> { - let vault_oracle_datum: VaultOracleDatum = - get_vault_oracle_datum(reference_inputs, vault_oracle) + let vault_config: VaultConfig = + get_vault_config(reference_inputs, vault_oracle) - let VaultOracleDatum { app_oracle, .. } = vault_oracle_datum + let VaultConfig { app_oracle, vault_script_hash, .. } = vault_config // Obtain DeltaDeFi's AppOracleDatum let app_oracle_datum: AppOracleDatum = get_app_oracle_datum(reference_inputs, app_oracle) @@ -52,7 +53,7 @@ validator vault(vault_oracle: PolicyId) { check_any_policy_minted( mint, app_oracle_datum.app_deposit_request_token, - )? + ) && withdrawal_script_validated(withdrawals, vault_script_hash)? } StakeRotation -> { // Withdrawal Script vault_stake_rotation is validated @@ -68,10 +69,10 @@ validator vault(vault_oracle: PolicyId) { } VaultPluggableLogic -> { // Withdrawal Script pluggable_logic is validated - let vault_oracle_datum: VaultOracleDatum = - get_vault_oracle_datum(reference_inputs, vault_oracle) + let vault_config: VaultConfig = + get_vault_config(reference_inputs, vault_oracle) - let VaultOracleDatum { pluggable_logic, .. } = vault_oracle_datum + let VaultConfig { pluggable_logic, .. } = vault_config withdrawal_script_validated(withdrawals, pluggable_logic) } } @@ -81,10 +82,10 @@ validator vault(vault_oracle: PolicyId) { let Transaction { reference_inputs, extra_signatories, .. } = self // Get vault oracle datum from inputs - let vault_oracle_datum: VaultOracleDatum = - get_vault_oracle_datum(reference_inputs, vault_oracle) + let vault_config: VaultConfig = + get_vault_config(reference_inputs, vault_oracle) - let VaultOracleDatum { operator_account, .. } = vault_oracle_datum + let VaultConfig { operator_account, .. } = vault_config // Extract operator PKH from UserTradeAccount expect UserTradeAccount { account: operator_acc, .. } = operator_account diff --git a/validators/vault_oracle/spend_mint.ak b/validators/vault_oracle/spend_mint.ak index d43c866..00306f1 100644 --- a/validators/vault_oracle/spend_mint.ak +++ b/validators/vault_oracle/spend_mint.ak @@ -1,137 +1,86 @@ -use aiken/cbor use aiken/collection/list use aiken/merkle_patricia_forestry as mpf use cardano/address.{Script, VerificationKey, from_script} -use cardano/assets.{PolicyId, from_asset_list} +use cardano/assets.{PolicyId, flatten} use cardano/transaction.{ - InlineDatum, Mint, Output, OutputReference, Transaction, find_input, + InlineDatum, Input, Mint, Output, OutputReference, Transaction, find_input, } use cocktail.{ - get_all_value_to_script, input_inline_datum, inputs_at_with_policy, - inputs_with_policy, only_minted_token, output_inline_datum, - outputs_at_with_policy, value_geq, + group_inputs_2, group_outputs_2, input_inline_datum, inputs_with_policy, + only_minted_token, output_inline_datum, outputs_at_with_policy, } use hydra_dex/types.{AppOracleDatum, HydraInfo, UserTradeAccount} as dd_types -use price_oracle_utils.{convert_m_value_to_usd, verify_prices_oracle_messages} use types.{ - CloseVault, HydraCommit, HydraDecommit, L1InitialDeposit, MintVault, - PluggableLogic, ProcessL1Deposit, ProcessL1Withdrawal, ProcessL2Deposit, - ProcessL2Withdrawal, SharesRecordEntry, UpdateConfig, VaultOracleDatum, - VaultOracleMintRedeemer, VaultOracleSpendRedeemer, + BurnVault, CloseVault, HydraCommit, HydraDecommit, MintVault, ProcessL1Deposit, + ProcessL1Withdrawal, ProcessL2Deposit, ProcessL2Withdrawal, UpdateConfig, + VaultConfig, VaultOracleDatum, VaultOracleMintRedeemer, + VaultOracleSpendRedeemer, } use utils.{ check_mint_redeemer_is_burn_intent_l1, check_mint_redeemer_is_burn_intent_l2, validate_hydra_signatures_with_verification_key, verify_pub_keys, - withdrawal_script_validated, } validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { spend( - datum: Option, + datum: Option, redeemer: VaultOracleSpendRedeemer, input: OutputReference, self: Transaction, ) { - expect Some(vault_oracle_datum) = datum - let VaultOracleDatum { - l1_deposit_intent_script_hash, - l1_withdrawal_intent_script_hash, - l2_deposit_intent_script_hash, - l2_withdrawal_intent_script_hash, - hydra_node_pub_keys, - pluggable_logic, - vault_script_hash, + let ( + vault_config_datum, + is_config, total_shares, operator_shares, total_deposited, shares_merkle_root, total_fee_share_collected, - .. - } = vault_oracle_datum - let Transaction { - inputs, - outputs, - redeemers, - extra_signatories, - withdrawals, - .. - } = self - - when redeemer is { - L1InitialDeposit { - depositor, - initial_deposit, - prices_message, - signatures, - initial_shares_proof, - } -> { - // Precondition: vault is empty/new - expect total_shares == 0 - - // Verify prices message - let (_, prices, is_prices_verified) = - verify_prices_oracle_messages( - prices_message, - inputs, - hydra_node_pub_keys, - signatures, - ) - - // Compute total_deposited from initial_deposit and prices - let computed_total_deposited = - convert_m_value_to_usd(initial_deposit, prices) - - // Genesis rule: initial_shares = total_deposited (share price = 1.0) - let initial_shares = computed_total_deposited - - // Compute initial merkle root via MPF insert - let mpf_key = cbor.serialise(depositor) - let initial_entry = - SharesRecordEntry { - shares: initial_shares, - total_deposited: computed_total_deposited, - } - let mpf_value = cbor.serialise(initial_entry) - let computed_root = - mpf.root( - mpf.insert(mpf.empty, mpf_key, mpf_value, initial_shares_proof), - ) - - // Get oracle output - expect Some(own_input) = find_input(inputs, input) - expect Script(own_hash) = own_input.output.address.payment_credential - expect [oracle_output] = - outputs_at_with_policy(outputs, from_script(own_hash), own_hash) - expect oracle_output_datum: VaultOracleDatum = - output_inline_datum(oracle_output) - - // Validate output datum state fields - let is_datum_correct = and { - oracle_output_datum.total_shares == initial_shares, - oracle_output_datum.operator_shares == 0, - oracle_output_datum.total_deposited == computed_total_deposited, - oracle_output_datum.shares_merkle_root == computed_root, - oracle_output_datum.total_fee_share_collected == 0, + ) = + when datum is { + Some(d) -> + if d is VaultOracleDatum { + ( + VaultConfig { + app_oracle: d.app_oracle, + vault_script_hash: d.vault_script_hash, + l1_deposit_intent_script_hash: d.l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash: d.l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash: d.l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash: d.l2_withdrawal_intent_script_hash, + pluggable_logic: d.pluggable_logic, + operator_account: d.operator_account, + hydra_node_pub_keys: d.hydra_node_pub_keys, + }, + False, + d.total_shares, + d.operator_shares, + d.total_deposited, + d.shares_merkle_root, + d.total_fee_share_collected, + ) + } else if d is VaultConfig { + (d, True, 0, 0, 0, "", 0) + } else { + fail @"Invalid datum type for vault oracle input" } - - // Initial deposit sent to vault_script_hash - let is_deposit_in_vault = - value_geq( - get_all_value_to_script(outputs, vault_script_hash), - from_asset_list(initial_deposit), - ) - - // Anyone can do initial deposit (no signature required) - and { - (initial_shares > 0)?, - is_prices_verified?, - is_datum_correct?, - is_deposit_in_vault?, - } + _ -> fail @"Vault Oracle datum must be present" } - // L2InitialDeposit is handled by HydraAccount validator (ProcessVaultDeposit with total_shares == 0) - // See deltadefi-scripts/validators/hydra_account/vault_deposit.ak + let VaultConfig { + l1_deposit_intent_script_hash, + l1_withdrawal_intent_script_hash, + l2_deposit_intent_script_hash, + l2_withdrawal_intent_script_hash, + hydra_node_pub_keys, + .. + } = vault_config_datum + let Transaction { inputs, outputs, redeemers, extra_signatories, mint, .. } = + self + + expect Some(own_input) = find_input(inputs, input) + expect Script(own_hash) = own_input.output.address.payment_credential + when redeemer is { ProcessL1Deposit -> { let mint_purpose = Mint(l1_deposit_intent_script_hash) check_mint_redeemer_is_burn_intent_l1(mint_purpose, redeemers)? @@ -157,7 +106,6 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { all_hydra_signed? } HydraDecommit -> { - expect Some(own_input) = find_input(inputs, input) let is_input_equal_output = list.any(outputs, fn(output: Output) { output == own_input.output }) @@ -168,8 +116,6 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { ) all_hydra_signed? && is_input_equal_output? } - PluggableLogic -> - withdrawal_script_validated(withdrawals, pluggable_logic) UpdateConfig -> { // Require all hydra_node_pub_keys signatures let all_hydra_signed = @@ -179,27 +125,41 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { ) // Get oracle output - expect Some(own_input) = find_input(inputs, input) - expect Script(own_hash) = own_input.output.address.payment_credential expect [oracle_output] = outputs_at_with_policy(outputs, from_script(own_hash), own_hash) - expect oracle_output_datum: VaultOracleDatum = - output_inline_datum(oracle_output) + let oracle_output_datum = output_inline_datum(oracle_output) - // State fields must remain unchanged - let is_state_unchanged = and { - oracle_output_datum.total_shares == total_shares, - oracle_output_datum.operator_shares == operator_shares, - oracle_output_datum.total_deposited == total_deposited, - oracle_output_datum.shares_merkle_root == shares_merkle_root, - oracle_output_datum.total_fee_share_collected == total_fee_share_collected, + let datum_check = + if oracle_output_datum is VaultOracleDatum { + and { + oracle_output_datum.total_shares == total_shares, + oracle_output_datum.operator_shares == operator_shares, + oracle_output_datum.total_deposited == total_deposited, + oracle_output_datum.shares_merkle_root == shares_merkle_root, + oracle_output_datum.total_fee_share_collected == total_fee_share_collected, + oracle_output_datum.operator_fee_rate_bp >= 0, + oracle_output_datum.operator_fee_rate_bp <= 10000, + !is_config, + } + } else if oracle_output_datum is VaultConfig { + is_config + } else { + fail @"Invalid datum type for vault oracle input" } // Validate operator_fee_rate_bp - let is_charge_valid = - oracle_output_datum.operator_fee_rate_bp >= 0 && oracle_output_datum.operator_fee_rate_bp <= 100 - - all_hydra_signed? && is_state_unchanged? && is_charge_valid? + all_hydra_signed? && datum_check? + } + BurnVault -> { + let are_oracles_burnt = + when + flatten(mint) + |> list.filter(fn(asset) { asset.1st == own_hash }) + is { + [(_, _, minted_quantity)] -> minted_quantity == -2 + _ -> False + } + are_oracles_burnt? } } } @@ -218,6 +178,11 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { .. } = self + // Get app_oracle reference input + expect [app_oracle_ref] = inputs_with_policy(reference_inputs, app_oracle) + expect InlineDatum(app_oracle_data) = app_oracle_ref.output.datum + expect app_oracle_datum: AppOracleDatum = app_oracle_data + let AppOracleDatum { hydra_info, operation_key, .. } = app_oracle_datum when redeemer is { MintVault -> { // One-shot: verify initial_utxo is consumed (guarantees unique policy_id) @@ -225,22 +190,46 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { list.any(inputs, fn(input) { input.output_reference == initial_utxo }) // Exactly 1 NFT minted - let is_mint_correct = only_minted_token(mint, policy_id, "", 1) + let is_mint_correct = only_minted_token(mint, policy_id, "", 2) // Oracle NFT minted to own script address with initial datum - expect [vault_oracle_output] = - outputs_at_with_policy(outputs, from_script(policy_id), policy_id) + let (vault_config_outputs, vault_oracle_outputs, _) = + group_outputs_2( + outputs, + fn(output: Output) { + if output.address == from_script(policy_id) { + let datum = output_inline_datum(output) + if datum is VaultConfig { + True + } else { + False + } + } else { + False + } + }, + fn(output: Output) { + if output.address == from_script(policy_id) { + let datum = output_inline_datum(output) + if datum is VaultOracleDatum { + True + } else { + False + } + } else { + False + } + }, + ) + + expect [vault_oracle_output] = vault_oracle_outputs expect vault_oracle_datum: VaultOracleDatum = output_inline_datum(vault_oracle_output) - // Get app_oracle reference input - expect [app_oracle_ref] = - inputs_with_policy(reference_inputs, app_oracle) - expect InlineDatum(app_oracle_data) = app_oracle_ref.output.datum - expect app_oracle_datum: AppOracleDatum = app_oracle_data - let AppOracleDatum { hydra_info, .. } = app_oracle_datum + expect [vault_config_output] = vault_config_outputs + expect vault_config_datum: VaultConfig = + output_inline_datum(vault_config_output) let HydraInfo { hydra_signers } = hydra_info - // Verify hydra_node_pub_keys match app_oracle signers let are_keys_valid = verify_pub_keys(vault_oracle_datum.hydra_node_pub_keys, hydra_signers) @@ -257,14 +246,54 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { vault_oracle_datum.operator_fee_rate_bp <= 10000, } + let is_config_matching = and { + vault_oracle_datum.app_oracle == vault_config_datum.app_oracle, + vault_oracle_datum.vault_script_hash == vault_config_datum.vault_script_hash, + vault_oracle_datum.l1_deposit_intent_script_hash == vault_config_datum.l1_deposit_intent_script_hash, + vault_oracle_datum.l1_withdrawal_intent_script_hash == vault_config_datum.l1_withdrawal_intent_script_hash, + vault_oracle_datum.l2_deposit_intent_script_hash == vault_config_datum.l2_deposit_intent_script_hash, + vault_oracle_datum.l2_withdrawal_intent_script_hash == vault_config_datum.l2_withdrawal_intent_script_hash, + vault_oracle_datum.pluggable_logic == vault_config_datum.pluggable_logic, + vault_oracle_datum.operator_account == vault_config_datum.operator_account, + vault_oracle_datum.hydra_node_pub_keys == vault_config_datum.hydra_node_pub_keys, + } // No signatures required (anyone can create a vault) - is_utxo_consumed? && is_mint_correct? && is_initial_state_correct? && are_keys_valid? + is_utxo_consumed? && is_mint_correct? && is_initial_state_correct? && are_keys_valid? && is_config_matching? } CloseVault -> { // Get oracle input - expect [vault_oracle_input] = - inputs_at_with_policy(inputs, from_script(policy_id), policy_id) + + let (vault_config_inputs, vault_oracle_inputs, _) = + group_inputs_2( + inputs, + fn(input: Input) { + if input.output.address == from_script(policy_id) { + let datum = input_inline_datum(input) + if datum is VaultConfig { + True + } else { + False + } + } else { + False + } + }, + fn(input: Input) { + if input.output.address == from_script(policy_id) { + let datum = input_inline_datum(input) + if datum is VaultOracleDatum { + True + } else { + False + } + } else { + False + } + }, + ) + + expect [vault_oracle_input] = vault_oracle_inputs expect vault_oracle_datum: VaultOracleDatum = input_inline_datum(vault_oracle_input) let VaultOracleDatum { @@ -274,21 +303,16 @@ validator vault_oracle(initial_utxo: OutputReference, app_oracle: PolicyId) { .. } = vault_oracle_datum + expect [_] = vault_config_inputs + // Extract operator account from UserTradeAccount expect UserTradeAccount { account: close_operator_acc, .. } = close_operator_account expect VerificationKey(close_operator_pkh) = close_operator_acc.master_key - // Get app_oracle reference input - expect [app_oracle_ref] = - inputs_with_policy(reference_inputs, app_oracle) - expect InlineDatum(app_oracle_data) = app_oracle_ref.output.datum - expect app_oracle_datum: AppOracleDatum = app_oracle_data - let AppOracleDatum { operation_key, .. } = app_oracle_datum - // Burn oracle NFT - let is_burn_correct = only_minted_token(mint, policy_id, "", -1) + let is_burn_correct = only_minted_token(mint, policy_id, "", -2) // Verify conditions let is_total_shares_zero = total_shares == 0