From d6690dd8c7e5226c89fc37bb0248f6be6fe8df25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 00:02:54 +0000 Subject: [PATCH 1/6] chore(deps): bump golang.org/x/net from 0.23.0 to 0.33.0 (#2175) * chore(deps): bump golang.org/x/net from 0.23.0 to 0.33.0 Bumps [golang.org/x/net](https://github.com/golang/net) from 0.23.0 to 0.33.0. - [Commits](https://github.com/golang/net/compare/v0.23.0...v0.33.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Updated changelog - dependabot --------- Signed-off-by: dependabot[bot] Co-authored-by: Unique-Divine <51418232+Unique-Divine@users.noreply.github.com> --- CHANGELOG.md | 2 +- go.mod | 2 +- go.sum | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1943730db..d978e01ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -293,7 +293,7 @@ preparation for a second audit starting in November 2024. - Bump `actions/setup-go` from 4 to 5 ([#1696](https://github.com/NibiruChain/nibiru/pull/1696)) - Bump `golang` from 1.19 to 1.21 ([#1698](https://github.com/NibiruChain/nibiru/pull/1698)) - [#1678](https://github.com/NibiruChain/nibiru/pull/1678) - chore(deps): collections to v0.4.0 for math.Int value encoder -- Bump `golang.org/x/net` from 0.0.0-20220607020251-c690dde0001d to 0.23.0 in /geth ([#1849](https://github.com/NibiruChain/nibiru/pull/1849)) +- Bump `golang.org/x/net` from 0.0.0-20220607020251-c690dde0001d to 0.33.0 ([#1849](https://github.com/NibiruChain/nibiru/pull/1849), [#2175](https://github.com/NibiruChain/nibiru/pull/2175)) - Bump `golang.org/x/net` from 0.20.0 to 0.23.0 ([#1850](https://github.com/NibiruChain/nibiru/pull/1850)) - Bump `github.com/supranational/blst` from 0.3.8-0.20220526154634-513d2456b344 to 0.3.11 ([#1851](https://github.com/NibiruChain/nibiru/pull/1851)) - Bump `golangci/golangci-lint-action` from 4 to 6 ([#1854](https://github.com/NibiruChain/nibiru/pull/1854), [#1867](https://github.com/NibiruChain/nibiru/pull/1867)) diff --git a/go.mod b/go.mod index 2c28cf847..3dc5c3b51 100644 --- a/go.mod +++ b/go.mod @@ -65,7 +65,7 @@ require ( github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 golang.org/x/crypto v0.31.0 golang.org/x/exp v0.0.0-20231006140011-7918f672742d - golang.org/x/net v0.23.0 + golang.org/x/net v0.33.0 golang.org/x/text v0.21.0 ) diff --git a/go.sum b/go.sum index 679fbc671..71154baa5 100644 --- a/go.sum +++ b/go.sum @@ -1448,8 +1448,9 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= From 16cecd27dcdc3df9c018e500f33e3e5644a5fd4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 04:49:48 +0000 Subject: [PATCH 2/6] chore(deps): bump undici from 5.28.4 to 5.28.5 in /x/evm/embeds (#2174) * chore(deps): bump undici from 5.28.4 to 5.28.5 in /x/evm/embeds Bumps [undici](https://github.com/nodejs/undici) from 5.28.4 to 5.28.5. - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v5.28.4...v5.28.5) --- updated-dependencies: - dependency-name: undici dependency-type: indirect ... Signed-off-by: dependabot[bot] * Updated changelog - dependabot --------- Signed-off-by: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> --- CHANGELOG.md | 1 + x/evm/embeds/package-lock.json | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d978e01ae..41cb0ade1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -305,6 +305,7 @@ preparation for a second audit starting in November 2024. - Bump `github.com/CosmWasm/wasmvm` from 1.5.0 to 1.5.5 ([#2047](https://github.com/NibiruChain/nibiru/pull/2047)) - Bump `docker/build-push-action` from 5 to 6 ([#1924](https://github.com/NibiruChain/nibiru/pull/1924)) - Bump `codecov/codecov-action` from 4 to 5 ([#2112](https://github.com/NibiruChain/nibiru/pull/2112)) +- Bump `undici` from 5.28.4 to 5.28.5 ([#2174](https://github.com/NibiruChain/nibiru/pull/2174)) ## [v1.5.0](https://github.com/NibiruChain/nibiru/releases/tag/v1.5.0) - 2024-06-21 diff --git a/x/evm/embeds/package-lock.json b/x/evm/embeds/package-lock.json index 99bb2520b..eef9850fe 100644 --- a/x/evm/embeds/package-lock.json +++ b/x/evm/embeds/package-lock.json @@ -7453,9 +7453,9 @@ } }, "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "version": "5.28.5", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", + "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", "dev": true, "license": "MIT", "dependencies": { From 3c2bcc5fb56c7f63c0a1243ec84627432ae4c957 Mon Sep 17 00:00:00 2001 From: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> Date: Fri, 24 Jan 2025 15:48:06 -0600 Subject: [PATCH 3/6] fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go (#2177) * fix(evm-bank-extension): Use safer gas meter for BaseOp in ForceGasInvariant * chore: changelog * fix: preserve the kv gas config in case it's non-default * revert: new PR * fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go --- CHANGELOG.md | 1 + cmd/nibid/cmd/genaccounts.go | 51 +++------------------------ eth/rpc/backend/backend_suite_test.go | 2 +- x/evm/keeper/msg_server.go | 10 +++++- 4 files changed, 16 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41cb0ade1..aec8bba4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -86,6 +86,7 @@ needed to include double quotes around the hexadecimal string. - [#2170](https://github.com/NibiruChain/nibiru/pull/2170) - chore: Remove redundant allowUnprotectedTxs - [#2172](https://github.com/NibiruChain/nibiru/pull/2172) - chore: close iterator in IterateEpochInfo - [#2173](https://github.com/NibiruChain/nibiru/pull/2173) - fix(evm): clear `StateDB` between calls +- [#2177](https://github.com/NibiruChain/nibiru/pull/2177) - fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go #### Nibiru EVM | Before Audit 2 - 2024-12-06 diff --git a/cmd/nibid/cmd/genaccounts.go b/cmd/nibid/cmd/genaccounts.go index 6b79b1d87..53fca441e 100644 --- a/cmd/nibid/cmd/genaccounts.go +++ b/cmd/nibid/cmd/genaccounts.go @@ -3,9 +3,9 @@ package cmd import ( "bufio" "encoding/json" - "errors" "fmt" + "github.com/MakeNowJust/heredoc/v2" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" @@ -14,28 +14,21 @@ import ( "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - authvesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" ) -const ( - flagVestingStart = "vesting-start-time" - flagVestingEnd = "vesting-end-time" - flagVestingAmt = "vesting-amount" -) - // AddGenesisAccountCmd returns add-genesis-account cobra Command. func AddGenesisAccountCmd(defaultNodeHome string) *cobra.Command { cmd := &cobra.Command{ Use: "add-genesis-account [address_or_key_name] [coin][,[coin]]", Short: "Add a genesis account to genesis.json", - Long: `Add a genesis account to genesis.json. The provided account must specify + Long: heredoc.Doc(`Add a genesis account to genesis.json. The provided account must specify the account address or key name and a list of initial coins. If a key name is given, the address will be looked up in the local Keybase. The list of initial tokens must -contain valid denominations. Accounts may optionally be supplied with vesting parameters. -`, +contain valid denominations. +`), Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { clientCtx := client.GetClientContextFromCmd(cmd) @@ -74,42 +67,11 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa return fmt.Errorf("failed to parse coins: %w", err) } - vestingStart, _ := cmd.Flags().GetInt64(flagVestingStart) - vestingEnd, _ := cmd.Flags().GetInt64(flagVestingEnd) - vestingAmtStr, _ := cmd.Flags().GetString(flagVestingAmt) - - vestingAmt, err := sdk.ParseCoinsNormalized(vestingAmtStr) - if err != nil { - return fmt.Errorf("failed to parse vesting amount: %w", err) - } - // create concrete account type based on input parameters var genAccount authtypes.GenesisAccount balances := banktypes.Balance{Address: addr.String(), Coins: coins.Sort()} - baseAccount := authtypes.NewBaseAccount(addr, nil, 0, 0) - - if !vestingAmt.IsZero() { - baseVestingAccount := authvesting.NewBaseVestingAccount(baseAccount, vestingAmt.Sort(), vestingEnd) - - if (balances.Coins.IsZero() && !baseVestingAccount.OriginalVesting.IsZero()) || - baseVestingAccount.OriginalVesting.IsAnyGT(balances.Coins) { - return errors.New("vesting amount cannot be greater than total amount") - } - - switch { - case vestingStart != 0 && vestingEnd != 0: - genAccount = authvesting.NewContinuousVestingAccountRaw(baseVestingAccount, vestingStart) - - case vestingEnd != 0: - genAccount = authvesting.NewDelayedVestingAccountRaw(baseVestingAccount) - - default: - return errors.New("invalid vesting parameters; must supply start and end time or end time") - } - } else { - genAccount = baseAccount - } + genAccount = authtypes.NewBaseAccount(addr, nil, 0, 0) if err := genAccount.Validate(); err != nil { return fmt.Errorf("failed to validate new genesis account: %w", err) @@ -174,9 +136,6 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa cmd.Flags().String(flags.FlagHome, defaultNodeHome, "The application home directory") cmd.Flags().String(flags.FlagKeyringBackend, flags.DefaultKeyringBackend, "Select keyring's backend (os|file|kwallet|pass|test)") - cmd.Flags().String(flagVestingAmt, "", "amount of coins for vesting accounts") - cmd.Flags().Int64(flagVestingStart, 0, "schedule start time (unix epoch) for vesting accounts") - cmd.Flags().Int64(flagVestingEnd, 0, "schedule end time (unix epoch) for vesting accounts") flags.AddQueryFlagsToCmd(cmd) return cmd diff --git a/eth/rpc/backend/backend_suite_test.go b/eth/rpc/backend/backend_suite_test.go index 16637a86c..dec06920f 100644 --- a/eth/rpc/backend/backend_suite_test.go +++ b/eth/rpc/backend/backend_suite_test.go @@ -252,7 +252,7 @@ func (s *BackendSuite) buildContractCallTx( nonce uint64, gasLimit uint64, ) gethcore.Transaction { - //recipient := crypto.CreateAddress(s.fundedAccEthAddr, 29381) + // recipient := crypto.CreateAddress(s.fundedAccEthAddr, 29381) transferAmount := big.NewInt(100) packedArgs, err := embeds.SmartContract_TestERC20.ABI.Pack( diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index 94acd33ac..7c6e98021 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -64,7 +64,15 @@ func (k *Keeper) EthereumTx( k.Bank.StateDB = nil }() evmObj := k.NewEVM(ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB) - evmResp, err = k.ApplyEvmMsg(ctx, evmMsg, evmObj, nil /*tracer*/, true /*commit*/, txConfig.TxHash, false /*fullRefundLeftoverGas*/) + evmResp, err = k.ApplyEvmMsg( + ctx, + evmMsg, + evmObj, + nil, /*tracer*/ + true, /*commit*/ + txConfig.TxHash, + false, /*fullRefundLeftoverGas*/ + ) if err != nil { return nil, errors.Wrap(err, "error applying ethereum core message") } From bc29b88373928e5a887a133056ddead882904537 Mon Sep 17 00:00:00 2001 From: Kevin Yang <5478483+k-yang@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:08:09 -0500 Subject: [PATCH 4/6] test(evm): additional tests and refactors (#2176) * chore: cleanup funtoken test * Update funtoken_test.go * refactor: update wasm tests * Update export.go * Update debug.go * fix: TestJournalReversion * test(evm): add dirty state attack tests * Update wasm_test.go * test: add TestWasmPrecompileDirtyStateAttack4 * Update wasm_test.go * Update CHANGELOG.md * test(evm): add wasm precompile staking test * fix: total supply calc in tests * test(evm): remove dirty state attacks 1-3 due to being duplicates * refactor: variable names --- CHANGELOG.md | 1 + x/common/testutil/testapp/test_util.go | 11 +- x/common/testutil/testapp/testapp.go | 2 + .../TestDirtyStateAttack4.json | 47 +++ .../TestDirtyStateAttack5.json | 34 ++ .../contracts/TestDirtyStateAttack4.sol | 28 ++ .../contracts/TestDirtyStateAttack5.sol | 20 + x/evm/embeds/embeds.go | 18 +- x/evm/keeper/bank_extension.go | 32 ++ x/evm/keeper/funtoken_from_coin_test.go | 2 +- x/evm/precompile/funtoken_test.go | 214 ++++++----- x/evm/precompile/test/bank_transfer.wasm | Bin 0 -> 195987 bytes x/evm/precompile/test/counter.wasm | Bin 0 -> 203070 bytes x/evm/precompile/test/export.go | 210 ++++------- .../{ => test}/hello_world_counter.wasm | Bin x/evm/precompile/test/infinite_loop.wasm | Bin 0 -> 193630 bytes x/evm/precompile/test/staking.wasm | Bin 0 -> 196726 bytes x/evm/precompile/test/wasteful_gas.wasm | Bin 0 -> 195446 bytes x/evm/precompile/wasm_test.go | 346 +++++++++++++++--- x/evm/statedb/debug.go | 6 - x/evm/statedb/journal_test.go | 36 +- x/inflation/keeper/inflation_test.go | 8 +- x/inflation/keeper/keeper_test.go | 6 +- x/tokenfactory/keeper/msg_server_test.go | 4 +- 24 files changed, 693 insertions(+), 332 deletions(-) create mode 100644 x/evm/embeds/artifacts/contracts/TestDirtyStateAttack4.sol/TestDirtyStateAttack4.json create mode 100644 x/evm/embeds/artifacts/contracts/TestDirtyStateAttack5.sol/TestDirtyStateAttack5.json create mode 100644 x/evm/embeds/contracts/TestDirtyStateAttack4.sol create mode 100644 x/evm/embeds/contracts/TestDirtyStateAttack5.sol create mode 100644 x/evm/precompile/test/bank_transfer.wasm create mode 100644 x/evm/precompile/test/counter.wasm rename x/evm/precompile/{ => test}/hello_world_counter.wasm (100%) create mode 100644 x/evm/precompile/test/infinite_loop.wasm create mode 100644 x/evm/precompile/test/staking.wasm create mode 100644 x/evm/precompile/test/wasteful_gas.wasm diff --git a/CHANGELOG.md b/CHANGELOG.md index aec8bba4e..626db49c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -87,6 +87,7 @@ needed to include double quotes around the hexadecimal string. - [#2172](https://github.com/NibiruChain/nibiru/pull/2172) - chore: close iterator in IterateEpochInfo - [#2173](https://github.com/NibiruChain/nibiru/pull/2173) - fix(evm): clear `StateDB` between calls - [#2177](https://github.com/NibiruChain/nibiru/pull/2177) - fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go +- [#2176](https://github.com/NibiruChain/nibiru/pull/2176) - tests(evm): add dirty state tests from code4rena audit #### Nibiru EVM | Before Audit 2 - 2024-12-06 diff --git a/x/common/testutil/testapp/test_util.go b/x/common/testutil/testapp/test_util.go index c4eecceea..d94318da1 100644 --- a/x/common/testutil/testapp/test_util.go +++ b/x/common/testutil/testapp/test_util.go @@ -16,6 +16,7 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" nibiruapp "github.com/NibiruChain/nibiru/v2/app" + "github.com/NibiruChain/nibiru/v2/app/appconst" ) // GenesisStateWithSingleValidator initializes GenesisState with a single validator and genesis accounts @@ -41,7 +42,7 @@ func GenesisStateWithSingleValidator(codec codec.Codec, genesisState nibiruapp.G balances = append(balances, banktypes.Balance{ Address: acc.GetAddress().String(), - Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(100000000000000))), + Coins: sdk.NewCoins(sdk.NewCoin(appconst.BondDenom, math.NewIntFromUint64(1e14))), }) genesisState, err = genesisStateWithValSet(codec, genesisState, valSet, []authtypes.GenesisAccount{acc}, balances...) @@ -93,7 +94,9 @@ func genesisStateWithValSet( delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), math.LegacyOneDec())) } // set validators and delegations - stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations) + stakingParams := stakingtypes.DefaultParams() + stakingParams.BondDenom = appconst.BondDenom + stakingGenesis := stakingtypes.NewGenesisState(stakingParams, validators, delegations) genesisState[stakingtypes.ModuleName] = cdc.MustMarshalJSON(stakingGenesis) totalSupply := sdk.NewCoins() @@ -104,13 +107,13 @@ func genesisStateWithValSet( for range delegations { // add delegated tokens to total supply - totalSupply = totalSupply.Add(sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)) + totalSupply = totalSupply.Add(sdk.NewCoin(appconst.BondDenom, bondAmt)) } // add bonded amount to bonded pool module account balances = append(balances, banktypes.Balance{ Address: authtypes.NewModuleAddress(stakingtypes.BondedPoolName).String(), - Coins: sdk.Coins{sdk.NewCoin(sdk.DefaultBondDenom, bondAmt)}, + Coins: sdk.Coins{sdk.NewCoin(appconst.BondDenom, bondAmt)}, }) // update total supply diff --git a/x/common/testutil/testapp/testapp.go b/x/common/testutil/testapp/testapp.go index d8507b099..24f39951c 100644 --- a/x/common/testutil/testapp/testapp.go +++ b/x/common/testutil/testapp/testapp.go @@ -17,6 +17,7 @@ import ( "github.com/NibiruChain/nibiru/v2/app" "github.com/NibiruChain/nibiru/v2/app/appconst" + cryptocodec "github.com/NibiruChain/nibiru/v2/eth/crypto/codec" "github.com/NibiruChain/nibiru/v2/x/common/asset" "github.com/NibiruChain/nibiru/v2/x/common/denoms" "github.com/NibiruChain/nibiru/v2/x/common/testutil" @@ -126,6 +127,7 @@ func NewNibiruTestApp(gen app.GenesisState, baseAppOptions ...func(*baseapp.Base logger := log.NewNopLogger() encoding := app.MakeEncodingConfig() + cryptocodec.RegisterInterfaces(encoding.InterfaceRegistry) SetDefaultSudoGenesis(gen) app := app.NewNibiruApp( diff --git a/x/evm/embeds/artifacts/contracts/TestDirtyStateAttack4.sol/TestDirtyStateAttack4.json b/x/evm/embeds/artifacts/contracts/TestDirtyStateAttack4.sol/TestDirtyStateAttack4.json new file mode 100644 index 000000000..3907e082f --- /dev/null +++ b/x/evm/embeds/artifacts/contracts/TestDirtyStateAttack4.sol/TestDirtyStateAttack4.json @@ -0,0 +1,47 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestDirtyStateAttack4", + "sourceName": "contracts/TestDirtyStateAttack4.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "wasmAddr", + "type": "string" + }, + { + "internalType": "bytes", + "name": "msgArgs", + "type": "bytes" + } + ], + "name": "attack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60806040526000805561084a806100176000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806333c889971461003b5780638ada066e14610057575b600080fd5b610055600480360381019061005091906102d6565b610075565b005b61005f6101e4565b60405161006c9190610370565b60405180910390f35b600080815480929190610087906103ba565b91905055506000600167ffffffffffffffff8111156100a9576100a8610402565b5b6040519080825280602002602001820160405280156100e257816020015b6100cf6101ed565b8152602001906001900390816100c75790505b50905060405180604001604052806040518060400160405280600581526020017f756e6962690000000000000000000000000000000000000000000000000000008152508152602001620f42408152508160008151811061014657610145610431565b5b602002602001018190525061080273ffffffffffffffffffffffffffffffffffffffff166361ffaee486868686866040518663ffffffff1660e01b8152600401610194959493929190610689565b6000604051808303816000875af11580156101b3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906101dc91906107cb565b505050505050565b60008054905090565b604051806040016040528060608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126102405761023f61021b565b5b8235905067ffffffffffffffff81111561025d5761025c610220565b5b60208301915083600182028301111561027957610278610225565b5b9250929050565b60008083601f8401126102965761029561021b565b5b8235905067ffffffffffffffff8111156102b3576102b2610220565b5b6020830191508360018202830111156102cf576102ce610225565b5b9250929050565b600080600080604085870312156102f0576102ef610211565b5b600085013567ffffffffffffffff81111561030e5761030d610216565b5b61031a8782880161022a565b9450945050602085013567ffffffffffffffff81111561033d5761033c610216565b5b61034987828801610280565b925092505092959194509250565b6000819050919050565b61036a81610357565b82525050565b60006020820190506103856000830184610361565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006103c582610357565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103f7576103f661038b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061049d8385610460565b93506104aa838584610471565b6104b383610480565b840190509392505050565b600082825260208201905092915050565b60006104db83856104be565b93506104e8838584610471565b6104f183610480565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610562578082015181840152602081019050610547565b60008484015250505050565b600061057982610528565b6105838185610533565b9350610593818560208601610544565b61059c81610480565b840191505092915050565b6105b081610357565b82525050565b600060408301600083015184820360008601526105d3828261056e565b91505060208301516105e860208601826105a7565b508091505092915050565b60006105ff83836105b6565b905092915050565b6000602082019050919050565b600061061f826104fc565b6106298185610507565b93508360208202850161063b85610518565b8060005b85811015610677578484038952815161065885826105f3565b945061066383610607565b925060208a0199505060018101905061063f565b50829750879550505050505092915050565b600060608201905081810360008301526106a4818789610491565b905081810360208301526106b98185876104cf565b905081810360408301526106cd8184610614565b90509695505050505050565b600080fd5b6106e782610480565b810181811067ffffffffffffffff8211171561070657610705610402565b5b80604052505050565b6000610719610207565b905061072582826106de565b919050565b600067ffffffffffffffff82111561074557610744610402565b5b61074e82610480565b9050602081019050919050565b600061076e6107698461072a565b61070f565b90508281526020810184848401111561078a576107896106d9565b5b610795848285610544565b509392505050565b600082601f8301126107b2576107b161021b565b5b81516107c284826020860161075b565b91505092915050565b6000602082840312156107e1576107e0610211565b5b600082015167ffffffffffffffff8111156107ff576107fe610216565b5b61080b8482850161079d565b9150509291505056fea26469706673582212208caac82ecde5bb31fb5b34bd6b569b73277f17eb9b132d65942a718f83178c9c64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806333c889971461003b5780638ada066e14610057575b600080fd5b610055600480360381019061005091906102d6565b610075565b005b61005f6101e4565b60405161006c9190610370565b60405180910390f35b600080815480929190610087906103ba565b91905055506000600167ffffffffffffffff8111156100a9576100a8610402565b5b6040519080825280602002602001820160405280156100e257816020015b6100cf6101ed565b8152602001906001900390816100c75790505b50905060405180604001604052806040518060400160405280600581526020017f756e6962690000000000000000000000000000000000000000000000000000008152508152602001620f42408152508160008151811061014657610145610431565b5b602002602001018190525061080273ffffffffffffffffffffffffffffffffffffffff166361ffaee486868686866040518663ffffffff1660e01b8152600401610194959493929190610689565b6000604051808303816000875af11580156101b3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906101dc91906107cb565b505050505050565b60008054905090565b604051806040016040528060608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126102405761023f61021b565b5b8235905067ffffffffffffffff81111561025d5761025c610220565b5b60208301915083600182028301111561027957610278610225565b5b9250929050565b60008083601f8401126102965761029561021b565b5b8235905067ffffffffffffffff8111156102b3576102b2610220565b5b6020830191508360018202830111156102cf576102ce610225565b5b9250929050565b600080600080604085870312156102f0576102ef610211565b5b600085013567ffffffffffffffff81111561030e5761030d610216565b5b61031a8782880161022a565b9450945050602085013567ffffffffffffffff81111561033d5761033c610216565b5b61034987828801610280565b925092505092959194509250565b6000819050919050565b61036a81610357565b82525050565b60006020820190506103856000830184610361565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006103c582610357565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036103f7576103f661038b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061049d8385610460565b93506104aa838584610471565b6104b383610480565b840190509392505050565b600082825260208201905092915050565b60006104db83856104be565b93506104e8838584610471565b6104f183610480565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610562578082015181840152602081019050610547565b60008484015250505050565b600061057982610528565b6105838185610533565b9350610593818560208601610544565b61059c81610480565b840191505092915050565b6105b081610357565b82525050565b600060408301600083015184820360008601526105d3828261056e565b91505060208301516105e860208601826105a7565b508091505092915050565b60006105ff83836105b6565b905092915050565b6000602082019050919050565b600061061f826104fc565b6106298185610507565b93508360208202850161063b85610518565b8060005b85811015610677578484038952815161065885826105f3565b945061066383610607565b925060208a0199505060018101905061063f565b50829750879550505050505092915050565b600060608201905081810360008301526106a4818789610491565b905081810360208301526106b98185876104cf565b905081810360408301526106cd8184610614565b90509695505050505050565b600080fd5b6106e782610480565b810181811067ffffffffffffffff8211171561070657610705610402565b5b80604052505050565b6000610719610207565b905061072582826106de565b919050565b600067ffffffffffffffff82111561074557610744610402565b5b61074e82610480565b9050602081019050919050565b600061076e6107698461072a565b61070f565b90508281526020810184848401111561078a576107896106d9565b5b610795848285610544565b509392505050565b600082601f8301126107b2576107b161021b565b5b81516107c284826020860161075b565b91505092915050565b6000602082840312156107e1576107e0610211565b5b600082015167ffffffffffffffff8111156107ff576107fe610216565b5b61080b8482850161079d565b9150509291505056fea26469706673582212208caac82ecde5bb31fb5b34bd6b569b73277f17eb9b132d65942a718f83178c9c64736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/x/evm/embeds/artifacts/contracts/TestDirtyStateAttack5.sol/TestDirtyStateAttack5.json b/x/evm/embeds/artifacts/contracts/TestDirtyStateAttack5.sol/TestDirtyStateAttack5.json new file mode 100644 index 000000000..80d00a824 --- /dev/null +++ b/x/evm/embeds/artifacts/contracts/TestDirtyStateAttack5.sol/TestDirtyStateAttack5.json @@ -0,0 +1,34 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "TestDirtyStateAttack5", + "sourceName": "contracts/TestDirtyStateAttack5.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "wasmAddr", + "type": "string" + }, + { + "internalType": "bytes", + "name": "msgArgs", + "type": "bytes" + } + ], + "name": "attack", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052610760806100136000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806333c8899714610030575b600080fd5b61004a6004803603810190610045919061028d565b61004c565b005b6000600167ffffffffffffffff8111156100695761006861030e565b5b6040519080825280602002602001820160405280156100a257816020015b61008f6101a4565b8152602001906001900390816100875790505b50905060405180604001604052806040518060400160405280600581526020017f756e6962690000000000000000000000000000000000000000000000000000008152508152602001624c4b40815250816000815181106101065761010561033d565b5b602002602001018190525061080273ffffffffffffffffffffffffffffffffffffffff166361ffaee486868686866040518663ffffffff1660e01b815260040161015495949392919061059f565b6000604051808303816000875af1158015610173573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061019c91906106e1565b505050505050565b604051806040016040528060608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126101f7576101f66101d2565b5b8235905067ffffffffffffffff811115610214576102136101d7565b5b6020830191508360018202830111156102305761022f6101dc565b5b9250929050565b60008083601f84011261024d5761024c6101d2565b5b8235905067ffffffffffffffff81111561026a576102696101d7565b5b602083019150836001820283011115610286576102856101dc565b5b9250929050565b600080600080604085870312156102a7576102a66101c8565b5b600085013567ffffffffffffffff8111156102c5576102c46101cd565b5b6102d1878288016101e1565b9450945050602085013567ffffffffffffffff8111156102f4576102f36101cd565b5b61030087828801610237565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006103a9838561036c565b93506103b683858461037d565b6103bf8361038c565b840190509392505050565b600082825260208201905092915050565b60006103e783856103ca565b93506103f483858461037d565b6103fd8361038c565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561046e578082015181840152602081019050610453565b60008484015250505050565b600061048582610434565b61048f818561043f565b935061049f818560208601610450565b6104a88161038c565b840191505092915050565b6000819050919050565b6104c6816104b3565b82525050565b600060408301600083015184820360008601526104e9828261047a565b91505060208301516104fe60208601826104bd565b508091505092915050565b600061051583836104cc565b905092915050565b6000602082019050919050565b600061053582610408565b61053f8185610413565b93508360208202850161055185610424565b8060005b8581101561058d578484038952815161056e8582610509565b94506105798361051d565b925060208a01995050600181019050610555565b50829750879550505050505092915050565b600060608201905081810360008301526105ba81878961039d565b905081810360208301526105cf8185876103db565b905081810360408301526105e3818461052a565b90509695505050505050565b600080fd5b6105fd8261038c565b810181811067ffffffffffffffff8211171561061c5761061b61030e565b5b80604052505050565b600061062f6101be565b905061063b82826105f4565b919050565b600067ffffffffffffffff82111561065b5761065a61030e565b5b6106648261038c565b9050602081019050919050565b600061068461067f84610640565b610625565b9050828152602081018484840111156106a05761069f6105ef565b5b6106ab848285610450565b509392505050565b600082601f8301126106c8576106c76101d2565b5b81516106d8848260208601610671565b91505092915050565b6000602082840312156106f7576106f66101c8565b5b600082015167ffffffffffffffff811115610715576107146101cd565b5b610721848285016106b3565b9150509291505056fea2646970667358221220035e628d5c38012c486ab00ce495fa418401de59d5a1cbfe1e48245374f7d1be64736f6c63430008180033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806333c8899714610030575b600080fd5b61004a6004803603810190610045919061028d565b61004c565b005b6000600167ffffffffffffffff8111156100695761006861030e565b5b6040519080825280602002602001820160405280156100a257816020015b61008f6101a4565b8152602001906001900390816100875790505b50905060405180604001604052806040518060400160405280600581526020017f756e6962690000000000000000000000000000000000000000000000000000008152508152602001624c4b40815250816000815181106101065761010561033d565b5b602002602001018190525061080273ffffffffffffffffffffffffffffffffffffffff166361ffaee486868686866040518663ffffffff1660e01b815260040161015495949392919061059f565b6000604051808303816000875af1158015610173573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061019c91906106e1565b505050505050565b604051806040016040528060608152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126101f7576101f66101d2565b5b8235905067ffffffffffffffff811115610214576102136101d7565b5b6020830191508360018202830111156102305761022f6101dc565b5b9250929050565b60008083601f84011261024d5761024c6101d2565b5b8235905067ffffffffffffffff81111561026a576102696101d7565b5b602083019150836001820283011115610286576102856101dc565b5b9250929050565b600080600080604085870312156102a7576102a66101c8565b5b600085013567ffffffffffffffff8111156102c5576102c46101cd565b5b6102d1878288016101e1565b9450945050602085013567ffffffffffffffff8111156102f4576102f36101cd565b5b61030087828801610237565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006103a9838561036c565b93506103b683858461037d565b6103bf8361038c565b840190509392505050565b600082825260208201905092915050565b60006103e783856103ca565b93506103f483858461037d565b6103fd8361038c565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561046e578082015181840152602081019050610453565b60008484015250505050565b600061048582610434565b61048f818561043f565b935061049f818560208601610450565b6104a88161038c565b840191505092915050565b6000819050919050565b6104c6816104b3565b82525050565b600060408301600083015184820360008601526104e9828261047a565b91505060208301516104fe60208601826104bd565b508091505092915050565b600061051583836104cc565b905092915050565b6000602082019050919050565b600061053582610408565b61053f8185610413565b93508360208202850161055185610424565b8060005b8581101561058d578484038952815161056e8582610509565b94506105798361051d565b925060208a01995050600181019050610555565b50829750879550505050505092915050565b600060608201905081810360008301526105ba81878961039d565b905081810360208301526105cf8185876103db565b905081810360408301526105e3818461052a565b90509695505050505050565b600080fd5b6105fd8261038c565b810181811067ffffffffffffffff8211171561061c5761061b61030e565b5b80604052505050565b600061062f6101be565b905061063b82826105f4565b919050565b600067ffffffffffffffff82111561065b5761065a61030e565b5b6106648261038c565b9050602081019050919050565b600061068461067f84610640565b610625565b9050828152602081018484840111156106a05761069f6105ef565b5b6106ab848285610450565b509392505050565b600082601f8301126106c8576106c76101d2565b5b81516106d8848260208601610671565b91505092915050565b6000602082840312156106f7576106f66101c8565b5b600082015167ffffffffffffffff811115610715576107146101cd565b5b610721848285016106b3565b9150509291505056fea2646970667358221220035e628d5c38012c486ab00ce495fa418401de59d5a1cbfe1e48245374f7d1be64736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/x/evm/embeds/contracts/TestDirtyStateAttack4.sol b/x/evm/embeds/contracts/TestDirtyStateAttack4.sol new file mode 100644 index 000000000..c9dc1d1df --- /dev/null +++ b/x/evm/embeds/contracts/TestDirtyStateAttack4.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.24; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; +import "./Wasm.sol"; +import "./NibiruEvmUtils.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract TestDirtyStateAttack4 { + uint counter = 0; + + constructor() payable {} + + function attack(string calldata wasmAddr, bytes calldata msgArgs) external { + counter++; + + INibiruEvm.BankCoin[] memory funds = new INibiruEvm.BankCoin[](1); + funds[0] = INibiruEvm.BankCoin({denom: "unibi", amount: 1e6}); // 1 NIBI + + WASM_PRECOMPILE.execute(wasmAddr, msgArgs, funds); + } + + function getCounter() external view returns (uint) { + return counter; + } +} diff --git a/x/evm/embeds/contracts/TestDirtyStateAttack5.sol b/x/evm/embeds/contracts/TestDirtyStateAttack5.sol new file mode 100644 index 000000000..443738520 --- /dev/null +++ b/x/evm/embeds/contracts/TestDirtyStateAttack5.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.24; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; +import "./Wasm.sol"; +import "./NibiruEvmUtils.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract TestDirtyStateAttack5 { + constructor() payable {} + + function attack(string calldata wasmAddr, bytes calldata msgArgs) external { + INibiruEvm.BankCoin[] memory funds = new INibiruEvm.BankCoin[](1); + funds[0] = INibiruEvm.BankCoin({denom: "unibi", amount: 5e6}); // 5 NIBI + + WASM_PRECOMPILE.execute(wasmAddr, msgArgs, funds); + } +} diff --git a/x/evm/embeds/embeds.go b/x/evm/embeds/embeds.go index f08e26b5d..1f0763311 100644 --- a/x/evm/embeds/embeds.go +++ b/x/evm/embeds/embeds.go @@ -47,6 +47,10 @@ var ( testMetadataBytes32 []byte //go:embed artifacts/contracts/TestPrecompileSendToBankThenERC20Transfer.sol/TestPrecompileSendToBankThenERC20Transfer.json testPrecompileSendToBankThenERC20Transfer []byte + //go:embed artifacts/contracts/TestDirtyStateAttack4.sol/TestDirtyStateAttack4.json + testDirtyStateAttack4 []byte + //go:embed artifacts/contracts/TestDirtyStateAttack5.sol/TestDirtyStateAttack5.json + testDirtyStateAttack5 []byte ) var ( @@ -118,7 +122,6 @@ var ( Name: "TestERC20TransferThenPrecompileSend.sol", EmbedJSON: testERC20TransferThenPrecompileSendJson, } - // SmartContract_TestPrecompileSelfCallRevert is a test contract // that creates another instance of itself, calls the precompile method and then force reverts. // It tests a race condition where the state DB commit @@ -150,12 +153,21 @@ var ( Name: "MKR.sol", EmbedJSON: testMetadataBytes32, } - // SmartContract_TestPrecompileSendToBankThenERC20Transfer is a test contract that sends to bank then calls ERC20 transfer SmartContract_TestPrecompileSendToBankThenERC20Transfer = CompiledEvmContract{ Name: "TestPrecompileSendToBankThenERC20Transfer.sol", EmbedJSON: testPrecompileSendToBankThenERC20Transfer, } + // SmartContract_TestDirtyStateAttack4 is a test contract that composes manual send and funtoken sendToBank with a reversion + SmartContract_TestDirtyStateAttack4 = CompiledEvmContract{ + Name: "TestDirtyStateAttack4.sol", + EmbedJSON: testDirtyStateAttack4, + } + // SmartContract_TestDirtyStateAttack5 is a test contract that calls a wasm contract with 5 NIBI + SmartContract_TestDirtyStateAttack5 = CompiledEvmContract{ + Name: "TestDirtyStateAttack5.sol", + EmbedJSON: testDirtyStateAttack5, + } ) func init() { @@ -175,6 +187,8 @@ func init() { SmartContract_TestRandom.MustLoad() SmartContract_TestBytes32Metadata.MustLoad() SmartContract_TestPrecompileSendToBankThenERC20Transfer.MustLoad() + SmartContract_TestDirtyStateAttack4.MustLoad() + SmartContract_TestDirtyStateAttack5.MustLoad() } type CompiledEvmContract struct { diff --git a/x/evm/keeper/bank_extension.go b/x/evm/keeper/bank_extension.go index aa4fe101c..587135ac2 100644 --- a/x/evm/keeper/bank_extension.go +++ b/x/evm/keeper/bank_extension.go @@ -89,6 +89,38 @@ func (bk NibiruBankKeeper) UndelegateCoins( ) } +func (bk NibiruBankKeeper) DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error { + return bk.ForceGasInvariant( + ctx, + func(ctx sdk.Context) error { + return bk.BaseKeeper.DelegateCoinsFromAccountToModule(ctx, senderAddr, recipientModule, amt) + }, + func(ctx sdk.Context) { + if findEtherBalanceChangeFromCoins(amt) { + bk.SyncStateDBWithAccount(ctx, senderAddr) + moduleBech32Addr := auth.NewModuleAddress(recipientModule) + bk.SyncStateDBWithAccount(ctx, moduleBech32Addr) + } + }, + ) +} + +func (bk NibiruBankKeeper) UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error { + return bk.ForceGasInvariant( + ctx, + func(ctx sdk.Context) error { + return bk.BaseKeeper.UndelegateCoinsFromModuleToAccount(ctx, senderModule, recipientAddr, amt) + }, + func(ctx sdk.Context) { + if findEtherBalanceChangeFromCoins(amt) { + moduleBech32Addr := auth.NewModuleAddress(senderModule) + bk.SyncStateDBWithAccount(ctx, moduleBech32Addr) + bk.SyncStateDBWithAccount(ctx, recipientAddr) + } + }, + ) +} + func (bk NibiruBankKeeper) MintCoins( ctx sdk.Context, moduleName string, diff --git a/x/evm/keeper/funtoken_from_coin_test.go b/x/evm/keeper/funtoken_from_coin_test.go index 7a75afca6..432d3ce5b 100644 --- a/x/evm/keeper/funtoken_from_coin_test.go +++ b/x/evm/keeper/funtoken_from_coin_test.go @@ -751,7 +751,7 @@ func (s *FunTokenFromCoinSuite) TestPrecompileSendToBankThenErc20Transfer() { Account: bob.EthAddr, BalanceBank: big.NewInt(0), BalanceERC20: big.NewInt(0), - Description: "Charles has 0 NIBI / 0 WNIBI", + Description: "Bob has 0 NIBI / 0 WNIBI", }.Assert(s.T(), deps, evmObj) evmtest.FunTokenBalanceAssert{ diff --git a/x/evm/precompile/funtoken_test.go b/x/evm/precompile/funtoken_test.go index 2cd2bd34b..a5b21f60d 100644 --- a/x/evm/precompile/funtoken_test.go +++ b/x/evm/precompile/funtoken_test.go @@ -119,15 +119,14 @@ func (s *FuntokenSuite) TestHappyPath() { deps := evmtest.NewTestDeps() s.T().Log("Create FunToken mapping and ERC20") - bankDenom := "unibi" - funtoken := evmtest.CreateFunTokenForBankCoin(deps, bankDenom, &s.Suite) + funtoken := evmtest.CreateFunTokenForBankCoin(deps, evm.EVMBankDenom, &s.Suite) erc20 := funtoken.Erc20Addr.Address s.Require().NoError(testapp.FundAccount( deps.App.BankKeeper, deps.Ctx, deps.Sender.NibiruAddr, - sdk.NewCoins(sdk.NewCoin(bankDenom, sdk.NewInt(69_420))), + sdk.NewCoins(sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(69_420))), )) s.Run("IFunToken.bankBalance()", func() { @@ -152,17 +151,25 @@ func (s *FuntokenSuite) TestHappyPath() { s.Equal(deps.Sender.NibiruAddr.String(), bech32Addr) }) - _, err := deps.EvmKeeper.ConvertCoinToEvm( - sdk.WrapSDKContext(deps.Ctx), - &evm.MsgConvertCoinToEvm{ - Sender: deps.Sender.NibiruAddr.String(), - BankCoin: sdk.NewCoin(bankDenom, sdk.NewInt(69_420)), - ToEthAddr: eth.EIP55Addr{ - Address: deps.Sender.EthAddr, + s.Run("ConvertCoinToEvm", func() { + _, err := deps.EvmKeeper.ConvertCoinToEvm( + sdk.WrapSDKContext(deps.Ctx), + &evm.MsgConvertCoinToEvm{ + Sender: deps.Sender.NibiruAddr.String(), + BankCoin: sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(69_420)), + ToEthAddr: eth.EIP55Addr{ + Address: deps.Sender.EthAddr, + }, }, - }, - ) - s.Require().NoError(err) + ) + s.Require().NoError(err) + evmObj, _ := deps.NewEVM() + evmtest.AssertERC20BalanceEqualWithDescription( + s.T(), deps, evmObj, erc20, deps.Sender.EthAddr, big.NewInt(69_420), "expect 69420 balance", + ) + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, evm.EVMBankDenom, deps.Sender.EthAddr, big.NewInt(0), "expect the sender to have zero balance") + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, evm.EVMBankDenom, evm.EVM_MODULE_ADDRESS, big.NewInt(69_420), "expect x/evm module to escrow all tokens") + }) s.Run("Mint tokens - Fail from non-owner", func() { contractInput, err := embeds.SmartContract_ERC20Minter.ABI.Pack("mint", deps.Sender.EthAddr, big.NewInt(69_420)) @@ -187,7 +194,6 @@ func (s *FuntokenSuite) TestHappyPath() { s.NoError(err) evmObj, _ := deps.NewEVM() - ethTxResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, @@ -199,15 +205,19 @@ func (s *FuntokenSuite) TestHappyPath() { ) s.Require().NoError(err) s.Require().Empty(ethTxResp.VmError) - s.True(deps.App.BankKeeper == deps.App.EvmKeeper.Bank) evmtest.AssertERC20BalanceEqualWithDescription( - s.T(), deps, evmObj, erc20, deps.Sender.EthAddr, big.NewInt(69_000), "expect 69000 balance", + s.T(), deps, evmObj, erc20, deps.Sender.EthAddr, big.NewInt(69_000), "expect 69000 balance remaining", ) evmtest.AssertERC20BalanceEqualWithDescription( s.T(), deps, evmObj, erc20, evm.EVM_MODULE_ADDRESS, big.NewInt(0), "expect 0 balance", ) - s.Require().True(deps.App.BankKeeper.GetBalance(deps.Ctx, randomAcc, funtoken.BankDenom).Amount.Equal(sdk.NewInt(420))) + evmtest.AssertBankBalanceEqualWithDescription( + s.T(), deps, evm.EVMBankDenom, eth.NibiruAddrToEthAddr(randomAcc), big.NewInt(420), "expect 420 balance", + ) + evmtest.AssertBankBalanceEqualWithDescription( + s.T(), deps, evm.EVMBankDenom, evm.EVM_MODULE_ADDRESS, big.NewInt(69_000), "expect 69000 balance", + ) s.T().Log("Parse the response contract addr and response bytes") var sentAmt *big.Int @@ -220,8 +230,9 @@ func (s *FuntokenSuite) TestHappyPath() { }) s.Run("IFuntoken.balance", func() { - contractInput, err := embeds.SmartContract_FunToken.ABI.Pack("balance", deps.Sender.EthAddr, erc20) + contractInput, err := embeds.SmartContract_FunToken.ABI.Pack(string(precompile.FunTokenMethod_balance), deps.Sender.EthAddr, erc20) s.Require().NoError(err) + evmObj, _ := deps.NewEVM() evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, @@ -363,7 +374,7 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromCoin() { s.Run("Call sendToEvm(string bankDenom, uint256 amount, string to)", func() { contractInput, err := embeds.SmartContract_FunToken.ABI.Pack( - "sendToEvm", + string(precompile.FunTokenMethod_sendToEvm), bankDenom, big.NewInt(1000), deps.Sender.EthAddr.Hex(), @@ -382,20 +393,19 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromCoin() { s.Require().NoError(err) s.Require().Empty(ethTxResp.VmError, "sendToEvm VMError") - s.T().Log("4) The response returns the actual minted/unescrowed amount") + s.T().Log("The response returns the actual minted/unescrowed amount") var amountSent *big.Int err = embeds.SmartContract_FunToken.ABI.UnpackIntoInterface( - &amountSent, "sendToEvm", ethTxResp.Ret, + &amountSent, string(precompile.FunTokenMethod_sendToEvm), ethTxResp.Ret, ) s.Require().NoError(err) s.Require().EqualValues(1000, amountSent.Int64(), "expect 1000 minted to EVM") s.T().Log("Check the user lost 1000 ulibi in bank") - bankBal := deps.App.BankKeeper.GetBalance(deps.Ctx, deps.Sender.NibiruAddr, bankDenom).Amount.BigInt() - s.EqualValues(big.NewInt(234), bankBal, "did user lose 1000 ulibi from bank?") + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, bankDenom, deps.Sender.EthAddr, big.NewInt(234), "did user lose 1000 ulibi from bank?") - // check the evm module account balance - s.EqualValues(big.NewInt(1000), deps.App.BankKeeper.GetBalance(deps.Ctx, evm.EVM_MODULE_ADDRESS_NIBI, bankDenom).Amount.BigInt()) + s.T().Log("Check the module account has 1000 ulibi") + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, bankDenom, evm.EVM_MODULE_ADDRESS, big.NewInt(1000), "expect 1000 balance") s.T().Log("Check the user gained 1000 in ERC20 representation") evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, deps.Sender.EthAddr, big.NewInt(1000), "expect 1000 balance") @@ -407,16 +417,17 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromCoin() { // We'll pick a brand new random account to receive them. s.Run("Sending 400 tokens back from EVM to Cosmos bank => recipient:", func() { - recipient := testutil.AccAddress() + randomRecipient := testutil.AccAddress() + contractInput, err := embeds.SmartContract_FunToken.ABI.Pack( string(precompile.FunTokenMethod_sendToBank), erc20Addr, big.NewInt(400), - recipient.String(), + randomRecipient.String(), ) s.Require().NoError(err) - ethExResp, err := deps.EvmKeeper.CallContractWithInput( + ethTxResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -426,13 +437,13 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromCoin() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().NoError(err) - s.Require().Empty(ethExResp.VmError, "sendToBank VMError") + s.Require().Empty(ethTxResp.VmError, "sendToBank VMError") s.T().Log("Parse the returned amount from `sendToBank`") var actualSent *big.Int err = embeds.SmartContract_FunToken.ABI.UnpackIntoInterface( &actualSent, string(precompile.FunTokenMethod_sendToBank), - ethExResp.Ret, + ethTxResp.Ret, ) s.Require().NoError(err) s.Require().EqualValues(big.NewInt(400), actualSent, "expect 400 minted back to bank") @@ -450,10 +461,24 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromCoin() { ) s.T().Log("Check the bank side got 400 more") - s.Require().EqualValues(big.NewInt(400), deps.App.BankKeeper.GetBalance(deps.Ctx, recipient, bankDenom).Amount.BigInt(), "did the recipient get 400?") + evmtest.AssertBankBalanceEqualWithDescription( + s.T(), + deps, + bankDenom, + eth.NibiruAddrToEthAddr(randomRecipient), + big.NewInt(400), + "did the recipient get 400?", + ) s.T().Log("Confirm module account doesn't keep them (burn or escrow) for bank-based tokens") - s.Require().EqualValues(big.NewInt(600), deps.App.BankKeeper.GetBalance(deps.Ctx, evm.EVM_MODULE_ADDRESS[:], bankDenom).Amount.BigInt(), "module should now have 600 left escrowed") + evmtest.AssertBankBalanceEqualWithDescription( + s.T(), + deps, + bankDenom, + evm.EVM_MODULE_ADDRESS, + big.NewInt(600), + "module should now have 600 left escrowed", + ) }) } @@ -476,7 +501,6 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromERC20() { // - unescrow erc20 token deps := evmtest.NewTestDeps() - evmObj, _ := deps.NewEVM() alice := evmtest.NewEthPrivAcc() bob := evmtest.NewEthPrivAcc() @@ -492,9 +516,6 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromERC20() { s.Require().NoError(err, "failed to deploy test ERC20") erc20Addr := erc20Resp.ContractAddr - // the initial supply was sent to the deployer - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, deps.Sender.EthAddr, bigTokens(1_000_000), "expect nonzero balance") - // create fun token from that erc20 _, err = deps.EvmKeeper.CreateFunToken( sdk.WrapSDKContext(deps.Ctx), @@ -506,67 +527,73 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromERC20() { s.Require().NoError(err) // Transfer 500 tokens to bob => 500 * 10^18 raw - contractInput, err := embeds.SmartContract_TestERC20.ABI.Pack( - "transfer", - bob.EthAddr, - bigTokens(500), // 500 in human sense - ) - s.Require().NoError(err) - _, err = deps.EvmKeeper.CallContractWithInput( - deps.Ctx, - evmObj, - deps.Sender.EthAddr, - &erc20Addr, - true, - contractInput, - keeper.Erc20GasLimitExecute, - ) - s.Require().NoError(err) + s.Run("Transfer 500 tokens to bob", func() { + contractInput, err := embeds.SmartContract_TestERC20.ABI.Pack( + "transfer", + bob.EthAddr, + bigTokens(500), // 500 in human sense + ) + s.Require().NoError(err) + evmObj, _ := deps.NewEVM() + _, err = deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, + &erc20Addr, + true, + contractInput, + keeper.Erc20GasLimitExecute, + ) + s.Require().NoError(err) - // Now user should have 500 tokens => raw is 500 * 10^18 - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(500), "expect nonzero balance") + // Now user should have 500 tokens => raw is 500 * 10^18 + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(500), "expect nonzero balance") + }) // sendToBank: e.g. 100 tokens => 100 * 1e18 raw // expects to escrow on EVM side and mint on cosmos side - contractInput, err = embeds.SmartContract_FunToken.ABI.Pack( - string(precompile.FunTokenMethod_sendToBank), - erc20Addr, // address - bigTokens(100), - alice.NibiruAddr.String(), - ) - s.Require().NoError(err) - resp, err := deps.EvmKeeper.CallContractWithInput( - deps.Ctx, - evmObj, - bob.EthAddr, /* from */ - &precompile.PrecompileAddr_FunToken, /* to */ - true, /* commit */ - contractInput, - evmtest.FunTokenGasLimitSendToEvm, /* gasLimit */ - ) - s.Require().NoError(err) - s.Require().Empty(resp.VmError) + s.Run("send 100 tokens to alice", func() { + contractInput, err := embeds.SmartContract_FunToken.ABI.Pack( + string(precompile.FunTokenMethod_sendToBank), + erc20Addr, // address + bigTokens(100), + alice.NibiruAddr.String(), + ) + s.Require().NoError(err) + evmObj, _ := deps.NewEVM() + resp, err := deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + bob.EthAddr, /* from */ + &precompile.PrecompileAddr_FunToken, /* to */ + true, /* commit */ + contractInput, + evmtest.FunTokenGasLimitSendToEvm, /* gasLimit */ + ) + s.Require().NoError(err) + s.Require().Empty(resp.VmError) - // Bank side should see 100 - bankBal := deps.App.BankKeeper.GetBalance(deps.Ctx, alice.NibiruAddr, "erc20/"+erc20Addr.Hex()) - s.Require().EqualValues(bigTokens(100), bankBal.Amount.BigInt()) + // Bank side should see 100 + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, "erc20/"+erc20Addr.Hex(), alice.EthAddr, bigTokens(100), "expect 100 balance") - // Expect user to have 400 tokens => 400 * 10^18 - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(400), "expect Bob's balance to be 400") + // Expect user to have 400 tokens => 400 * 10^18 + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(400), "expect Bob's balance to be 400") - // 100 tokens are escrowed - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, evm.EVM_MODULE_ADDRESS, bigTokens(100), "expect EVM module to escrow 100 tokens") + // 100 tokens are escrowed + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, evm.EVM_MODULE_ADDRESS, bigTokens(100), "expect EVM module to escrow 100 tokens") + }) // Finally sendToEvm(100) -> (expects to burn on cosmos side and unescrow in the EVM side) s.Run("send 100 tokens back to Bob", func() { contractInput, err := embeds.SmartContract_FunToken.ABI.Pack( "sendToEvm", - bankBal.Denom, + "erc20/"+erc20Addr.Hex(), bigTokens(100), bob.EthAddr.Hex(), ) s.Require().NoError(err) - resp, err = deps.EvmKeeper.CallContractWithInput( + evmObj, _ := deps.NewEVM() + resp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, alice.EthAddr, @@ -577,25 +604,20 @@ func (s *FuntokenSuite) TestSendToEvm_MadeFromERC20() { ) s.Require().NoError(err) s.Require().Empty(resp.VmError) - }) - // no bank side left for alice - balAfter := deps.App.BankKeeper.GetBalance(deps.Ctx, alice.NibiruAddr, bankBal.Denom).Amount.BigInt() - s.Require().EqualValues(bigTokens(0), balAfter) + // no bank side left for alice + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, "erc20/"+erc20Addr.Hex(), alice.EthAddr, bigTokens(0), "expect 0 balance") - // check bob has 500 tokens again => 500 * 1e18 - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(500), "expect nonzero balance") + // check bob has 500 tokens again => 500 * 1e18 + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(500), "expect nonzero balance") - // check evm module account's balance, it should have escrowed some tokens - // unescrow the tokens - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, evm.EVM_MODULE_ADDRESS, bigTokens(0), "expect zero balance") + // check evm module account's balance, it should have escrowed some tokens + // unescrow the tokens + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, evm.EVM_MODULE_ADDRESS, bigTokens(0), "expect zero balance") - // burns the bank tokens - evmBal2 := deps.App.BankKeeper.GetBalance(deps.Ctx, evm.EVM_MODULE_ADDRESS[:], bankBal.Denom).Amount.BigInt() - s.Require().EqualValues(bigTokens(0), evmBal2) - - // user has 500 tokens again => 500 * 1e18 - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, erc20Addr, bob.EthAddr, bigTokens(500), "expect nonzero balance") + // burns the bank tokens + evmtest.AssertBankBalanceEqualWithDescription(s.T(), deps, "erc20/"+erc20Addr.Hex(), evm.EVM_MODULE_ADDRESS, bigTokens(0), "expect 0 balance") + }) } // FunTokenWhoAmIReturn holds the return values from the "IFuntoken.whoAmI" diff --git a/x/evm/precompile/test/bank_transfer.wasm b/x/evm/precompile/test/bank_transfer.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7f1fa8f6fbac1000eadff96e94ea26c196d2bc10 GIT binary patch literal 195987 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%0Aq_^Aqb2uA~YmRGsu`o6*Z3$ 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 literal 0 HcmV?d00001 diff --git a/x/evm/precompile/test/counter.wasm b/x/evm/precompile/test/counter.wasm new file mode 100644 index 0000000000000000000000000000000000000000..0e1cba2095937e00235b004b096e35e7def014ad GIT binary patch literal 203070 zcmeFa3z%KkRp)sg_f_{%x+RsJvMu1;i+U)5gv&&c6x$u@)c84sLCu(HH)Ps!EP-8e z97R!#VH`_N6vq$~3~>@W35g*lHjpp|0=U62N-)8BkT?*6fefvHlh559_&gB6-JNvi z_g`zDbI+~1C6#Ok!pB&j>)f-?*{`+Nd#$}sboDD=7DrJO|6zRg-sH%U_=x^Sd($KK zI}Sgiy)_EBiSRvv_*TEz#bnxUn|9HqBTcw|E7;)-D=Ri`JjN z#G~ZME&6?no^(d9X)xW&tquPc{jD9jg(j1?B^%QHH{96V_tL8l?Z0|o)X-gvyB|Ds z-QoRFtlKGj__CMZxIapZmtT3!)i*>*ad*T1n+|)`-qri|9lGkqtFOOq-__K&=4Pyn z3NOFmx@&my!~3I1HT~UdU-h!9Zz#+9uiSsl!EbxP&I9LNb>sd+*M0vFc_(wD;zRqd zVI+sHI{2!W9@zgwkqv)(|GsZ~!3)lN;aHv7qVT0xAHL?=u}AfN`(OI1AMn|9Uh%5^ zhkod)Yp%Wex*L4F^{Zd{@it^y399g)>P)rU z^?GZj)#6EwR_aatSF`7xPE=3oyjD{)ag7(EsM$=S+Qx?W)@`H>;T@P)<63XlTJ?Hu zsx>uLtJ5ikwIuqlB zKg#0RCJ;xB*@pcWQ7_^(F2JLfs5{15YcSZfHXSunN+@WYF&#zIN$ zYPGrOtb|(4_+b19|LSQR%{0zRkHq=WqsODpktqM{J3e67r*v(;KkhbOw*O@>KlDRM z)ZBm5{%c+ZE?rl*m5N@~x$cHn9=`g9!`BJJZr*g=4Ttw1`u?l0*{>yj<#jK=;i}!y z>*Lnd*I)ngYxKtLaeLqX^6p3C{-OP^c-3`>_P_EfS~+mt4L`u!Gu5&~KcH&WLP+7z z)rVhxh{E<&SAp4AU$y^+eQDge>Z)t^Uw!bZmtOtK{b@4wvq>D~ap!m9pH22%v+cYc z&p&tJ+qQrE!dv2d;ywT7t?}LQ+v2y!?}&dYerNpR@BFU+kIzpg##B}^rD6H7Z&rSZ++?2H~r8Hzx$HQuK1oy|F{2rVJ|N%{J{6`-~Z`&;o!l8 z3;*X2|M0#akMD@z9RGU!8}Tp1565qee@v~sH(t0aUigXlP4S)aPpV+y|B8Px{_FU^ z#P8$Z!rp}!{)hOy`{G}Y&-<15*W!ob--;LZeK3Ac@+-;X@xFyWjsGP6QBRMMlQ*I-O<4rAhHe125xwrprcGmuAAThUCdn~pb=OlXEm zQU1ozcDKP@mTFE>7Vk`ITxxlK#u72ker3Zh1b5c!_tDtx12Efo;5} zhyi!9+Qq#Dz}51&e@i!cE?P|TY-kZDG|QEd^|N}G z>`b~`m{W_w`QZRuDK%0GdD2=Q)*Kts?a{ojp}F)LpmUu6j~>~Tu0#n# zjw8k2j7nSc{~ifLYFTZ2)Xix=IX~(Gr?14XsI;d>t-TEZCaaB*Db@1s$Wj4*fnjCK znMS0hGwM4M4O-!vW7x&J?@g~h>CF_>`e z6@%2{3x~|J($6Km^lZ^W%ED?ezh{pRt{Mcy;62s)!)kkUXU#&3-mET{4Fm8l>9x+z z(yi&9!6uczc(6g2iw6B-Xjwey=7~@>&7Y_YVBg9Cw7Q_TO|{nlMm4fH;9hM_hqhX} zy>QsmWp}T3HqFLmmEVg2nI4qw(%92-PNx__ zF{?c32p-UFiCA+&%pQmmkSS{q;($Ly3BnS7gY;75cm+ z5F1ne29%4u-oL>hI1zJupo5dwQ0u-3Y=s_!u3^Ezuw;a$w7U^R?y_pVZkr)YKv^Ma zoG0ZN?$j7Mj6v_OqCxMiAPUDiATIVF2)b1M@hB`v8A3zglog;fcYJpvv{Y^UQiNY zdM9drs%-wCn%`|zS*=a?3thby;-+0tqQt4zdkmb$sdmH2!6?WtOV5q|HC=rB^7bgo z`-cw|V4q^C!RZ3&hHcTVAX?zv^*)a=&PTJbo66c2(rH<;sX+b@8Ab&5DynE^v%As- zE}fmpHZDlfc`nQ`medtCs$MDUzX zu4FY@7x$u33t>gY;pdaXmG!u3FxAnLl|Vb>izm7m!}TfXpaGV&djL2rO6A>htm3)T zj3ya?J_a8_t6^aBsR>5t2w6989X=!|R@X=OAiUiGZLHQBZ+ zodYrI^U3_M=d2*gYs>Uo-DjN{1_jDX7?229~)12iN_sfI3#2zd&3!@!%6-6Pba zslXhVcBHjs5%toX$R!dYEO245w{bD-h=ej3cT8E~5W=HFcpN98_*S$}p&&UDQW-thh5(nZ8u$ofI63~PV57pJ*jtrB$Q+0{t zL}mQ#Gm;HQVyTRa%fmKcg*Z)PY`ew?R}((BU1Mw`EKvm_RH|r@jA@P8GF8X4MrmnT zcL{EE^ilme0<56Ekvy_rrOs#)3eGlIr8l-jo2^1`3@u7RTZ{cwqBRKgz#aoGN|JD4Q~ca@+D?rkI^t z-Ztz^CsAx_(}{}Ov^Ui6!J53`fwD>Vx);OhXv_th#lebw6Hcc^!A^U zJqL#ycct^lAufBpIR}rcaeEO+D*+6<&_WdO78e*(pae=Zra_$t&&Q}S^~{x?x)5hr zuPAB*nLbk0He^8yM{A=8MAV=u{<*>qfmjRaE4w(TYAqA(7{at|HiW5Zq3ug(J2aTV z@k(5p(a0y`k~&wN?sOoL5{2;ls9K@=Cy2TEq#~WtJb=$(S%rUn1b_dz3jVY_pX_B0 z2J%aK*oHoitPaQ-Zvi5RSwqi%RfE()1;t>QAGxuWE<#2G;JhOmSB+t+sbu0rtq7Z0*a|#oiqhV zSA@4}ChMAlv4SeutuY0sxr@QP5x{*8=Jb#RL@`6(L6>m6cm4b^M0=P3qW#?Hdjyz& zYnqYij8|$+wntYu>)6B6OkLdDBvEUk0UE2yQ>d_UekA+)`O8@&pS$t=2!hQZ)(g4x zcP1!tl6Nx1n-XuSq@0MifjW4BF)d%y4;iZpybUFqCSCVLwuu#tRGYn`|AWZ)Lbd6_ z2~cgiK24$Q6iXXMEUekFJd~ShC=Ht*wR{$Fp7J}d$u1l=yc}Wc!Z6M=$@|2-4rt1t zfMC!ElJ&!A@wapV15S>^*@h8=6ZN12B6cOzyJ9d>C$}b%-@^vP-27gYfomc-Bw~ko zL|4*}T|_;3Yaya!&!H$6q+`o=u@>o4U$%m+2_G->rY`d3TZ9H_u;-M0a(K>^YW$4g z$ugc)rgXpzBbB<;(7@KeN<9=4lumE`t|G0H6pi*I-wK8T`?T4g8|@d!eqe;@*E*>7 z4OqB>M5KLAgAIM5NCy<@1Qgjop;WGHgQG}CD8jo!k?8_Oq6&(XoG)mx*xo4LB15A6TUd2283W_8dC-8@ z^J8wDH}GZN$japH64 zg(`8z;({%xIS?mnIC;=zw;J~10rb~55g|G~H}*Q6*XFLCb079B%MzT|!Iuat&SOez zd174o+$hQ)e(Ujw>!m`+s+(F1FBdcw>XR#=ZH-l^Qy~K=@N<9?yu=mnw800rs8$mv zwY<~fuCm9>4}5926>0xM4q0d+kYfQ0k5A$*fliA?uhpRoy|iioF#!$A9%Y8*w>rGR!sHgcq^<_T8cQnwrGpxD zGhKO*V%(ua;CXy~sD>#~?TQYtv5F~~P37*(nt9H!sRjyjXeqUZ^zXWH&EqEq;Y|k8 zVXd%*P%oB_-tyX|_?Wo8{q78#OJ9j!yA*vlYpVemM9fo@_%i)&?A1NEv{>k{2?LZQ zOY%o6x(B6Olf_|Ex`%~qOe2AV$u336^7Nts>t!XPDMft7x|MAZFbs$!vUCa{EcoIW z7_>NgzCAh*TQ;EBsaDe({7=!ctdKE8R~Te3o;gPQ68e8x=;(Gyn@BlU2M} zlC|>Um`D(SOyqYyn`UaxdS0q*Lo;l~?T*vHC9ED_kvS$#?U9F2D+3d#l%l}Kws&w@Ey zn-GFz7Qr6waL0a z_}V2gs@5?z4}@#h4+6N8l`n{6^MWs`wa-g{bkJCe2DALXiLMkp#!+Z4!5-J?;1YC| z!w{#)D3BOJ1JvY^UVVO+ymExmnxFnTPI>%zE%1-ERSHEM)nijHB~`9B)@re)? z2gqu00lvs(n^{PcyAqExE^?-g8Ocn-V(eWoO(!m|imC zcNw7ZYZ*#ElQVe)o{0sS3ML&*0=b|x>0nWdc_f7#*TTaB9N61ca0I7pXE3!Cb(nBc zkb-~-=G(H&2ucFh442)@gN;J{;vee8DD(=2)XbwdUAn7!<_n4|jE_bNGN6-+Coje2 zrhcbb-ijyB+q|SVU7~|tbI`6thqe!^M1|P3ak=bPfzqY3V@Z&->wqhP1HqNc-f>V) zOY~KobQ&Q@e%w7=;({fHrSp?9j2LCHPAkwBWGm4Y{D;ZRl&B~#oMWWax=r`zvAjNO zG*se$K+0COaXlD0*d&R&>3$On@_fBc6KnLZryu0_Xl8pR&P=Ya9?FBez91w6PH5u> z?$!Yutcn@+^A-Nv@Y<7;D(}V>rGyR~13m;?PC`o9aFJ_Qfqw8X;A~Q9LzE=b+1QpC zCsR^9#;1h4v!RINoB}~Rktq$i=isiS9f*sdD5-YVQ$~WZ6$)Ak$fHmOlOz_Ixd9~w zx6)O^Z4<`foN$N8-`#oTi1+SFw$YlH%Is3>cG0pN6sdSuQ;S#Vk--f(n(JNpC^6NbVZFvE~Tb3Oq_6mG=xD| z2W21WBIBRHebI+(&Z8IiPJFSX!HT;mtdiDf)6(4SFT!B2KsT;pN&_v3m*#KFnx+le z;8{EM9^##->V+RjETj%gWKarS0(?PQ`CP*(Twg8ua6oSIfCM;v32Cu zuG5WoqIb$_vZq_eI{r2WU3h!;Mf_6d!1!zR&8SfR&enrczqRl_mifgv9jE3Mbj3~s-A5qI@ z8{GNeBUXmZmW+o)I8}HI0di!j^9ij?h%~FZV2sWWstsfF+-t}hN=YOdxmgOIta(Q4 z2{d+7U=0PJ12M-{hC;}I)WdjUDy%u&9yP{)kuVqX9oXH4;nlg~#{^eEx|N04}8D_MbWqitf&m zrDRuf5e1ZAp*lj5oth~>zlC2{+OHPB_E54-o$X%kzsx}=)*J{3d{n+gxtwPFJDNLLhlMDFT0%JSY}7ktS0qWzvnyb$ zo?ROpXSrEFg9M-x)W8r4MyyKoPo-xe7G>L~aU88M>2lI9fK%`tLJA{;9<<_LHILS; zOw8#THni+UXq?t%U+Ov|%i4W)6K(hREwyhMHn0=+Km+bxpl=AiaX+@ZRV0Nht6x6; z)RNZZ>s23S#d9?)-uo)8c(D;@G6PYu@=X|*arVxMCvFz^ti6nbjHvz z^FRO4TaPP;P#NiF(WoV!eoDphN%Oy<$dO|hnEA>+`*s<|s9l8PiiGkNjwfNNP!!w* zMa^0hidv}P?az1{!0AESSl+}qisO5LO#Q%gLdpzN%76RyfVW{#m)q4cxWpR#7cV@b z7wW~bkW)wKS_&)?6a8wGezF8=%1_>MTDB~qI^J^XEo0*#fYh?BYPnT_a`3gv1S}Zi zZz2IB7ijij|HUj=+aX}wfatQQ=qsjwcLUAyIRoE>lZUog%#9cMo*oNdA#PK~pZ zYCP9Cdq)!2C&j6AqIN+Sz?drHui~x9%)rN`J(^Stfx(e%cQtY4hO36uOL#4Oj~{(V zxG|_nTToapL@?#g^HSbQCE0NUhz+HAbXhOWZ@uRO5o#~{Lf}uY9wK4jdYE&lq<@l7 zYHXme1SD8;EC_KzOEW{r1pkF|vJGyb<%mr)=YId0NS$I=ja}C%eN60}EQ;^a2cBPJ z6I#-a+OcgEc(1U>>C`fMBy@(1erpuvzs57J-`$%!yP#nFDd{|qewjyHFU5a}Y9QX< z4pOM-p&qdzR8X$;&~RBn549CN;Fu@Fz@^!W9<+zedN52ar4eyVlkk%F2qnpTsiYpF zt}S<>1uc6RU(iYqUrWpRPp)ls?YL#s# za@4>ZFtxvYmQQZKf!dK{5{LdX^|7y{yWc|497IrzonR>u)5wgpv-9jTbd zA)t#UN_w7bV)O6FfmyU#MidE-P@yVwLtHcWh$35TRZC7C3y51}aWEcHOhO2$u5Df}Am|r&N zEX9heNvf<-kr%xptIi-47*WM8AwUfKH7Y5NXuT1_)Mgozt(TFn!rhBW-msR44oiy| zMS(;Mqc|v9hq>MPI~EVHq>O-*VBy~3)Gqvi?6%yM?(z2UP%%*tBbET@E=3`Ps2Ppr zB(Wm^7@j3BY6S~C-zm5Kn#ysqpkY62?_q1j)cqJ_!pi*Tj>33q{p*$Q9gnZQc@aL$ zd+wAAv|sPC3x%Q?ma`H;^bRiR^~>egYm=9Mx)`O}@ujz|nrlE(N^Y@EA&5vcgQAmz zwdY{vvWJnd0jfZyO|qQZ_gjvTgL(z7O&0?XD8v4SfHH%&MIi6DXKaz+SCzO z12gP<)K11E>na_#Sd9;X0Vl(1>0Hzqp>j3h45W@=hb6N?xn@r>W0WTVl%pmQ9ec?) z6%xS{gEqykPfY|*2*8$9(%^#0E^vC;0_E)a}gk!%MLDxo(1pZW0g)yxb4A1 ztxCd_T~+~rU!*!9Op>2w9k^O5vC67N7w=3MI&DBODC;|;YmDTS`X{LBm1}lJwtOt{ z&gcca+_bX-G|L5NM|v;7r5JL$2Mj4utqcRg4a3@wt?X#|<0`t9i|bNSLwd?w$@g@U zmb;R5w!@l&(Sjhyg<6xh+bwFYs|DeTBvWri^37UVom7*#NDd+}P?rE~A`p?F^wQLm zYAk`bR}Va}CPpKCg_~~{5iN{FV4B$Qb_|=w-SDBC%v0$KVl(icoYl3BUNbI}B*>`K zW>vndV0zGvk93eF=SDB&?t*e(lj&+Ze9mlF)(|grDY(GsQPQxlo4)OweI|`V+V8qj zMj4=xQP%KaDn(Qwla$&uCaAE=Oi;0BHE>F@TL5Fc9@%94kM&p~o4n0Sdc{6Re{J%* z)Yq{t69m%fEfUZ{9u@1NUHI^-V!nnCaHr#9(@i7;%K=^HyT+Gew-#V~w1d4TEWAd=&$k;Ax zLC<@E61%UA$J--9|Hk9jAP3WecRTzc2QlkZn&K&z%M1>Ld9lD`XPg^dthMwlQnn_S z`RbCSt<_y*b&aiC>))eyeHWa)d!@g7g}8b^BB0D~MZE&N1e#P^bV>-p<^>@pDhSyk z-~qr|3R`;O3ab`kIcvVJmT;DqY?krRaZnD;ua^=0OdxOl(@;rp81wGM@JdET2USZ0 zlqmKhOpYPTYzf@g2vBw%TvY}gb{!!eT1@+YfV6`#OSzLgoo5d^zQEKBgtcmT`mwCf zY9-^9YHVAS^5qtw?(_Tq}}QqDl3+ zusUoVl(*5eoM4Z-$@*0vnPslCP=K+I=hlrK`wiZJmE>YEVhbWeX$saCvEcUwpJ(Yl zm}7CIR;8Yf%+T%lnaG7IWC*aUD5G$2$oEy2D)87IDTyO;b4C@QHY)_Ll`hh%p39|f zv~t9K4IRj?6#c{&nerHwZ2=bj!yU@Nl?AGOG%SW$H@-7oJ^Rr#S|x^LM_QQi2Q&0p zIkH!BEp0C!qnPrReD8~I@Ead7sGA1I_PqN=Dh`pt9a1V;V>_k7rV!(*%0-haQ&=O? zuKGk7YBerp?o=U_WrKX6m$aRz6&@#lrj~CB3l=guNlDt`=95T|NS**(6KQi>aZA`S zC6vecUl;l0qoq-+gGQbXP-&5E%v213z&e-Ou!-lU`5ouL%Y-R|sbo=BvDyy@P-$K8 z)zq_=j3*-O+Bd<;6w2Hp^NB?AY)ac46H;ds_NSaKnrJQUti#*liAwqVQB*x`DnflN zXQfT?(UNeY1;-bz_+YDi&Nxhozs4;lCw3RiFZjlaLmuM5P|1!M+ve2BOaBXkmbXR_ zTcJY{xd@rv=37zLL|WB58*VSS0eSYAj=|0xqc7WNamBC>1kIwUD4iDt``8}&#t|$J zqgv64X%Hi~#YIDmL^5V%E6%%GISK5DZ~hDZldRR- z^H^@>s+YY%_9BC(_-dP0#(WrZ8lfDzp9BPv^4S?rt=7R9m-eQ0w2NRIkFQ2W@u|@H zD5tvRl}(y7z`1j|n^EcO2J6wLx26tY;!q(rSqXZqsdnbxSi0=;--CnL zxduGD(zCO#kb#0;Ef-BComXziqP{j{bF(m*(o5)F=u-I~N2O+MPpvtfDo}@>%7l26 z!JN1hI!0@gUS?_G7kbCLCCb5=(JVA%dMvS1qFsIjK;TMopgBQ&#N|w912@4RI~Azr z-p#Q^A1Td&G%StUN=cG-9#$}manQ;{CvTecTz8C1L9BMBA)>cS3Y6?olRvdz%{8>;j3$2rSqOm)0O=<#deDi@B04BPY2lN0NGlLxU9F;Mu41E?NSMC~4U�k0? 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�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 Z_v)R#S|=_h^?dm#rk$AHz%){x`WN~T82$hN literal 0 HcmV?d00001 diff --git a/x/evm/precompile/test/export.go b/x/evm/precompile/test/export.go index e37c99b09..01104f0bf 100644 --- a/x/evm/precompile/test/export.go +++ b/x/evm/precompile/test/export.go @@ -2,7 +2,6 @@ package test import ( "encoding/json" - "math/big" "os" "os/exec" "path" @@ -15,7 +14,6 @@ import ( "github.com/stretchr/testify/suite" "github.com/NibiruChain/nibiru/v2/app" - serverconfig "github.com/NibiruChain/nibiru/v2/app/server/config" "github.com/NibiruChain/nibiru/v2/x/evm/embeds" "github.com/NibiruChain/nibiru/v2/x/evm/evmtest" "github.com/NibiruChain/nibiru/v2/x/evm/precompile" @@ -30,7 +28,7 @@ const ( // SetupWasmContracts stores all Wasm bytecode and has the "deps.Sender" // instantiate each Wasm contract using the precompile. -func SetupWasmContracts(deps *evmtest.TestDeps, evmObj *vm.EVM, s *suite.Suite) ( +func SetupWasmContracts(deps *evmtest.TestDeps, s *suite.Suite) ( contracts []sdk.AccAddress, ) { wasmCodes := deployWasmBytecode(s, deps.Ctx, deps.Sender.NibiruAddr, deps.App) @@ -47,48 +45,29 @@ func SetupWasmContracts(deps *evmtest.TestDeps, evmObj *vm.EVM, s *suite.Suite) InstantiateMsg: []byte(`{"count": 0}`), Label: "https://github.com/NibiruChain/nibiru-wasm/tree/ec3ab9f09587a11fbdfbd4021c7617eca3912044/contracts/00-hello-world-counter", }, + { + InstantiateMsg: []byte(`{}`), + Label: "https://github.com/k-yang/nibiru-wasm-plus/tree/main/contracts/bank-transfer/", + }, + { + InstantiateMsg: []byte(`{}`), + Label: "https://github.com/k-yang/nibiru-wasm-plus/tree/main/contracts/staking/", + }, } for i, wasmCode := range wasmCodes { - s.T().Logf("Instantiate using Wasm precompile: %s", wasmCode.binPath) - - m := wasm.MsgInstantiateContract{ - Admin: "", - CodeID: wasmCode.codeId, - Label: instantiateArgs[i].Label, - Msg: instantiateArgs[i].InstantiateMsg, - } + s.T().Logf("Instantiate %s", wasmCode.binPath) - msgArgsBz, err := json.Marshal(m.Msg) - s.NoError(err) - - contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( - string(precompile.WasmMethod_instantiate), - m.Admin, m.CodeID, msgArgsBz, m.Label, []precompile.WasmBankCoin{}, - ) - s.NoError(err) - - ethTxResp, err := deps.EvmKeeper.CallContractWithInput( + wasmPermissionedKeeper := wasmkeeper.NewDefaultPermissionKeeper(deps.App.WasmKeeper) + contractAddr, _, err := wasmPermissionedKeeper.Instantiate( deps.Ctx, - evmObj, - deps.Sender.EthAddr, - &precompile.PrecompileAddr_Wasm, - true, - contractInput, - WasmGasLimitInstantiate, - ) - - s.Require().NoError(err) - s.Require().NotEmpty(ethTxResp.Ret) - - s.T().Log("Parse the response contract addr and response bytes") - vals, err := embeds.SmartContract_Wasm.ABI.Unpack( - string(precompile.WasmMethod_instantiate), - ethTxResp.Ret, + wasmCode.codeId, + deps.Sender.NibiruAddr, + deps.Sender.NibiruAddr, + instantiateArgs[i].InstantiateMsg, + instantiateArgs[i].Label, + sdk.Coins{}, ) - s.Require().NoError(err) - - contractAddr, err := sdk.AccAddressFromBech32(vals[0].(string)) s.NoError(err) contracts = append(contracts, contractAddr) } @@ -102,7 +81,7 @@ func deployWasmBytecode( s *suite.Suite, ctx sdk.Context, sender sdk.AccAddress, - nibiru *app.NibiruApp, + app *app.NibiruApp, ) (codeIds []struct { codeId uint64 binPath string @@ -121,7 +100,15 @@ func deployWasmBytecode( // hello_world_counter.wasm is a compiled version of: // https://github.com/NibiruChain/nibiru-wasm/tree/ec3ab9f09587a11fbdfbd4021c7617eca3912044/contracts/00-hello-world-counter - "x/evm/precompile/hello_world_counter.wasm", + "x/evm/precompile/test/hello_world_counter.wasm", + + // bank_transfer.wasm is a compiled version of: + // https://github.com/k-yang/nibiru-wasm-plus/tree/main/contracts/bank-transfer/ + "x/evm/precompile/test/bank_transfer.wasm", + + // staking.wasm is a compiled version of: + // https://github.com/k-yang/nibiru-wasm-plus/tree/main/contracts/staking/ + "x/evm/precompile/test/staking.wasm", // Add other wasm bytecode here if needed... } { @@ -135,12 +122,11 @@ func deployWasmBytecode( // The "Create" fn is private on the nibiru.WasmKeeper. By placing it as the // decorated keeper in PermissionedKeeper type, we can access "Create" as a // public fn. - wasmPermissionedKeeper := wasmkeeper.NewDefaultPermissionKeeper(nibiru.WasmKeeper) - instantiateAccess := &wasm.AccessConfig{ - Permission: wasm.AccessTypeEverybody, - } + wasmPermissionedKeeper := wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) codeId, _, err := wasmPermissionedKeeper.Create( - ctx, sender, wasmBytecode, instantiateAccess, + ctx, sender, wasmBytecode, &wasm.AccessConfig{ + Permission: wasm.AccessTypeEverybody, + }, ) s.Require().NoError(err) codeIds = append(codeIds, struct { @@ -163,7 +149,6 @@ func deployWasmBytecode( func AssertWasmCounterState( s *suite.Suite, deps evmtest.TestDeps, - evmObj *vm.EVM, wasmContract sdk.AccAddress, wantCount int64, ) { @@ -173,6 +158,30 @@ func AssertWasmCounterState( } `) + resp, err := deps.App.WasmKeeper.QuerySmart(deps.Ctx, wasmContract, msgArgsBz) + s.Require().NoError(err) + s.Require().NotEmpty(resp) + + var typedResp QueryMsgCountResp + s.NoError(json.Unmarshal(resp, &typedResp)) + + s.EqualValues(wantCount, typedResp.Count) + s.EqualValues(deps.Sender.NibiruAddr.String(), typedResp.Owner) +} + +func AssertWasmCounterStateWithEvm( + s *suite.Suite, + deps evmtest.TestDeps, + evmObj *vm.EVM, + wasmContract sdk.AccAddress, + wantCount int64, +) { + msgArgsBz := []byte(` + { + "count": {} + } + `) + contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( string(precompile.WasmMethod_query), wasmContract.String(), @@ -180,7 +189,7 @@ func AssertWasmCounterState( ) s.Require().NoError(err) - ethTxResp, err := deps.EvmKeeper.CallContractWithInput( + evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -190,26 +199,14 @@ func AssertWasmCounterState( WasmGasLimitQuery, ) s.Require().NoError(err) - s.Require().NotEmpty(ethTxResp.Ret) - - s.T().Log("Parse the response contract addr and response bytes") - s.T().Logf("ethTxResp.Ret: %s", ethTxResp.Ret) + s.Require().NotEmpty(evmResp.Ret) var queryResp []byte - err = embeds.SmartContract_Wasm.ABI.UnpackIntoInterface( - // Since there's only one return value, don't unpack as a slice. - // If there were two or more return values, we'd use - // &[]any{...} + s.NoError(embeds.SmartContract_Wasm.ABI.UnpackIntoInterface( &queryResp, string(precompile.WasmMethod_query), - ethTxResp.Ret, - ) - s.Require().NoError(err) - s.T().Logf("queryResp: %s", queryResp) - - var wasmMsg wasm.RawContractMessage - s.NoError(json.Unmarshal(queryResp, &wasmMsg)) - s.NoError(wasmMsg.ValidateBasic()) + evmResp.Ret, + )) var typedResp QueryMsgCountResp s.NoError(json.Unmarshal(queryResp, &typedResp)) @@ -275,36 +272,24 @@ func IncrementWasmCounterWithExecuteMulti( } `) - // Parse funds argument. - var funds []precompile.WasmBankCoin // blank funds - fundsJson, err := json.Marshal(funds) - s.NoErrorf(err, "fundsJson: %s", fundsJson) - err = json.Unmarshal(fundsJson, &funds) - s.Require().NoError(err, "fundsJson %s, funds %s", fundsJson, funds) - // The "times" arg determines the number of messages in the executeMsgs slice executeMsgs := []struct { ContractAddr string `json:"contractAddr"` MsgArgs []byte `json:"msgArgs"` Funds []precompile.WasmBankCoin `json:"funds"` - }{ - {wasmContract.String(), msgArgsBz, funds}, - } - if times == 0 { - executeMsgs = executeMsgs[:0] // force empty - } else { - for i := uint(1); i < times; i++ { - executeMsgs = append(executeMsgs, executeMsgs[0]) - } - } - s.Require().Len(executeMsgs, int(times)) // sanity check assertion + }{} - callArgs := []any{ - executeMsgs, + for i := uint(0); i < times; i++ { + executeMsgs = append(executeMsgs, struct { + ContractAddr string `json:"contractAddr"` + MsgArgs []byte `json:"msgArgs"` + Funds []precompile.WasmBankCoin `json:"funds"` + }{wasmContract.String(), msgArgsBz, []precompile.WasmBankCoin{}}) } - input, err := embeds.SmartContract_Wasm.ABI.Pack( + + contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( string(precompile.WasmMethod_executeMulti), - callArgs..., + executeMsgs, ) s.Require().NoError(err) @@ -314,60 +299,9 @@ func IncrementWasmCounterWithExecuteMulti( deps.Sender.EthAddr, &precompile.PrecompileAddr_Wasm, commit, - input, + contractInput, WasmGasLimitExecute, ) s.Require().NoError(err) s.Require().NotEmpty(ethTxResp.Ret) } - -func IncrementWasmCounterWithExecuteMultiViaVMCall( - s *suite.Suite, - deps *evmtest.TestDeps, - wasmContract sdk.AccAddress, - times int, - finalizeTx bool, - evmObj *vm.EVM, -) error { - msgArgsBz := []byte(` - { - "increment": {} - } - `) - - // Parse funds argument. - var funds []precompile.WasmBankCoin // blank funds - fundsJson, err := json.Marshal(funds) - s.NoErrorf(err, "fundsJson: %s", fundsJson) - err = json.Unmarshal(fundsJson, &funds) - s.Require().NoError(err, "fundsJson %s, funds %s", fundsJson, funds) - - // The "times" arg determines the number of messages in the executeMsgs slice - executeMsgs := []struct { - ContractAddr string `json:"contractAddr"` - MsgArgs []byte `json:"msgArgs"` - Funds []precompile.WasmBankCoin `json:"funds"` - }{} - for i := 0; i < times; i++ { - executeMsgs = append(executeMsgs, struct { - ContractAddr string `json:"contractAddr"` - MsgArgs []byte `json:"msgArgs"` - Funds []precompile.WasmBankCoin `json:"funds"` - }{wasmContract.String(), msgArgsBz, funds}) - } - - contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( - string(precompile.WasmMethod_executeMulti), - executeMsgs, - ) - s.Require().NoError(err) - - _, _, err = evmObj.Call( - vm.AccountRef(deps.Sender.EthAddr), - precompile.PrecompileAddr_Wasm, - contractInput, - serverconfig.DefaultEthCallGasLimit, - big.NewInt(0), - ) - return err -} diff --git a/x/evm/precompile/hello_world_counter.wasm b/x/evm/precompile/test/hello_world_counter.wasm similarity index 100% rename from x/evm/precompile/hello_world_counter.wasm rename to x/evm/precompile/test/hello_world_counter.wasm diff --git a/x/evm/precompile/test/infinite_loop.wasm b/x/evm/precompile/test/infinite_loop.wasm new file mode 100644 index 0000000000000000000000000000000000000000..d58ca41005ce77b23f9013e222fdfee035b311ae GIT binary patch literal 193630 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

rm~p&GOT8ubno#tAXH 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

    aLbra!V~ouWB@jwAhI_cw*r=nf~>OV|!v_ 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 X^d%=Im-O`8xZcC{C9Z$oQ2u`bS-!wE literal 0 HcmV?d00001 diff --git a/x/evm/precompile/test/wasteful_gas.wasm b/x/evm/precompile/test/wasteful_gas.wasm new file mode 100644 index 0000000000000000000000000000000000000000..873a071136d6f5ec0c4bdecd3c09947fd55407d2 GIT binary patch literal 195446 zcmeFa3%p%tS?9kl`*!x_WT!cWLmPGNoy>S5i49Vc&{jO_(5uwH{X2E0I{c?8ZL~cp zr46B$`C}7kEL93t0Vx-uKxbN!V#PAn3r?z_0g4u^ic+0`9j#8q{)PuJ{-^QP7WN159n{SJ3U~(WbOL18zTmAqkiA0C!Nu2 z8bG&lYh%69hjrtPH%7_Zl6C2xYp!oz@sdmT?YZoVsII#fci*?~s{MPSShq9w@TD)i zeovGZFTecq%dUx%;_jL~H|+PSz00n+V&A3LUv~9XS6oJYYi_-jQQ>9RTy;55{^On~ zQcZvN%2&MfvTMq+{>%4Ve(g6sZ^z!}TzdVUeOGtXZ#h!hyy!7%bFT3g* zA8-A#m%MD>ex4plel@AZwRqw`o0j}8)3X=#_ZvSQ z>$0@z+b+ED|9a7jzV%zbb=#$zZj0X-zwFu{iGMVHQ~c)m$Ktodx5s<0zUHdsD_{E7 z_-*mq<9Ddi|MTxJ-*mx?ulNs}zI)T|%U<$=Z~5l)&-9%O$oZ4d6 zTzbtxP>lZ%9@v>i-MEu1PW(Gy_xx3*E&1O?=Tfhh)wV_5oaU1=qHdPtUx}})w5LX` zy>%VEx{$Q;cv+)Mb4Gr8mS(jb$#(9tE$Kyr4JyBIuuhk=2mNAbSv=_G zNjFjBk5&e7#pD25-C8+-ff`vHaIdyzLtCt?rq|PDSFd&o&BkSwUom{+LD?=HevuB- zd~xqW0t$nlj5OJ`GriX9IXq6XUamdXvUEDd2#Q(dNk{O==SPS&FU0JDC;^$W_8<-j z^{l~qJ;`PUCuNO6FBR?|$kyjug#$k*WZ>q@(Rsc2l&pWxQg-v; zyDN~pKkBtFbUx%5XFbj`oo&&2rZYUZ7w2!Z)*Hg-UUW)sxY-#r>{S{z)LIQed#w?T z8a5_KxuVJhyhW`AhMnZ#T@CmX@b1la!SR4j0K_`TUxz@->-}>Kf>SZKCo(tk`Z~v! zlMFouT|{ALZg;)(6|p5(cP>asQPJ0?cm@k}hm*I??pNWS{#4 zrFajCwF-r(ertp*GvFb}(dtE=F)U?%&Y_RKnsFOP?WwA-;N#IU^fQF*2MW4kxB(jC z`B}?wO4_$aNw#69-l!6;4W|Ra`Fz z?Sc}!by_fPR{^JSs$DR0FbeX^($k`Eri*V`-WEl9fB(J$>@zGi9JWBZVOz8-h!%MF zLZ8PN=c8HJO=WEh>9j1_R3QH^8%6~7DynE^b34=RTsk|Ftz3|z3tX6E#%0}(WFwc> zj%1!oR}!|F^(4cZ86c@~IXQdAp`B@;UvVB8f}RSjoLyHTI9i|p!DikKYoqSeR!-+p z)?!ran7rXya!!w-Ip(>T_)N5%2aGi^>~;b0V!?AExrEhdozsg(Erb;nhhIqcSJ3;0 z!AwU>RswC`h%Ux(eFi#cfFl0GBn!iyvw|qEEz@s(OL_@1 zjwcs00xlOZU<%J4pdm?0HFQ}-$Wyor2Hr&09;O~m1?B+QBdslqsF&tNE|CynI~Nvv zD;L9#NGOwW$J91*X$w1|>||j9&|c0uK4vkjdj1$fu8wvfDgwvCOcq2%yTj|=r_pER zfNC=sq(F%SaRyj*Cmg2<8(u97Z%2kn-l@7oa&C?~52bN>0QE0JJp-uD3S99^;4-4A z$Ym4#)9y%`B#Rku%pjt8C(h!L=9c6Lx48e2I7=3ije}H|`GMWd4QjgU_u{PPh(v9* z$+9-~&eq~qD?*2f^S^x)>~^OAX;8Z*l#cV8-b_h@l3s%$nffJ=U?rRp)u5zmD>baY ziB@XjC)HMxDXmZ`%HJTqui1j2@IqlAt1SeLq>D!4T0TVveXB;5^v|UpYnq@;1XKi; zTarHLVT(~6FM22a)XwQ8fURch1rGfETTD=qS5E&-o|NA%}_Pfw7q{41>hUlDZi6_!9t z+_qI%0-;6eT-IWLg|ZY>v>@;TcaeIqEt1L>T=f=V#nR*t$GeU(8G`Zyk1KlPDIO%#T(S;oYHr4`JgCf34)!bGUnM zDYua5+oJ8z0bOo&e!L(BXdyWrv9xNNmFbzlwQ-}UAG>)|ofax}4QX5Zvv}X2?|l|3 z`HV2M5PgM8II=Bxv|SoFiiEh+tcWf(hUGt{k6$}HX=l2CZq8-5H|OAS#e6p^#w38V z#1^7hI*njVB^D^rfd_RSJQp)HEl~{Kg?Jd&E2{TE#;la@by={h(8K8grDM<(`E(W3!-#QAGxuWb5ceG;JhO zmcTuOwd`s>Q}_i<0aHV-PMZRxE5chblQm7jyaiRVTV)DPbLW70BY^uHOn^zJLB68F zq8*mP4+uVlvKA(QvUXbZodV3iGhNrLfJ?L{+oFq|bzH>K%$(EPAmzz~#|A@h^Rc)V zn>EgeW32M1C7`axOQdm;yEh63qTKJj9v>f|f4Gz2w zvxp|$nm}6-D;O!OyG8%kqOldqY8Os`!0h@og|ag&Z5Xkz=Je&EG=`yUCVtfNITW;% z-+4`z{;=WYs85=sBzGnaE-^n6wht&E81#W;eLr^DE4zRJx7Ge^-H5@7deG{(Bnwj0 zx?(Ug5Vjuc(RPgWcnR2!$_qr!y>TtuTl@i1f^A3zbisEr$u`NvhN*X`jrlT`kgx?C_7q@0@d#9XAD0_V2e3T>bvLNaTjowc{nCq#;wf-Qt_0QZBTVVD*9 za73w1`fC6fH!Zno3Gxw;r)o)@ksu$46Z3%=s>B(K3$~!zK%A`M^g);1YS@c=(O>WC zBz1RU%O&kb3G<0dqhyz~&@rO~iyxJJP%Bim@vF>~=MU5Tv(et!O|{r#H1R6`)q`jr z?nP)v#eXs4I+#YkiVfktsa><8Wd;pW;FFqSlIB~_<>&85=kDWz2D(ooc+5azHopop z+ZM&Lj5$24j;fh^<7rjbN`nEe=qDe6!=mk|3|=TY&L-5EX+8F8|cs zD$tlu;!PTW(3D=QL(k#2$zrky5EGE8>`@j+{%VIetR}fpFR81+u*Q6+ zkYdLmE^(W_HdI4vu69KSm=nd6%zSX)Yt7t#m=6P)XIe_FA^p1=SaZA2AbgU6bXY6Y zekAGA!5eQ{iVumg+3(JLGBYf2b%_|CM3Oy5f zC-V9}qbi1S`nwj}T19M&eQ zB!)^DML*WVBJ24_K*PQ>pQPa7HD@g~aR5+n-8sD)d}W=eyE+nSoPmrsSohc7v?MBO z9a8fMhnn?+bm(N|3t}g{V8X)N=OxH-&{&EFbNs)7t`wHVVPmeD9@p96nsIp;I3&Y` zIK(57#F{*;wa?FzkjMRXCGQOWnAN~P)>g@}aRHA_y=0@g*6D@;N{?OfLCPzG7~%RX z^cLBIs_ zZCTa}N&?n;F1wZoC#8!*4*!Sj8wE9?keYc`W=pq0&usFzLXb34kO7@kJSr)!5A{34 z@>V=5-sZWz*%BS}nuB%{9ok_~1uDeOf~JDfMTcWa5CcfLB4jjBl=gY(*)XrY$e))|1g>LB`V4r;utBNW5Zo}EbDufhD!Vo zNZHCxS_?)FHb@+7xC_N8F%QHKXkv~23%NzejAnMx)S1Zz(L=Ji3j#ti;Dk2L;cgAU zLFHYqe!jwg>ux$Wsq$`Ik(hMg7~mpuRZ>EzMK1aS{b1=~^sBTXN|FgH8f{pbzvTs(!4>GnRZMAQ={>x(aC6qY$24+jVXU2c z50OOl$if~M3#r2r8I*#80AG++rqpl-7eq@owN|K}_2o87GkY6?3vUAzqJ9IJ zoVSMctjG!>w%X=M>l$w`E92T+t|;FcMC_e z3-WZo*m2gV9nfE%N$;^15E*lMi!3i}`gu6EkQ~p1+-m*ru&gQx#D%0gjAWT(2M~no zzgfIgrCMrXxo8D6!ds3JwppR8{+slUrX(GP>pY{W?`QOKHxNk>j56t5X})nen+f0n zNudUw8jTT_r2)(9LQiw@KtGc4%SFcTNIQBpQ*9j*PSM?#WKOy=5onFABllvRZoCt{ zQz}(5_F9KJ{qt;iuM| zE!JrIaySYr9#RZ-oH4aya%f-yQjs5XqvgQ_8GC?%0-#~cb&36I@#`W=wyLvT%l)$*bYjhcfWSv(GL*|{mZ_u3l!-*7q8)cK zx#;=-*gQz)6~;`4y~l9NRvx4Z)BuXfy9rSUwS;iu*{FAlawkd6quj7n&sz;%o!qRS zK?2ZmE@Oy9`Rl=4(m%y|z4Td##ciY;q;VWgm~=T|aNraiTaZHjoW14?n)!CnihrdU z3daLk%#&Bc1lCK?IDN{#)OEcKV|OIYyr>t646D_XdzRWa4jb4B7eNEXAhpnqyM}c- zra_Xkvib$%Pc0qHx}^_nOyV-i!zlY|Utoj`1_3x{G6PYu?irVH_Ri;$1S=~T?`~AW zWK3}h$TaTkgC7DFhafNn*|rQ*gJF~;v6}Y@sLNP$h?XEAJOY&&3;og&IAKMllR=ee zr22N2Fj5CEL7KfLyWPdB-ZR0N>p=5%Q+g_lwM4b0XsO-*6eI|h%OPjK`oK7~R$n!& zW%Y|q5k_tnu33XDJs4!YhZ3?isd~(2Y|LCcYLs3Gn?t%gCez*WFl zr-rZ@u@Zn{2w!HXsfR*otiZYi%dJUVp9U5UA$K{6p-}|R1QNJjSWBU-v7r#r8OgoG z<=zAvYDo10!xN+f$}iw(3~Epx0u_~C7K~?8dns?Fl6siPqR=#t&hMr9hu-!;v@OCp z3p?oFFhp4Z2{3g~*B(wNHINn)Mj@!>XxD;)rNRJ;VB0&9uXF1qhic5!`A5i*6R97y z{5OR*&TpqPr6n z0a-LsZ6|-JYO$*kH9G{wky2QYHe8r?d_HLd z++9cvUDN3i2bE4Rig#!(qlh1xg*lk{JLdVe*m%H6uyFTqW+x^$JN9;_7kPX5Vwk80 z%t`=sm!c3X(~QPaL&!k}hR>3}aD)r!CYA6QRAJ$FseU$gy{S;`w-X-syqV+6iC06DgoZIV{%dgj_FaK;Y%F)u>cE431DGphz zQwW#gx2NdXVC^|rxm?6Z*hEvH(gvA`?Yk^h!$CcPYqQ0`1Imz59Z+V_wpiO;mg6wB zZaL}9kpzcciKmK^)kYeo!T%n?U;FiHy$#(t)t=fcD0f_hLTK!l4ISVe9g} z>XJNarIE+g5CnVYv>PtTx=O$+R>MPAMI3u2RvX7Nh8j@0n)d@ziyf9M3{{zZsfaxXq%a7nwCzx^sPtSh{j3tW z9{}+}OH2|r(H1d9nD)>Vb(_>hqR-ttA^!rDXFT?dY-Ed4P2mmc7vYOlC1J`=s{p#5tvVn~lAmB5xLPW)3jRgs>_`|oZ9p)X+dHDmjpUSp zC8+9^%XdU9f{=Chj_7&(YTABt&2qc5BfS^kQVco02n;Dvtqgd<4a3@wt?X#|<0`t9 zi|bNSLwdrTrgzp74vLUq9QVWr4rHcahWoF|MxqIWFjn3n;&_~;F_j|kaJoxgvM~^l zu^lN78vzPPju10XANs{7ffoW$97Kz@z-Bqj$JC_IYBk*TEfuF)$snx824_S&>0qVH z{*fP8gUfzr>9U^>F8kJUUfV~5^4jCmhAbdGtn)y65`CIfp9|PYM!XDEBc-79xL)*C zADLyT$w#^+?PKh_M77`I4TPo4Q)~W8%xAf33)lKvJ4ws2M5jossyR}Yf1CUGRLMgz~%l(&x*r8KeO zojz-bebiS#nzReD2OH_uKGH z8(?hCY>d|3S*|N>XY{D@cv_mi!JYjNjeXi#JE_SSpwMKj;lWJ02ms8f&G0Jf4Bj_W zXV@JZr!9Cx=c}9PHd5Y4q8jGF52&p zL@VZN_<#&MEMeY6e_%P_-uce)<=CYK*cP2mDw!|~b4r;X({&6MZftF5aB$|Av}l*%z_B$G-9OkQt}sTrO}R0UU6%P>T)#*^El0AyA_2X&YY(xzcZ z1uzCMiVDlWEAiarf_PTs4pCP_RZ#HWX>m*yfIUXWvRMmy-VK!46=a%#Jt7stG=Wvf z!EB{n4u8l&B0ZHoah&Bc_KV6_Ebt3egH2#ghF2iGVV{6`>075@=Fw9VsD%G9U;sQ9;NS0Y4Eob=YbWR|L8c%LVwXbiPA} z4kLg2?@c->-ot0b@qtX6F@`ay%a0KE=yZ5F&JQEya2$R(>3k&dAbj6=IwD>!23!L1 zw;Rf{NL}6bFF?PQr=UjIQL-%WUY{S0_sPoDUE})vTdt!P1#GS#)biBKz40d~`d+bo z)e26!K5t%^KVgmKELQFT9PDD!Ni>IZ$!q~q{fl+i!t?=f%m_3lX227b`td+6MQu2T zy*)h1IVZZXCdxuUM#tqqY0{dv`onndiv%fnTH60kD>ApTK~5SOwcXupuORj16qObBos*em#F&E4!Z7$rCR8=DDczh9Rh@V-ddWYtI|7h8$wt$apM4 z$nNGSTrW+99ZJ6V+-c7aS&r|2-C?bVC^XLRyc&(d_Ndge z8FQ^D3y*{sYLjX*li$o}a*o#MpJp}ueQo!p;rtDH*d*JyyFB(>GQ$pcumtdK|A;v$ zl;}mXwr78+-BUQZ$T{l!Mkz}bw9WQArWOMp zvfg4bpO6m|GmxS9#1}_JS$tabU1!GU({{Wiy;91M4UDJ{n>{8RcWJOo^mO@6`r^V+FXU>cd@lzd<6}dCL1hpG7vnFcU z%$bqmzRZ`@H%(M$hp-6bvnd~~&&%`6+M^ER1&u8^4cj7z4lF>#kGdzt83fU|xZWE3 z6b_;6x3bx6Jv$2PEbcn8%GNidya(tNHKQ;01d1sNutLY|^|##yKTwHX1%d zWMgAA^t1sQ;zvSRt82MwRwv4M9reL+Nq|-cqf$HVmuVDAP^1*wPZyRFRH`c-Fv2Ms zk!+wE4GP8QVL66@>UN+Nl>o9VBI=Ses=8G2&77t_&s!nN5oghL67_nkdn~aPB1jhZy((VjQ#f+inf@g z<+18$7`C|Uz#SY69Jr%9?VE)s;Pn!6b}1yEr3yZ=NREzR3KjEV5~*w#c4T{DF4T@IAbX z70HhcT1tMnk0gI>B>B^-Cj02W=LBCJNx6p9pR6Tq3vKGRMr$?1C17{ zAO|(n%rPV!Po-UgQ)riZY}zG1;DKAk{mfM-?Q#g_pz^T;OW7B^ajdGtl~qHPy?Mhm zX!Z)C8TyE94Kaw9i$o|Xhr;uQcU#ttzfH@`18J3IUENEIREf3no+qO-8GB7O*5-hj z;0jscO0xl1^Gps?dww>TdtWD~m++PgQbLyn6BZk3_bg*}?1Pfx23JBq6QT}Mz#DW@ z9)0}|WTLG?a$`0FF=XFeLy*bDZIfyDmmmDh1Mht2haY_N0j1nYU9{p)f9`$1_h)x~ z?6rR#d9nB>0j3qN!!cDn`8vFn0nr?6->$yz3dMFyn!O4wrE~E;uaai6C0%?K@}bKu z8RVvkssd^Zrv<($o1uL4`qB$-K{xI$B{$RQ3vRL9yE9AMZf3+AZaK8{;rG1ey>Ix* z+QE+6XQD^%{n>Z@>^uI-XMis)Yrl#f{yPFmXO`Ux>a_azYtbJ48<>IeC?S(uV~iW> zAG%1p4&(fPl02-_Ip+5Ee^c<8b8ylD{m!W0VY}>^nFzuY9W$L*WoRAhtmvVvbFp{x zN1>b8yU99t<=e5@_F#Z89vk&?{`Fb9xBqhql)`~Fu6tNoj+p7jfy6Vm7miG6E_T`6 ze~_hTxixZ$4B-;EIHKK#|3oMmSC#Z4OUHcwX5~uWB{doR+Nmh{D*4488{=>$S8d}# zegss_cT)K`n90Fgxp{;?{htc^5&EMpVe8PdEQ+a$y>$>2`{3ayxc@UiZj1qc)RXioI&AQ0yl<&JYdb9T$qdo9d5ij%KRAua{m?Ab?l{l(f-vx$mTv6z^+PqIkR4G!jv5pfxEe?oFf+ zQu2Fi!c-lz#P3+*L~a)C zLVrKymWjWF48MW`&c?aHx_VN{`n&Dtm-KVLe(p$K#XA_q8X~_?KykicVtbsMj_y-O zU3FyLpz`pVALeH`pkM}aGnKtkb+4uFUXwPVLlNXy;xVb>2+D05uVueTwwSlfVzdCX6^mL1;X<5lI2E9ThLhQ1SSwjuxM3D>GCXnw-A z>>!KPYOxMtE>ii{07Hw+Jv~h&q9&SJb-iqZz_DHcBf&)85FT0xzPvM6=p&Gf^VdH~ zia2P7vFMH!LetcgsULJkZsG9K8L{@!8TFW7@N5PdbVl3QW;&xh-cmPAXFN_-(;3IB zLO@>0yoquz$Tz7j70gkOSwoW89h0c8+z!=eQ7t!xk&31;mKAjmAG6ogL>?5zrUbj$ zOvqzF?7&TS|-VxNDKDqyf!UBP0HIp zQ&4Y41?t~{15Q4ax}dxOQ{u8!+7#E#eheD?J*ZTabu0SK#6lpOn^^MW3(?g=$lx8R z7{x-^9=y>){4>RQ@Ec4I8q~QkIj4dCC+#q@DFh)=#X>yY6mhi5d>RGw5fRGY7?_Vn znvsyIjlOl5j~>G@a8rz!k5jG;R(ak^=5w5?#(c)B8eFn^Fj(o(3|4hH2t8(XX*3NB zW!Q7?v#e;$M-ODJmKAkx%twQ!iGukw#C%d{;v0Z4F2q$K%;|+X!mz?~8uIMbbPUos z&(SeR+F)-y=g}&J|C#a}XYZ)%{ZD+AIQ!Arq*w01>=t;8zpyGqxeY=Ti3J|(u?bOr z6hf5E?vx6T$Asu{su~`TS5-Uowl{Ce@uKrAo1mi_mk{M@67be{p$0U4KZ#xmax>%3z-|FX1nmS&sP6eOW!vR zqzyhg{#+g>8i6x+tP$K@a;*=Ilo(8vE0`M#=TFHM(3?bHK_wZHw!5(!u9EOZaAQra zI>8lG)rmXZn`{3mY=|9%1#yQS<;ME3pji)$fmebX%e&j_T8ZkGj6rpEKVl5D;?RT} zkgXJ5M0cF=D52@RSvNYI2hld@IjrrtDZv^YMzAK3G*1MTefD#Mbp~r~z#mpP3!xjq zx~0?lQHO}t0OU0PJ&nJW_4?1XE&IMUiYB6C<)7C>!g#zo_FQY%woU!&xNthO@x7fXt0 zdmcesP6ySHwI0p~nA&l+qGP>p2Q30_j?b)sC?3-@I%2*$a-p0KM>2@{G94LM#dKnu z4$qAF3f+TiMo^UFzz)AC4(s~IgVr+zTF*>D>tEK&&y;9A^Y=q*L&yTP6?H37o5Vah zZtF|(0hr^q?vC5K+#|b?pgcdD%b`Q^SrCR%!FInafTTJO!;c_fJrq{%ez0I4$btz=mg!;#C` zbO~)2q*PVeH5(k#uE*S8ubgr4&sLAI=mU~biKvouptU3cxX)dSvmk#%3XVb~Bf*Lz zEyTpS1D^7nBwZBh5OHrIHso%SehsZ4N#(sV{hA+zB#o`q;>u{(i2~So2m0TjzUGFZ zH!(Sq?sb%~v`@t$6(-I04r;_%)$Gs`G(um}fxIs?l2!Wht{CBpt`xEleE<+Yod(Za z|JTenLIx6t{K}=6Di6=l*~(-GBF%tVg2-gvJk*4wECU*7uObA-F?Us~pWOX%4P06K zA_vpJ|AwzBYTt2)$!P_g2eJS;dyn16%$DD{OiW-rA$3XK_$;=>Db~6shDV61;E)+5 zIFK*ol8N!za|OCSbDKEi*Y|6x#f0F3bNOwb zf=$ip_dF)}dIuu}gfNBNUFf6@TIPT8!>p!adqf^kc~xhm5_8urBJ1>G=TgH9gIyu#r~hThA!DXzj#;>;f{7 zxdq7F0hpyIIGBm20-Cer%rhYCs4*d(rPNSDYCNV1ni&8)a4d>ozG;83&mFH+9}Ap z-YPQ#5|cB7kEAjorVX_z6M`}NP#L3!N{+9F+8iG$%1bKFuu8|-%8oHQ#+OAckR2nv zU`#Vx3u=DZP(E;Z4X}!)p69^e3VRN^rW3d4SnpupSm}(fH-j6q04Hj2W~$&=siF6! z(-6;u91u@XgA=Q#QaJ;wm6Af6<4onALah2q44C$Sh_zwF8bleW7Q~W}+Te1W)>o3O zH!gt*HR#|#8r_9TrnXBTok%c$rdHEFKUre$H=h}u3@+C6X=NgJQVa3YAx8z`REn2A ztSOQTJ6Ry9(?wGA4lpYXAU4Faz)+1dD#%RN5Q^xJHj?NQHT>~_kw+FMxJ9yQhi zkz-`XNTp>KDBC7>sKb zZUEyFH&_ef(w?MM7}rk<5ZV?{Q!*na#PT9Vr^NWZX&oWqZhKV7vA>4NIak-fSF! zU426LUai@KvKWy?ro#kn1-OihR4B>>huE}kq^&eF?&st@S zW2*2s3Vo-Nx;#~DktoL?_0{;J_WYh8?>8-G74g@ZCjNpl+!+X^;YA z>d}{qh992VaK#v&XgC|ugwdV3SDy~UDFh9!l`8;vivMY#HePE*Hpbu1AE|jPwe~X&!tc3%9p`z_fpv~3C zXMu(`>UI@vr$n3W)3BzhluXPnC?(ToXOiSS1>DYB?z4HL1lvlrWTN3hEm^H)lhR{r z?CkpXil#HsxsG;r=- zeSUXLpWlSuwnk0vUhQg`NHSXsb3LYcEH$zrFHe!1W)6^$o3^SWWh|R*qQ*2wO2Zu~ zfY>y-5W4#NOP#-v)Ctbdr&a14OjelSg|}C_w3*^H?LrtCMc z;mnfN_{J}27(L*8JY#%<6sJfV^->z+N7OD3BAMeW*~SS8o3VC3p>{p_W5V$%AMuHa z8)DnRGxCsHT@x4o_0_rfg=^#->UI?_{@G%7tVUHvIkP=6=~v9oxcE^u++;a8yz99u zxcG?)zp;joz0M~lcg7lCZK0o%+!<^6j|(89u~gZ!z8B9n>($xwH1Wgcm4HK!8;I9J z&`*c>QNODo(XmPT1jSD=Kf|KG)D*>(aZ#+qqWf2e+`Ur-+gQu1p^+)N$&(@@5857y2fxz@xHzpy&w9$zcuj$scS8=Jql`uv`lKEDZN3YB`I1g&GDWQ_{f z!Q`L1!o@^Q;nF8ppB6L!ufG~*emGXChIVU5vB+8W71!)=)YlYNCO{=eecfUq{OlJ= zYr+4efGW120;;Sw4l_c}H#u{gg|n$fk+%>73sTOMc1@xq>CH;LsAt`6e!c>?7{7|` zq3jUb(_>4g<42KBhmB6@XuC?+6Vs1V)$$s~tEwG(3)@wsUFm!UHLmR{T$$5y{sv9N zcdXbeVaG~QH>COdj+L@5ZB^3zM>|&Z4Pl34@KeqLEpj9jTuRYsm7oB({cmCyd|Av7 zm!jbFDo9iyq@v(a6*N_VZ%hUMLj_$5wA+ZB^@SZOC^QV%IZQ12DMFIOH zU*q~Vo1$ZZTfMJLyvibK(VMy_+#cfpB67w5m3wBZ>LG2NH{$XCX4!1h~DADlJ^Mn4WC^<@&qU7WwsL7@W^qUIktA^&I6s*-c&d4Jy=HngfeRCY1xWV#| z$C6{#J(tM8CqgwZTh9r#Cqm_{DiLYeAR-m7Cs_9atj+A{Wj(>#G7`vU_M~Ql!j+_E z%Sf=KW;4;%t6uDK;YId3XbjrZkbmBWVcZTKP@RwRHhNm0UKKIuIv~dMM1fJef2ww6 zp78a_?JL>^;Z|vP`-*e|VakkJVAzhdf}vpoiB+eM600nu>bMy}Qx1BO3zwXfr<7RL zDiW)-g+N|~@ocpJMIzM}Ke$NTHNTm(NtlL6Mu}C$rUD;8*ejz4YdP`-Zov@?wpYgT z(vq-O#&7KS1$KUM9QzoQYT97gM93cIo#TI?JtpcQ(`;^n2k`1k{V_+x+mJ3spcJLgFmh=`-H>LFP#9)U;IdC@tx zhD<}{R-)4LpmUB2ChgG4-=O@}M&Q$->`f}G2UZ=*-m0>KTZghciuVF+!=@Q=SC%!8 zbhIF`oBp zgt;oDf)YyVp*Sa+S{u&JAI~oVM0BOjLVgK+CG3sB#jlhtn7j?fKPG8HLei)@KnV^} z+GLsf60LQPB*jjIkkKQ{Vi*!mErkud9qAhUEZLX<1G;(gmgySkm0H{+f1g0fqK(;~ zmQZi&O8(jzYBew=hcNdcf6b3@91Cn2FhVSVEu!0j+XxuiBC3gxWqH{uP(wVGRj8cw zV)6^m;nYAxRVUOblLua9Z$2aXRNiX4P^UtVd{&DSS3baM1#Twd%>N7br+M0_ zRRSNxAd1$4g2kDv)z)aeqF}*e!ahoiTuG%x$qeb8H2@+#T-d|>hly|Wz>!$l=)svk z{ef+F;v2@M=W==p49a52s%6v3X z^pLv5;Mm)Cbw0m$kg(B%)=s=H6OdE8^6dcL2RmQvBtA5&u+anMDs1%N*r`CeR%RPL zOm&jS5hUWFjG3^}V_bI{-{>*soHle0?(9{LcL-apf8(pd7#8oMR>Ll|Qtz1sk^e#J)(L zL)Uiq3}hr@9_o*NNu2yj()k*VN@X(AlKuIEZ#-<@AHh1~DD3rKsq%g|l*IiXk0&30 zH1YGf-oz#sKR@O_a0s+J2bA3ke-dcGSL1*B^z$5x@P1ym#8B-L+DHNATX{=@Lq}8U zm$n8i05XYFJ_4;wPo(W1#pOxeYF{fhND6(XxT?6u7hPjS8aqDoc#!1LAkH;PKd&54 zXmW~-_qhLKiDVyj*iOkG2^;DU#VCua(f~NXW(=2f2G9*dS^}3~N;Cv6fl`{Qrp%mR z`MLvxm69#7T=;nXH#Gb!U79k!Cdxd-Th|AU7-4o@KZ>qaX(t40CRzXm@5biplU&p!ZFR&^`MJ2a&z8fdJlDx?Ru04# z`X2-u#S9A+kP)={Tu&T@C$MKFdi}%Uc!9CSRE4>Q%=)ncg+DT%tUr+6m`K<>;lcI( z`>C1}DnXP-{X;PaikD|<VbQ4YfEiTYUW_01En!{}xCxh>dV2g9oE8-$&<55>ci@+5?C6DmS(#Srp`te_;t zH1qEb9HFHx>A_^cW{ZX7OYs1;eM|a8JV3rKB#*}fM9@O=SUh0D3&|JFshWx;XuUE) zZ|q9oaR&~9Cth=yGqt&aA@p~0eVESEoQRF5|6ux>W8 ziJVK;U+>$N?}&?iy8x6E=+Vv=5(bK+Zy|Yq%tDjcn*oan=GR7Vu+ncBVQCcU$xjALdZ^ z561(;kI#hRJQ9X?Gz|CAF#N}WCmY=XrOvOgJ(RV)XS?Bq_Y7%krPD3R=ADka40OPdA9Q*rdIfD%u7a7=`zR&nKa|QP^q%eXSv7K#@LRQcD5}kdnf~b$hRVZRpc7xAP zCFl#Nl2RF(`615g(0QFG1zsNKe}{>w0drDM7k`t!X~0=C#YaJ#dHE$!^eEnv4I85g zph@c!>I%cSUM(3T?%)5nwA|FUJms;^2;A8IVLHLsWF(vUCLu5CZCRczzUmoXEnnm@ zEWFjXFFVR)rC{Z*XB_Jy+0g!Zwne%e!+76jg~Gr#OBv!i*O7ZGxcG~yFEbmtoT~Re zl7_xSq|U+!dx}gVLW|&oMGBade9RngA7TI@e(;RoylLid7y+N9D87}h_<(e0(VWco zv)K$>K#UqKweuc6ypFJuonau%28L}I9*#{By<90|hjQ{q4B5SB z)1e==f<>L&@0|Oj9f{bs_|^8E5Ezvne2eth`&9ps{d~WE9{n+u-pNlX!SB$O&tlxJ zD`(%nNmsu8a+|IkHgv15ynl6+$$ zp1@glB=?3^?he;GxaKfmxQ?_|-M~ZGIG5kTrsMnHbXevZAJm{I>TeYe8B^vj4BF(H zvu4=xPS`VDF{F>^%8*!I8`Ax{GNk)-Wk~mO6|Enp^Wp>vJE5C^$Sr!7>F8g3<&bW_ zWH37zYF+D3kR1HDUyiF+@x$i8Rh;q1W7}BeO9f9Xmj)JiKQ@7_2^cGW!BR#2ZDNI+ zO;Yd!+t1gZ-<-m0pFGgft5)jH%8%HhSDR+np-n$MEx!27=-rG}i)u4xQElcds%EZ5 zmA;@wy<1lxai^{zj7Im1_B)5QTUg?~+zMC^Re*Iwt9IhRI2 zVu(Z^4>2N{;f8Qf2{FK^4;_u*C>l%i!v?WiT%My-vvgK+uu?)=DCHz(1u`vA4c(zA z5sFVOu|hMx8)#87b){^dx*c7S0u0)#JRrhkw`ox#>;0_Et@Sr>oE>&`B6vE);Jj= zszLwypx6NSBZ(v;Kin&@0P4^M_YWq6plz6v^PpJ5N@W8@M{vmB`|86{{yD7_dD}a< z{5k+9PtkKN-=h(IsseUBamfx&-Bnbfs>b!Tj_4u=(?6(~}@|R5y>nr0g90oRjta zM3y(*PPvp>m~Z}|Zti|-c&YQn&B=zTRs>T3sAfgzB>s{d{o^@Dgp&Aa8@uu4e8F)O0Z!6e6cedEOIwmA6vwPxK3E8<8z-0;+_h%d$il>UX}NmDbo zq*x8l)cvDD{X`8l?06#JE!;hug0j1T$L%acX+<0zvm#g{Eqq}`++JD{Ae}Yu%DJ%8 zyZ^nmq&G*z`Ewi|7(v?LZZ!@m5)p3&(pV9MqTOXBu;+>(IE z%yKY`;m(-PyK#R#BA2my&0f$1pc1~Frp~Dt* zJf57ia5Wi~3#iy93rxsn+dx(L49#AUV-HHjLXet>w@}JDN+WaT51w1u2d;VYg={#Y zTL^ezF%a~XMWR$QD5QTE$^5P5_I39kl2X7c_)X2C!)?(< zv2Qd0lHP-L;kHHj3Ttboh3uKr{cO^Z#Ma=bz+u}u!eHR*8{496&D^sS8 z3M`35Alx&N3xn-ueg;nj+GCRF|k#?|q+J$8X@zy+= zFKCzrbUG(Hm}Rz5wC|Q#Ifn7R-7=#rdcKP)YcGm+U~6bdf*|cKMB9qTe4L_uyp@zJ z*>S)=;=-_7J6H^hBT}ccBZ{&Deua5gy?5BOf_Ya=Qc$C6~@Dm^}iBZ!w=4%W>wS z2zG#Qgu~#UoRD0nKohOtb}4y+GI3#d^^m+|(PP?D@)A5@!P8i+w8JM3p+A$3tB!(> zJ4kJMKFhzp{IAvaP~-KlifY7hrmu!>#+KnMDNdMjp#w9J#OX-X*fD*`7?`6dw&QF- zWbJh%p)KVQ_25Y2Pt6~>EyB)0rEp6f-4BgoinHQ&G(Y)U%-qH~VW#>sgPxD6Zl(Yx zz}?cgQ8cDGE6gR4?MQ-4LVgH0G=uj--fgO)bn(Ni%>Dd8QyrpCE6gV&Qx??2Hp;3$ zA-F0YRPUgjTotJC!BxQrZa_#WNNB@mZ1TG=!`qy?b6#pEbjd)WiIs+ZDgc-+c>8Ox zOumL224=o@Y1wK1X|(3ptvB=Db1ZkI#J5j*5;H;Uy!hkjiA;Z6^f6Nt zw?#)#{~FmG!#_Ej^RYJyN3uh~y?Cs1VSDcy89}&&fr43(3xonR1NW_&L(P3_a;OF0 zn)%c)6wQ~0yTyEIe0$P-Y53`Gku{1t=8&!|)InYG3w}|3fE!Qh3T`~1E4cBPuHeR_ zx`G==btO_{UbWK4c6Vs)j&PMn&lkP$vE6QFyDT^w$PaRdE_+`7P;j@k6nB!l%@X5& zaRqMBqhT+;rVG!E-l{<`Ni$HHq#-Vo6yjz~(rj2Jd57+qB-@A$fbun&Un`v` zJCB60(|k<_^(uA8T63a$$hzRD{R(wB1_*X8`+6Wop`U2b|D!(1RdR1iE(fegea z()>LJFK}2kpYSk$pOpkJl9hbWN`j}!O7LOuCO9mdSBciuKnsI%Xm3e(?~LCTKs1dV zJf`UZqNn0{5>pT-sCb^%$`tCs^R&KT2J$?uoAf-@DKyVh2;Z#qJoQyA>yLS!M!=Wn zX#{g$&yyL&t9YI;j729E&lB4q3(ph4*%rM$n5V3+f^Rt2BvpW;e5zW=FH!=80ncwz1e~uTwow{snjUJmGCovK5{hi6n=_$n#W} zVv8yqhKA5B1}P(}AYOT%3hFf~r7fdUnl7kx_s-M^8F`M{^7e}7Nsuzn(?dUY_(VKU z|KlY4M2N+&AClW~bENonBG)a=fQk9}ck@PH$r^|)cRUf!UL|}@0(eRn7`qmYPLwxN2}UPUP~^@CAqV2Q_KOb}>Z|Glj_)KSEe`|t zuNp9$h2(|-epP+xQ*1%mGuA*kD{nxqR{=73j`*Z61sHUR6NT1xUvD0oPoG-1;W^ zDU5`lrSl^^oQn--nd~s}d4hM59%FMnO|LHoOdvR1i@yG-%?xDap-8 zb_}vcpHezSdL@NJ5?iG_CepwTsbg$`gSxW0PG1J4Wqk^iIbBOlE~tj(+z#_wA+i&n z++pPa7(+BpM>8-8j|PQ#BK4{hJq&9oXDSUH;y2yI_(WDrSzs%Ux)+@!+P>)IGK~8l zkCR1Jv}}f>yLBUi70{$qH=|Q{iGx624+Y(!2_B2wDDUZ5cl%QS2VyI z?XL&X5xAwn=5x2-;g@(tp+3J6HdV4_!s zTFxdaX9N9E%xrvr;OMi(V-s_|*fa@0f0ebTdkLy={;E-jl{S38jcJBPVea@E)d)Lu zCTlofvyUD_MswmPk|6!>gA0)EBUUt;kuezZ{FTe11a4^65hOQnQ^=^;s6qwdS#(R) z&~{GDc2%*`y2dJ(Agdh#KYnxr_T;fVU$k80Q#iIP$T0!dobEDd`v9!x3x?+82Ejm7 z{%#$M1Qepv2m}nzf8!wN@v!g_%tzfy*xo4dye+z17-f`Q0d42t0%k zN>|Ws-~^{dmubh2BwBi{OSFaL3OFF+y3&VtwFbK_+ReH5Q`IcKUJFhMBq(!Ym|~yC zMrb2MVgS*It_YbyPpP>3DB8z%*K$;RSYfw@bXvUe%;+-b8CP?m(JQ&o#T9yNQa**5 zNc=%gmlt6^6Uwe^J-%v~FUfxcMPee%_g1AlCyT6>OqoQ9+{j~*3Xxz+`N7vxSVa@N z;0LI|8utGqI1VjjiR5(|0o9QEH}I)&BQA@8GH(GW68|HYI|H9V$WZ#OfE2v=@O%{Y;}cfOdFH@(Dz&V-yz&+IUKEUOp@@k_Tr@E%O3H@Z^?O5V{*;*j3C$waECg9piZF{7vxxHpFVDa3 zdSNGxe;MN7}GLV#6Z zKgPJJsn6#C^ThQwHpsE7VFYmV3&v%#+zr1!8br({JFR>EgGB|l zW?CWOv*8ArW=2R#H)^IY{fz5+546R0c!48*k%K0z$HVA_75x)dY7xKN)Su8Rf1`e7 z3Xm|QQ^7UEVpC>qRzC7dB+(5E6lrhCa^OOO#rTLNccjgN$qT;AcQZY5mkCIG)DtvQp-u}i#DNEGmID$%(72*KqquN_U7{Qj%ITs> z^tqjNc$-sYV3`fKX2jqmKf|o#7>W*{db3%(7YoMm_-dfx6|Gh1Jnhcf zYRr(3Ydpg^1&y_ARc5=K0=L?#5XnF8ibxYr6nqA{4$2c-opBgJ2KsD$n^3?i7*Of& ztO{@uR#yiracqaONBE~ z=D#MbwBA2QZC`@X&*frBoy$eq$=?`R;_9=g-=R%zwhw0X63QqiK;*w;-tD}B3fLGnkPHc5K;T( zs43Z_#%K2nCRvP8^3A$%Oo6h?xj{riANpz+{9ED?W?e%oD2n`xkY?Fz7W0_*3O44* z$BbHN?w8QWWDSIxx~SC9`zFHvs*^MiDDxiWSsI-SO9=|@_?n;ps12G36(kKN`_*Vu z@(m6Xp7HBe7R0Pk+Nk`?5l?)ZZP?Ohj%M!4X7rh(*=E$>03kkdBniyEa+s^y*gWbM zB`GSJM#XhIH_fBN)opebIO5tQHc~#8ytd&q!E!M&-pee zsvhO+)>YM0O=0kLo-m52q?DiJGzI9*ZV1X#;PqSooUjv;XyXclJ)p7 z{gDr|d}PA}GMxQkV4*J`CO;~})V$;`8Ub&0YBa!EvFY`~wZF^N~17Fa{l{X#i?k0qQ3JY5=H0 zPZ3@;WI|*>1wane+FgPwTKqnM1yqv)s*$WS0I}4+m^G~})ozh@#h@xU>VzSOs$e_~ zs@8==H40FLF&9t;LE`>HN#_i_Xvio#NurII(z@%c7o#QN!1~n6YGNbQVX^dvaH^=v zOL+>#pFq`FTFUQ#E3020omf$`1{fA6TzsbCryKOmrqmEu`{zUF5Uj2%8qL;Bo09>+ zJ@BnY1VS5ZKCG_RJK`x3ZCG1|G)B)v+=42-^MHbv8uPJXj)a2 z^J=em=)HFSK3&9t=;Yqjs+z(-8t`Gg*IQdvSxvM)ALjZ=Rb7`qqKhkn`J?*%r2c5~ zeAZS4HtYW3q|5P2)lvVg-dp3Sv5%@%551kLowbcxW(9*OR_KRSwUxg`7ZBl?u#)j! zsrq)W`d;h2QniFTF+#z;oUp8fO8pP0VmJT!HP@GIRjL0`@4rMY7}-NAnua0B-fGpO z-gUL=W>9r#GXvWp3I&Z-iY2ICZRhwAq7dvpl| zaX-KNza(y4RyMjlqIcGdZoh4^Evyc2?sxUhGe2e)2jRjIqA>Xy zhc4OCOoW0xG(|i`ei|AO1xNW2da+;b!)O}w>U>qZd~|A;+Z1FJ$+${H(3IaJl?Wu# zqzjGcM^;1vg}u~3b>kuoAJkJ2Pu>~e#9|5wIoLIzjiNAeD-h5FUto?hiTEimxMPeO zEMCS|;Ks^9C=NZ6d4Yl{N`(kmmbh~;_D|N2LVCrJ&`83NYQ>OPymCloFE*so4${V} zawImg+) zgZCDWFP7BQ@x|(LAYu>-C(BEJ_VG`?{Vk9G?g#(UjxV;iAOg9#i|XM#)MRuXs;bkR zPD-%X)KGCAs-R@2*}#?Rj^Z_PJuTfZ6~e<2S3M6Eue8Y%gQxjYn*tlWNU2?13@=D> z19mF3)GmG$urq!Z&_bDrq$G7gqFrisZrJp-u?;YO9%@%OYXZEG75>Pd|lt>Q|eD=RaiYm0VQ9*QdDE3r*8YJ(``NZH|{XV}wX zws;r-s(<)^-(i2DukMMV;&JL63kU0dL~p|JpDS<>*7m8}4o3?S+dfG|l^*~?myr0vRAAW z*`AJXWgmNoT@$0zQIah_PYETRk4c^evV~==iRA^x zvnpyH3(e93&1x&rEPwQuKlQqXP)y8=u*_5Ea!BczFqR!iIufRq!kC8R>`hw4N&xj@ zlNM;2(BfI7nHq(bem9rcJX%0|d9@58MH@MrEw@wIF-OVhR;n*dV#bqMut{q=mAzIy zm7Tz%PGxWFRQ4Hd&LJ<`Q(&cXU8l0ol&7*|7h2PH;Jd$6iCKCcsKpvBW*PE8 zZKtr6&Xk#>ldWiYw)Jp|C`QREMZAu-mV73}ScrJfYn^pKXw+4)tkHF(Om<**wBqqm z$~eH)b4B%q6Spm9%h3@gTeU_%o2;Q86j2o?mX2a73@gr8-AHZKv4HHhpBpU{I?k2^ zZtc!3-Y#rCPy1+TxGl~AD2GcfKc|rSaODpx!nu~(s-679i1p`3Hy8mSwYBAe-akvs zJ?$!1&?Cu^G<8yB19kyb$y$^YEPZ1{Q*)nDoZ|d#uRknj?SrVFrWTAQX5#ud?M};m zRPaIK}b6s%T*v%4m0=zWW;pQ;s)^BKiC;wh#Lp0E;B}2L%Gtl8|sZbRC*(+?7CsI=&ea_>T3vHUO;~~#>D3U zOJ)wk7Ke01a+9$?^eg}Gi?~C}gfY;ht{0p-5JH#&hDnuNfRP0W?7Lu}e(YskTHn5p zv=tfva+qR7dWu6i#2>TTiIk214c0ZKnU@!=Y%P5bp+m|P#ga{*)4$5FtWr$#`i>Vvl<*}9UtpEAAi!cr? zt$PuHYoY+q#bjev+i;BNo@Jb1a6j(jEk~9xv!W@98V#K!m0B^P6^&rB!^Az~Q8Uo% z#mnXJeXwEpMS7VC=Em!oSI3}cEW*ZP{uFsTS8dP1(KHZ`Lt>_rKQT6?7xnOjrl7Ji zA(%aD`KtT|gAJl6y$*Z=9}LPoB)eJ1X!91>o5gafD#?-u<-=3Fu9JZfW<&_f7bp$N z$Y2HB>?47MetyU}tH!5@f*e{yud~UDhPVW1E?y$J~ zr<0yMN)zd?tYEd7S}m5m7;DB32qU6bHlrZNWHZ!?^74R7yy@^d8HYg4eSM_kMxL3e zNiyum873CxoiP>R)XMUNxJA{hO4x}8a*TDQBxOk1a$o=iZVt%-huhz)$;4c0ozM4@ zmgfNLoN-Th#UVXPc-#Fdd3pjc$TYN?-(dGpz5@9ZWrT;gN>SC17r=M;#& zvz;U={=+BC3?<9@zZ&N^Y3+p?zDv~K{eE=rJ}xA}?t_btqnEXy8aicw zOJqvFEmUNILdU<4#(LPFm?_vr>3VWIm912f#0+k6FHL*u_W7O#c($YMqB5RJe66gd zx~r@#tVfy8=GYU`CX(z$lBsRqsldG1aYVCxGsd(9=qf_Zph9XfdaoP~A+oppLK=zhP*e-TkwBr<31rGq!#v=kpQ zZ-IVyhV7-V#5XNP-@&?;(6AKDutX1pM0sZ|i{6$dVcVMdd&Ei1SuzCfk9je3u7Dj3XlniKQOaH`TU#ZP%RSlT+ay0|Yg*Sz z;jzB)Ix(CkOXL}`N{$^H2wcgSI7CDbBBI>a+TNsy#A_*BmLeV6;8yw8X;^mO7Vi}A z%~aB?>xxCv4Dy2!212mHDmWO00UMgcrj&1;%jrfi{4n5$s6@G;B1Yu`9G05L4@0wa z1t*!2e43U$1OtdxyN>>)8;d zV{oEb3#!KtX*7OgatZPS{RqAAWo#-E_A^fKJ%qEg_ITXE3qm1 zyu=ApQxyGi@&i%F`y0gv(GDtp0?7pFQf%sQ?!*8Qo^sbc1 zO4oo~Nf8+)+9IfA+9!WT5zR}oL|U*N^Vf5b< zvuf6??=jI7nIw$WJ9czIc=Wef&i@$9tceQT{>ebjmhK-8a?taHz8D#99~FWJ+y?3v zsxfU3>EKfD(7;7JY;cEB+S=3?SmbFmoRKVtLc{XaWyzI=fDr(nL6%>?sh)XdXk zzTBr_J-z13Q*Sb?Y8u6z@3WjwG13IIk^T|;w%5qERgV%kz;6FOmV8iedq7E|r-Z|! zQO7|nZI)&qqLRoEzHTYUqYq(4etdIrj`O=m#1U_f)VI)9LNBqs%5wHt!h_?hRyEdZ_L_x>mKN6+d{`%nI$>_~^2(5N-5F;qL^IN|Y*Uh3Ik z&M!fU*fK#(-H7_H1Eu8XF1Q>hH<=K_bIw4LBA}TVpR-k;o(=OWN!-#_eGCC(uJ%}beM}oiKh@ZA zV{1`NICZ($XIIG1sqm)&ULY!4Q*b1A1P5tERHswmM75n?3l*Zev0O633dtfv ztz@IbS~MK_gc@=ix@<=coiaWI6GpE^3x)GVA;TzgbyyjikpdTaBPL^0mrFC?rv@1L zcMI?^3a8RtlmYx3fu`DT;kiv>{w0pE0?K#ed^!V)Y48ueljMa|EVu(c$ zK_tqFFd|k~vXQU=VJkt{Ei-_?0t6_FFb2!E0D*-OAl3>J(SE-7{@$xs)!n1f*e1!Y zG)MjFz4v>+KlgY4{qDWL`}?qyruABz`P5~bE$A-X^O2HQS$!9Hwfnj7`93ZnpeB}! zCf0QjDZNq)`zaUmKfFE;Rn1#Pntu8>GOx)q1tEKHKbnp)I>2Erp^YFSa|5Yyq;;ZQ zSQ#*k{U|~-!hfuHWf^f_{PMIbi|~SeHI`Thvij@igM1`Ha7LJ10p|MoL#9EQ_Cfz1 z1R##D5xl02+>d2Ul&kZPOn3f5h0h-yVg7W- z%!Fq?ra@|Q=x2im8Ourr!JKQe=%^p!Xm(Tst3H;LEP?DWiV_jZDUP-103KU3JF2qo z#kHX2ZyRoe7#89J6y~mQ5NRgqnFVsa0h;H`MFamKBrA;l5*~bxj$TPIJG@UvKI*47 z8(hv6JWN4A4&bc197m5x*SJOlrI~7=(7I3xq_Qosf(RbewAvCY#%m|WP=fuBycScW z0Ba>>D+y^RO5I}7e=y_YPre^p>6REXjxXW|20;TxG8)Rd8uk-H0mwRBXM|Jq2CSMQ zyfD>3U}-kB`bC~CqdTneK4_blI?C;<>a7|B<%-qt1Sl4RTnq&t`5LHAR63X09KMYfZ zLvQ7Qa0uk$*C7yR*?tLyKr=_7!(T5H5=*FK5R;?KI9L;y9FMJlUu{G$n6lUsh_-JW zt>9RWadaIdw&8xL94-i=;kw+UW$lBnbj#Dx9~4;_KoC%sG@_1wrg4l=Fk8-+!)GEI zYA`FGsbiseooNS5Y%v-NBxgcJk~x2MGyB}vY-S~jMkr{^;q15q%7#yAIcu6yxQzu4 z_Qw_wf&Fa>0I9K!&s1xYbDYKhm`T#2KyIZ}Ft1TIa*-r5$&I#VO1CZr57Er_Xl^I} z(OCsXn1z^VkUsb^+wq+)3IDY~$!aC$Vuqo^Y$7Zn>FElj?E%LDfcllS|wO47hp6_F_#;6uFiWfksDNg7!j1Lq7x<03v4caxelQ?&~2 zfm@d(^Fo%U?{PJ$f?gf>UCoGK<057Y^tzKk%D@0>$1LW`#q_YXQk=RQP_@z|%Nt2^ zQ!vT5=_t1mOi*D3CLq$fTPS6k`qoU)v~5*IA8VqVJ4@|uP=z^0sKOtmwzBYwPz4R7 zWIS4fD!`AhG)2G^U`WFjvQqPEu;gRPsCrl1Yt=jZiPcwY;m`lgBJRxJDB|9E-&iKKL)d#N#zdzg%Z%`s6M{lWXWd7tIjNX|6znEkpHot`1h6Jc~&8lQ! zw5a!sMvKPnjCmkEiF0dJB@e$r;zsWeMXAd26PdJ;Ui5^P6h-C&_mb5<-j2T^)`I#N ze1rSn?D5WX zL>Lb+RWm9I23-_|vG3&A*@PI?X}2@gI_<<*4zp4Q&ThR1bMf`s`VXer(oGF9&-)dr zQZ8sEUtnFrC-?-6k}jYN^sK|C!C{+`>h>C4k^#xCN)1jzaj+OzAW-S8R60kcb3wU~ z_izPE7s+D&8lml6asH4H-#(A=Ma|JA3u7^)nj1S5O8Xb-1P`Z&Sv(Rd3+9LPBcW_( z%Oe??+>aQ~ger?bCl>HWcUA9TC*zTh zwS)2OkSk@_vp%!GFtL8xL5mEMY>G3p|kjw7~=Ob&rl( zHuw6%%FS4u)@60N$&b)2A+go9z+-B_h+Iy9;Tf@UllQcJ9jWs>lYIiGcPsdzXkvxJ0pEZHOrm+J=G{k?{`dF?2-WtH!-DhaP5D&l|P>E}jy-e$d0j7JBP>!B0X z&5){3%ixV`t3LDUc{W;rf7)GWo*qq)Q{6^J zuqo96PT`NOxePC4ROmWX;5#)kNM=&-vNs|i*5Hcz>eZ-B0q#UZ5eCGJO`{rAM3fM* zKJm4s<*a{=*(rXl^=h}$5sDtQSqva`^OKijP%662g39zqa?66;N{s)M5!x8iE*}A) zjja5Pb`aw1H0T7mCB0IKl(SMpLKPYZa}J@x;UoD7X`N;s5zRFFA4(_6 zpDhJ-=hgkqdE$7L8#$xUm0oY)hbArRq@+(vYOi`8sr~EF^DX)9G|GhK)ZC2M4n)co zyU=O65OzZFrfe@R>SK^fo`CI6ri1NeHcosCzJkK? zL&gaDTI}XwN;KJ*#@Cnn5hL3A7#3|gsHxX?`8C8-`maL@r(lndxKzIqFnttjxKC$X zVTnyxNvse3qo{_kt8@VNAzcK_A20@FLTR%j$MTP+sGXl={oLL-^lYP~R4!T;Y@ z4CW?!b;Z#BueV}|H2>;~LCWN-D+W}Y8wY4OudWzgT``>Via`t5LAT~pn8AfGBcDQ< zP`b$jJ8VAs6gbt^ducYTTYc}zw5_*+3@n&g{E3Fgc<&oj7YOAf5nhO3`H6hil|s+ci@9D!?v<=Y%px|aH0#F zqKM^i4+5PG->o41B7)g zU-PxV)E-t-%t!Qjw0E?eLJZUDULA9mj{uOmVcJp04bw_%xX~~j4Je$tizV836zJ$B z3{x^XVXczYnWRp#I^&)~a^uYtlfdZ^-H7F(zz~7;EqqpMn}%$>B z*NYb2527J3Nc=42xF%>q5UG&faeGSwp^{pJ0M<5mqx?fuP+5p6QPBh7sa$312!>ZK zo6&>YRq3-%oCfvPec4vod~N=PXs?*oH_?#Vl*w(wLnVVDTFTBhQM>-g(CG%L*!ertsu)?I4tJL9WtJD~;@fnbfk~?ga>Nw@T zQ{_riDQ|A{a+pfNfk*^0VuCM8i7&zyvs8ljjx=Veg#S6xnCGLjwWX3wq;}N6j9V&a zYL?2GVy0%PoT*tVXCzloNC@q!Vk(aepo?S;KEtS@hjh4!;_~*>XQrXpbW=57u zQU>aNWT~8qmP$4rcsP*a7?f3K$=TjGuwCiU5mTh6 zJD6OtAz*<}i!O3Ba+>&crEK8L8)N6w^uZ~W%9d#_xU$h*u_#L(2Gf<=YA{6FT4!;=xwxK6ad>h) znaXjiUu#ORUGv+TR?`YCA~zWA{ir_{1`(tJ!CuPOV$74T8KPW|ZEBNT6QfX6%saTi z3~ne$>OJz!wkG7r;2J)K$#5vblae4UNs#FS>S^Kq954X_jgQL&h4p_VJEw)7jM?%* zOe;|W#ZOgdhm)%C0OKVI3DuzT45Oo1qJlT?7!;BgqXxX$vXqjEOjr6WQ(*dRoM}D` z-)BoY_lNWP09x5W(kXTDcqGD{Z#*J2v#e>sBV24i6SG!m0KWhf*&}wJaoFm1Je6|LYmU%oml^g$i^A+puU` z8}AO$ILBWfBthlYkLV%!H!WenU!QGv%*Xkb0(1>u z;UqHA+mpAl!2^jVed~;6B(l*gr=@6@h=>rSrQ?o=?*a`4|G$&`Z^iUCCjV&V(9Om4 zHzogYrMUUz$(8oaox$E>Z;=~VPYMuauM0N&l&y}9SgqY^GO!~Vn8Qp*-a5oWIm}DmG3N;oTIEpcADG^p0$lf!>kITX%LHnUsOnk&QCYf;Hrl zi%``5JwQ}>>nz`rU|o9aI#C9K1eu9E$v{M2jOz0hIO>T(STbqYv5Y{-dT|WuHl6`8 z*yzi52VO?{b;`_Bc6eo-=1gKcwK-{J1#J~##assiLes?Tk#{ETGKI%kY9d>u(IXQ~ z$Rw9^cGw9kV$u^q2>y<3DD@oaQW<=FG*HVyWe211h!vvz=?J~IkU8f6Ww^s*gYZ+wdgve3zusx4v-($2-q>suX3=16g-R4 zsf-dtnWg;ouqds%6sy81r3tqN1 zAQob9eV>qoe6x^*FlC#AqXr4fv%rMu8mlvQT?Hn<`>VhN6T8OYBau$m)qQ>E>c0Il zR%eNd`?OMmOX5r-WD8a|5tu;Zk=605Vs$1;&%o+>>WHyAmn|-H6izQeBXwxR>bxTx zS)F&JVs&TNkx5o(9ofk0dVZV7mt|zhpB`jlrbe$~t+x-UWT zuJc-1^|)Z=iCW>9Za!bk<9>KkdS$_{1NjY#&S%%!wX71@<;HFy-Cd8OY+Ko|&&mok zAKrihd@v#I)Z1Vk*Ne5!hb7+GW2#QC9I`$BBCq_gqGIO@_E#-(0RtAeWN%7#al!Jn zhYPxLpNlPaXg|UEwtIsv+AF%V%`D5CO>}h|G=Dj%nDS-2$+y{%4koN~)OF1NDoVGl zyt=L&A~ZGX<8Jk=UF=rRXjVO&E_TZ#Z$)>jk6j*^Jp|KkAK#ZnJ%WV2-WsX>3PTnbt%*C^DFi2Jzy^&@BKI zn;Nz-;o8u(Ok+LjOaFnAYXA=(Zn4|4=ZiJ!?P6A7U!>dEN%+v}uTf)x38XQsc@4Xx zRhmpH+W07+i_n4PnVEyw`bgGVHb3%hm&GAVH##N6=oakRZEzu}?KCTX5W_xVJ0pl8 z8-T9~8K*A>I1JznTReLLik%mLwVd27ZC0F&L=g!<#{&}jB4>?79;XH0M8vRAq5Jh= zsm#xrW<7e0UAn1#w#{%}NfgX|#zCeJZO%0q*&xhIElg1F>R3<^+-{o_ zc^*w*;R9ww=4d81PQnE0V3ZlhY)+>37ZwlCT#Kr08ScJX4aUcBeSD94bryYOINrge zhNkrnM&dqW2eFx)T?f@|IAQ{9l(b93tX$k?$k+p8#`dx3Hk}0+5_jyb51BSeu-8q! zg?`lAVtPe(uXX-M7ot-0uIH@2qj#NhC2R7cku_~n)I1ekjMo5F#~m4J#N&?Yb0G+C zUe;(umKGZrET$haMKBwS>C5oEQ&yH8kzdh=oz8e68kNZwYGv${AHm7De5+L}v(L-K zZQxej1v2SSRQw3D7(ksP)gqb7xxP?|kU6~@c6o-OJhC)4&tI7QpKnU9*EaeCxf~>y zS3Bz2PQoVt{aC*cnI=*nQj->-}yBPe{QK|z~?Y?y2nQc;b~KG66OrGU0Jj74?6 zO<&9awy4fe7mMcbR#60~=yTEb>@$I(t-8%OHK$-78R95mbsiv;2SeNql$MQLPZ!-; z;h&4Gz$H7gEtjL2ZC`;|$kq#J$jBINo7nL2=FEYFb(u{vxM~B7-kR4TR+`Fy*%GFv z;bLX~h8lmO;mT<7uq2WlAv+@~P3CEPUV>S?ZlimC!Cn7=h)BMR!Hy4n6gGLXM$JxD>({ zdw-bAGapi>my7(tKELci$jQmAgkm}okGx5rOo5#=R0NXz-A+X+cOa9lF_}flg1~xo zM_L|AjPyFc?P7~jn6>s^8YY4nRpzRm$3tL(6H@dvG0`wcFcBya^IBZaTpklo(}6}l zo07jukAye~0-t9YJ9!r{xtLcE>BsH=o}?%rh4`xsNfy!W9b{kOVXlX9nv?H^KafM{U~(#@*JXzD^gyy#MG_IB zFerY4_M-a>NB7WT%2`tJ{T`w2`31Q<++#c?8>%&iOpCt=l#0J{jyfy5f+~Ir#1iH$ zUQDm3mHA%dTB3%~4b*rS7f|B{FYrz-jvC+Y53chIiC6dmR?1;*Xv$xhW&ej$G!Dx> z!(TAlW=qqorn4JGu*(eFW%J z?dh3L7lsaL-T|z2y)(6KaXMI9q^yKBXlYc;T^k5?rB^aHx1~Wo+L!q>seNkA+!C9) zbz?IK_E9q(Yi55&Gr1j?a>gFMl4fS=&ESn^%(tb(L~Ln)c6%y7$E-VN=&RCkR3IUs z@ti7Qi^-@G7FiB`n}xeJf=8J_swQ#%oKuse5gS#4bNrktA@|~_61>~zR0+IiR0(dt ztt$Z|XiqEa40gZ~f&wwXsy|g6P8B0%~G5M9yvdUcJw}^Xq zf;Dj^C2+e-)khuMaL!)pz?xC&qgY^}#SQpcB4GS8UEv4kYDSd^k`~SB+#2RF!m~ zO10PkRB;l86`0UqjW`ZoSWDIYr>mOdbe%)@VLnxTx8MKOg9AQPjr`uPL4B|!1FweW z;1wp;!23kiNCfW)2ucO}3c(BWI&*VtKT*QyYtbD1EDLv3RmN$2$`K?|rG(gK1KEuD z;9*&KV6wj7Kj->PKYxh&!Zw{1Fkl8)D6v{hI{(3=-4O3a#@bUv4oUEf+5P9fQ? zjaH7*tGeE4HpT|2gr(CAn-pk}ig1un0FTcR>0j_w{<|@Tb!gE-9e~f2gG}WXtX$je z1u~)WevlRx(q@NKqNC}Ve`CuQ1vS^69_K_3Qb{N9Mf#5S4cnCsh;Ah&^BQ{jPNg~4 zDAAL%VhU}j)9HM0d)B)te~$>gF)+D8PGq-#wOH&ta(Z2yd)OT`FdL>+p8p>MPT>t| z=OzB*0M!ILZD85WmewfQy@s2@`q8v%nM%0InISzuazSRx>W z%tpe)RvXIBV=IiI)s^Dc1~2H#<*2%i{&x*o6RI98!(kqx0rAB)G{{}IBSau0QY6T+V+k8PXoLf13^RU12 z##48PPXm!?WMfz$)tr?0=jYx>MBQ+HWw@aTD@?KsuB`o+{Cz9?Z$3#i7g6T#9-XKO zJE#>~d$IMtmBpKj`I9R8`pt^w6kXZB*_$bKr+q5+h~JC)O^qk{y`SH7f?tPEQTg26 z9Q?NP#KxX*C>Zf0o4jaJd(l6+vS+iVWku$|`U4=#me86$J5bD&ps2t~pKTZbW^1ru z4Bi4Pm?$=znVz?Ew(#0w;23zf1m)aTpk%2zh2%aXwC2waTHDSITHCjT7HR7@gBFLb zfAzR^-c|tFaVFeip*|J1of%rY&JJ3;&kb5Q)V9DaB3UzN%!5EeCbdqDjg7A}#Ml(E%N7}~ zh-OwLSTRr@IZA`}!z1dj0Ashnz#f=jNMZRl9(&E`kR5nYv>Jy0%`h-^Ee$UcJ-=aS zjpN}EXJ$(n0tVo>+r-X;YVHm-CurSMzq=Y3kJUW2Shq@u%5|EIG1(hi=l?&w4~ zRSib+_4e|P*1C4?N&{5U8S^wlYmFj3f^M;#ElYAA37qTRl%``g<2<}s=17zqxm6gZ zjQRFZ&6=+z(^)u_JUEuir`mxR*H)THcAGtjkZqtLGU?%&w@ds@vo&#fp z|0&-6TRpyqU*UfUkL!U77vw6F3x~^n+T>tuCG=2kna&N>3Oh&DWrEc$W=3ByQ(7_S z;g$!qFd)U1*3Nr)ppzIcFnsottAyEF8t$i+ob{c~V9ZUM?)*WT<~maZWm+wu2jX(A zu>__ggYr=iXR{>L%qxA+Ad|)wUStrQJfo!q)=?3RDc}Ff@)+|Cv>>Wi48S<#zq>(I6=& zQy;XV$OE&`BFT(89DnCihJp)W<*DEM#rNO(*!zF)yE)ccPueRFf8{?v{pb(=Rw7?5pN#Dezl2t30t*q<#@1}bT8 zHtfU@g_9cY2OaR`B;oI_hNt!W^vB?0a_4*`Wle5)6tb%u%f5n4_W?Nn$2TnaSWEUL zZ}U9CBdF>{(m3qaHB(T$tdYw6p5pKl`Pk`Oryr&fJNq!{|A_S;FOzAX_rG$gB`<{h&R7X@-aV9c=Zq|AMjVS2&5Kf@Z>c zd2WKn!nS(8PxC+v=2izkj98@ApirI)cnHB*B;z@nh4sQR>2U&GX5 zl|Yp!GOP|R<8rA-SRgP{RH!91!c(00s0f~_vzX}dAwORak`@6N1%g$Waw0c_tqRCV zc=RjfY{C0ATjF;6_<~V04}JTk8Ih1@UJG6@ji;FgCmwVslStti^c2l|)91YzP8*_e zAhkYt;-UC~$xn%0R6hFqxb)S5OI~lzskFVN5j5@Ol)7Z3k;uwj(4a)>;(kwNG zWKTE}v6h8fk@dgLo)bvP>o!U{m+k=jbW?M~XEr-DRy66dIzjdaG-zQbm@jeE@H(oG z(b?F}Dw`-okd267`qO`lY`Ap!29NL#kG9h|(Y>s_3{SL$7j3BAh?uX`QXz}y}5 z04P*O&?}sWMc4dMKlroU6|(O>l*16Ls2w}tWHG)V^{LTci+q(JnHf2trAddoJ|WbG zT%=d&V9NJ{q!5HqUlfwDR+7A@Q&?(EgW=cY>9NvH2^`Ka*BpO)$K0b%Dov*eUjTZ=+?NyCvrDEj z$;8@FZvJY9BHpdG z6E!5=jS;>vSprvy-XPWvR0y|G-t=mIFGc+2ZQBmvLd!%987Drhuh8>+HVLyR6nF%8 zmLe?Vm-2mx{xd`7rp)N2&@l5UN9QIpc}uRq1Dk!ziLKFiZF7W36p z&nL1<8Db4SVsnwEvd}s*+sm5#mlANFG@A`$Ctp$j`keeB5fi@W=i(iPjKm`keVPbA zvR%Go55cU4^QeEV@47laBp?5dU$S|Kl(qxWyWh9`!>gNb!7GGIuq+MC2p`ILeoYqzMvOm=l<^ zB%@OX&S=5JyT%Dxpz^Cx6?jgN6`23tlobzOud$E;jm^x%ggom6WYtqJP|=b8e~=Pf z<~+wpan>DTbH(38j|k&3KmxB%XSJIj%{mY6%XZ$>)_Gkqj{vq)80dEAzOLI0h)c@T3`HlSCMLw0k58;T}PQ2Q! zSKu2VoM@DSWg{BQYu_(bg|ezpK3UVAs!(1PYD^Y7zbeH1#O9ilg>WBU&S@Cd*z~=i(M;k#J9Su zSXy~K*WJY)`C5zfSBBgz6|Y&@!*x&1HM&%Djqa{oqr1#C`j&*ieKDs!q@&qMHN{F_ zl~+DUTEpt)KHrlZ)A{BE#>K)z$Jc1Knv)Zmg=u>|J^9)ulQrUuy`GtTZPUnW8RHvq zmrSj4n?PR67A8e}qHUWxUia*EZ}PQG8n0*Vwe1|K_uQt7*K_uIZt`nQ)ZfSYHG|Xl z>oo;9f?vrL^sT4;$(}kbXh`jt!p+hAa6I^Ajl z7b8OpyKE@CCSUs`Bw@F`-aYx+Cjph$UN23)_DMjIwby$lU;88^;e302{^V<)ge1Ji zUcYAYwNFA4_S);cldpXe#4vEgf1OwnuJ>0k3CPf9p>zubx3FkW(cwDM<1ATfFFYo> zXx_|FKp%3m1WPf`sfN7W>!NkB>=zjwlI5qxQ#lo1Y(_$-j{NI z)xvRP^)@|m%V1i}hTW9FYV#(F02^76l(TdokfRS0ktA!8fX6$o6_`7MZjlPuxDy*@ zKtQ3nQxjqiWwsTC`>W}ZL213blYxooiw3ni;IOcRNjA*r4v=T|kH}zFEO^-&l_$9>*pU|t#9q;LDRVOv$pqA_ zUXHx4qXL8?ysg*f`x(Orh*TdG4Oy$KRtpL)6~JLc5WOj~fr8QKrfj#?liYi4Z`hSY zdR&kh#8swcN295701G~V8Rdd*4AOi#2>E9je(ZY(aOoU#Op6MVXpmBhBDJ@#{Ds9> z5F^1@^|239tGKDryeR*ZKs;rGV_-7^9VdQkI_xO}n<-Jl=3+)enGG@>s+%gQ@!*ar zi0>#t&3Jq&R0gABH3#SPA`Lfc+8Xr9M^&3PtYhkM4ckPp@-MSKFr`~&oCaqCvWbWY zgvXdAu*kY)4@N`^Q^UMrM;B&jKLCyY zX$dURE`QmzSZ#``Z3!*D+OtptHrK*UNW`feo=$J75oJ|U??yKILL77 z805xzR_`3P!{X87OH2g}?Fv*XRvR!^-&7mNTU%sE7p9N&MBT*d*oEbS0gJ}7SRbu2 zE@~1Iq@)1UVoOV%sUW`4W2pn~C{RMI8W!V+abc%|~vRUMdY-3}) zw`PN#v04eu7|i4_g-2bcg%DsV*F5 zZocoWeiOfz_+nSl|2xUF)(SVDe2c2`0A8%OAg?`UxbO^)EIC|NRsrJ}@51B6l9<1y3}5J(r-(kv z)DiKDWLxq4N{c9FCtB9kMqA9u5?nIx71L~rz#^jA0CtwLj9r3@Jm=X(Y(`F;U&CF$C79q8R)_-|5W+1$ai69UeMUxne#xY-2Q3~Hvg+aO z*FF$=DrC2pF>lnIyS>uzcvUmgpqkx*Hc|6t^~s_zs_%^5f3|Am+`G?oX-whN6YH3y zY-rH}ixnz$lY0hHDghciWtz|jpJ<=u3&`&N zv?Ha5TUO+Vyr2dMRqS%iB{ozaDQxb^#G-7csY-YK!NODaHs*0d9@&D!sJG zu>NTCXvCSD%)l-Ns2B@N^J}g_bF^AqYUHZ5Gqconi`wS~b3z8(OJz?O&f z_)yXjbN>~x9D#STAfe`ly(dt6@w*e>W-%q&u*64nVj-joK=X|`m^oE}ZCv^pu8f=E zbLncMWJ+K7-FM2@Q>3BIh2BBUU&Pxb9a5ZyfALHH?Oq+= zl!g1^?Q3;%Zx((t-tO<>4a>p{@%CaJW{`!S{AK_4bvkGu3%?z25BtuxANaJtJ*@1~ zS@@-R`+C{JvhbC7yC^?p7QX*cFFdDZMixF8Z@bbMvhb03yCm%~3qN1oLJ?VbGT#20 zr6bS6M}NiZy2K*=!k6OhH;WvzaM!Pv-4ZoMWZAE4+dVbkYaE<67HQ?|I19HK*w}F< zsR#q7CWXGifB6+zy*NAeeC_Zv&OU%Hoc|@A8ws;1Kn4|P55W}q=rY^P0pdX7EMf9x z(9TSnfhcD3u)IAG_I6yUUUB2u_H}4Y^ldVS+OIH5%cN~~!oNgB-dN=LP-a@ zPm~*hgTK?dvSbcRMLr~*pG*aye`Wy6;VE?h5oVm|K{7yrjs^h&a1B6HnxwV^sJ%6S z8dtDf!K-2bY6w6UCOqW_yV#sDiBn4Pv?YLIvR@Ph zQsvJ_q8hbGnAk(@%j6x=Mg^H(NW4SUtS;3#aE)L{{%`QV%qY`PLhB$jnTG;EnJV07 zt>j0>c;6=f0xgbNVCW#hQHHK4YmOeE<5sgcHoim8oX_5Z>6Kd;HkI=9;pE8dYp3nM zU0ePa-(zzbG|F#PIo}VD%wC%=*8Us2sXgEHrx(t6m&f-FuFb`%&LVmoqyGW#XqQ`N z5544V(q7~MN&620a^yEyWiREPMIjUjO>&%FaV-a5zGh1}qR5!DC`vvor5QP!qBANg zLG`kIwZ)UElrLX&np!ngIpu{Za6yZRU7KJ=ea#4`b1OqP6tc8FxR+GMIyHsYdR!e;K3HPM(P;*9cHjf zamdjcfq#Np4$#(4gN!BUzJF9jeT>_IN|TLPV{pp_p%RdS0uHtlp>>q064Xivh-gX} zD7I@O3>3uV42Q)d(m`uBlQJ+?RyYU)+2$Jjk0xuv3wspm{cr~T2~`+{&jS%XoE6~^ z)_xr#GK0JBo_#FdLCs`S3+Z<-MXIQya0DF-BNJC!=ZGMV!}|b&gqhf15(E;viyTgh zM=^a22~nb&b5}?#J-WoaIL~S;j@D!++!m<`B7zb+p8)rO+w7PD)h$z;Bq?&lOrlXr z3cuA?BD+`0X)$e~`xaT4@Rk?lwk1GQGF2%Q9vF_w?4MIsmLnmT{{mpra_QY6TVV17 zAhV1O&%t|a^{TMpeLQdtzTns5YIsqcNkRI@(kT(vxY8GcdZqWl5KS>xtm;8TuxWiS zuNI^AK{u}TsjpLSOj0hAMxAf6@Sm|J!FgL5Fc7tZuYqt4eINx}-(03pu~8=z$vm)6 z0#8q2)@ad?=_-mg<(X^K_yrm-0fvAYolCjb0>l;oXQ<_`&sfVpeMPlY9q=^+?K7^e z2XN-5$G1PMv2H=(@-X(W)^-y_BF(A|^rBH{O;O&R-%7KlE2UMoOb~&R@{9FXL6e+c zx+sF%l1oCet-#h}D0pRNZP;F!dCzy>O~jQT%#&-S2okxBzr+S*kZo8fwD!16i9zU@ z$cJl#wH>5NeNz?yJvK+s#}S_+ns#FYD8DT#w@1LHHdcv7SP*50o5Di45<9XQh8n_XVoW_nF@!&5NEude!aPD+-~?u-P!c$rOqTa>lm8)bXOpk&cwi z%90r+#g>mBv-0mk21qkTW_rQg3bw+w<1m_MlcTCVufFjz4R|1UJ-N`(fI|Do>=O2q z7TLcx`7hPlRSL2VLt^BzUd!UCg{vG|Dq`CVjGr|!nSdh`a5f)-7=n}nvCr-Un^`^? z+HAetM?S-`5xD=$l|QGUe8I;bTS2OPU0Qi=tQE)Mvw`p{1K5|xT0!=FUB>bUW34#X z{@Rb_&&OJk&JTVUQmajaM00$Z!I`8g;U_KmWy(W5n{bqu`{*yv<)cIA(9mYz#VM5X4nj>b55d-dH0}J4QBuB~CiFXoqlx_IHI-s>?dsdk zT1$K371VlHMhYX_Yl7m^C?&j4l8dJ1NWwc0Mi2BBDohnbY;RQw09b-HZ@HdmE_4I2 zfqQG^?2Y5ZXGUNEeMW`u6^vErsc=00SX8}MOmIir#5J6{IPWvn7!IkoO@SfB@nC&#Y^&z|Uru1q5G}Tk!P`>j$KPj^gWy zHA?z=0tbNB6W>QKWYcqeE9}<-n1>MsJku&ed$B#20m=?LJCCD=M6dwO^eQ z@~4M~1W`UW78{cOpU1h@0#-}J0*v9$Xn(p+zD!0N*jWVBQw&&5TJ@4*;Cw@hgk`Vl z2#*=;h+;5w?EJ6VQ4VzQM$!{4E3##e_lL@ukJ8~A+VCzdStNwrI|@k(%_pmz>wusDW6<5SdE|kWePU9Y?C*o|{=m4y|8? zb7J2Zrj6wsMMCrewy}T33;|GStRi>f0u1QPP?kvKuV2dhpVH4ws*|Zg=qe#3Qf7+2 zL7p;sSXm5P?ctf1=w-A2!MI)L&ve`1w&R%}o?{Tq5}6-PP~#XX+Qodu+L$-m_}-)jF$^BYeeYd{MczBX2~cF6cVaDg`DSsV zZPqGY%*|R=UI?aQL#v(FNq|{@;|Rwy0md!0lr!2hJv*ne0o2*XX+myt;P54*E3C(cE=*%Ms+oX{2P?MQ)GukNC zc{Fnx0=+EW!pyP&%gnNwt)M{!x6TTNrqYQclNB`biEiNN7gI$d z&{p{Dzh#br&P^rg1s-1ICkU@sckMZS$r&I3HZ}nUiZl$`=pq6-x{J@J0Z8+yLFx_K z4ZrLUkY*UJ=<=%^S_$uRK!%O>(0);uVB~da3Tz&>sH+51r*qorO(t>I3M!#KvYw zNXj+y98>2SmKxeH6dTS2O^IhfQxpN{qN%i;r8eJkOxZhL!l(qU;schAIwnX+ zojvJ!jfVMEgd9ZsPpmL3RLnvNcaij3*@{o&>X=kyh4PnXRh{i?adLXwS!h;5`>gC3? z%#~Ko5&8oo|MoFJ!^Xs&ZQ_7YW!Yc=)EXgS^NkdhD=3JA&LtP8T(*Tg{M)DN{Bl=zB@PsRJk zR3L;Zg`@(pYp7I#kif=nJWaZ(KpHy?M!8pv&lvNORxWfcanqF-g4*$S=n*_S(xW7A zogU#E#*C}UvF>WQBzm?Gjv`eUFa*Oc(4r+?K@A|$^ie7MVA~k6%BG?KeVn!GT#2Lr z#hKm}!`2dhUHZ=vfYhsBoU|yUCqxGZIfUed&M?TL1+NoAXD*&)_z;^dktn%}GUDe~ zYasz2D9Jz7O(g%+3DlT`lfPC+k^Cv9z=TNt!Xc4ApP=MxwN@j4`Y=xZTHwL=ME-Gg zC{E10iI$E0!9%l0RLpD$mf0e%M*igeACZ3ym2z&daS=y%Bl&00bos9akyJU+nw1Wb zn6eN)O286!fp@c{VKdt@V<)x@D<)tN)o@|H^`7C}^fuPIT0`k63t3X1Nee34@L&&m zNWcr?>3Ps4u=7PN3HXhqu-^<26cfs?NeR;*;XN?sU#4t#iTXX#d_b*A$4P|^X1G#o ztyLXDz!TSQBxX;=>I?^q^r|IcrXC9aFH3e}L63{UgRc#n!c zs~d?u-RN4qd0scq#5cND#n$fN=DGMr*Q(ely?HUd(X}detKOXCkJ{0-Dt5bWZi#Pn zt%}{Lo7>_WU8`dE=;n_2M%Sv?UG+Ej>qbx1=)Luu2X&(-dhm*3BsiaoZ*;ASozj~Z;~QP8Vz=teN&cu&U8`cZ>*kjDM%Sv?ow~U#zR|TRc8_lE zh;MYQiruf9yW$&Nt6~r8=HB>5*Q(gMZXSqlbgha#qML`}8(phnkLl)ge4}es>ibdfh(}F7TbueMB$fAMg0Sr7?6JZ5&Z?kd}I|d;)^5*ISNIV z+^bXUQ^NZL=Y(R|^sc{v45Epvr|u9{U3E)iSKUa$k`HAP>H2Wk5CgSJV3#eew`6OFBbnQx zTp8A3VuEx82J%*pfk6_(*VD+mO~63IEjHFkL13wGJQF#D3f~Cg%GSjLnKr5`nWU{} zxy77KFK6&by$sva`j9V`+F4gJh$cV@ccktyD@Z$Nu||=tk4@}k({zum8`yY8hA!sb zN5EM8Gq;}tGS=UwQjPSRx>mz1(uTB}vDKqY@Jyl!ULdO-QQ&|C69Pk8O{LD!obBhP zfHka{kQLd*l_92}Hd4nLJ~MiV5@DK1H&!eRBxdLa4`8dW`DWnjJHt@i~2^UknVgqg4* zM~E-(Ga5^zILw9gPYsCTO0`Eb1cXSiV(iCor9S3O*$=G67@Uo8tTwZeYIAYaO$C8Ap!;sG19)3}u3IgSip z%J4!v3K{Jpnj}PE3mN7+;)AfAuI1G<;j57f#gh`Lb0IaY)|PQ~`?aWjlf|1ObAjcQ)BtOBuzHy_7#@R_pC9Mw=g+k z{F;$)1FjuWg90EGWQwF^HHYPeuCQQ%c_4a@5!oun#UrH^5le}{mc3LhRE4NUCeyJ( zJn4U-WSYq!RXtvv$}&@$RyCznzPUk-mC2seUo|K|g&=gTA6gO6G~>h7GFmT2dvGbW z8Z=vyD3jlLINj)-%$B`z0kFz)`_rFYC;Ni3(`vOBKBe0k-Kx5S$pXF|AS4hfmYTfTGwbRpQ893;raSn~ zQc*q~cTbla+SUE?pSotl$g?JK9ehTn5hjHBVOnhk1>|u7gpc_~e3r@jrQj_?1xw?A zCC47d5G;$yr;9P@ItwrjHm z8JPgci3%9oynHr6X3Mu6p0fB65tm3tL{~nOvkn(A&tyD&_61dphr&W^GG>M1=7F>o zdw7%$F`sls7f#oHgMruc(Y-I~^Xmu(;aG`x@L-*?m(W5&LJXbWtY11q^K$#8o-7*{ z5H3S6s&gU|_B&forQ+m#RFKJ+Uj?5(UTb!;I}gXMA#2o~C#&vo8p@fvb4}G9@0j*j zFEi!Tq2wcnxpGc=xLs3Yr!7=7am!OS6Pr#J5kk*?Hh%F~gCGW96$bLBrFVoOO+Afz{B*HUkBadstlaOb!Bs58vP zUBw8RTKE_2JJ-(UEIh>+ICUcnpJRIN_zQ0C<&Pb^0scIuw*sBaQoaMtKni{XI-Wak zcrvj74Btn_n|)DM?$3%rk}tzJG3L>}?M7lS3T0F;xFWpZJcUBGNK1riwm}wW=7bA2 z5-Y(D+usFm0z89K-V>UF6>8&?tb&LVbe&^E{uu(*`R_AglV$ewG`tt)VF!nf^ItJW@n0c3RCtCDKq_udY%1WH7f=i&-OnB9qVt>XGS;_`2ShH@-9kA4vVs(A*5ne8FHugl zJet2DmPFJ)^(T**u5sb1!Ul_9b2|4JYp-I*vOz*6bYv|>Vc~kxw&v~6PNf4yDzM}`H3NrKdqQaU45iC1qO zb_quhNx{?h5G`y_kef>cKRiN+7r*ulvZBZFKZDn5N=N^S*A_{!sBBfIR?_!f16lS+ zx`hjH21Qo@ZSxNHAad zBZ_r0n+wIf5Q!ws;3H|z3a)J~G}llPG!!tUBoSyBTIXup@Xs)tCJ|6sS)h!4EY8J6x@hi)0jlcEbay5afi6@3j)RChfMYfq63U{fb6i{gnmV{gr9&HTWPvL?&jtzp&G2_ZMok@BY#rucCF# zO8V|EbUNGprF~(?K&&j-?k{C$)9x=->ASz0qupP8W4piX8#2{FwWpOEg0k8L2Ev5p z)zG?vD>)8kt~h3r0K@}N!tGD3YhR~t!)=>{DB8lPM$yIyAu-Ud!5{_g1WzCj{P&;lKZ)Yz}0@y-%+zi&bvf<}ox~2y8!d2h@s8SDClbPu}aARn_@pgE-NT5 zsZXn|g*0NwWuG4F(3hW2j176NaES;*HZVv#MV06&OcVUUeHQOY%RVEjV&Tt|X3-;^ zCPQo1hGt^|AegF*V487g;!_N*TMn(OF?AF(%ei`GNgGhMWf!w&e!2<$sK+-c%|VKuf1FRM+w~$ zsEZJe|7Hefkn%zKFfH^;Q{BUYHs~w$36!N1VU560L$e`V4z3-3116G_KB;06X5u7~ zKIknf{M=n;iWD8ebi^T*&<@<2fuLGqC9xU+S0tSQ)n1S&;uMMm9i|1@nQ&7qO8eN~ z!^vkxWX0+Oz~5Fr5mnbZ!z31O=?4$#I zCN8{Q477lFlkj@&CukOZWo|a@2$Eyd&+)MMog^U=8bk)t+5p7E z7_u-p5_U--f9|E1lA|_zyWt%E?u|!gUzhrS$(H}c_p1E`kTv&syP{)((}2igMYZ>2 zr$8rl+sT;B$OT6W?csteV37-pXfiw(9Guzb0*-dMfTL|L;0l?ci=DEsPHE}k#}Fa| znJZ2_E=7NMfLRM~ri`o~&*|pmpFmzZUXt<7vX%gr+l$%g655V}UCi>Qx<~n+jrJAV z+Rjpp`*wUUvfZu~5NgLPbj5PPRv57E4DGAHZNd^@2ldgA`ic?T9#jS!;+5=y*O*hH z*kKl%8#)DRu><)HqSOU-%PNcY5JI5`REB2nC6q=E+AM5|ih^AK_jamP-slRj<74$lc- zqgS*kwAU}$7ptQx5$T`;1|HOCKdI7p?AU^uiLbY2m^t1Wx;O;&wP-J{*zfeMDxDwc z`I(Y3Ft)%J#z2xCGdv*7TUr}%dNmzvGgh%I;zY=c6?N5)7EmqAF>B{Y+d5vKVRm|l ze|%GK3}Qh|{YB zd3}Z?Wj<^-7&YPAhgjS2lJ&KAPog2(8LaS@*k4{PZ~)j#>zX6seJea?jrIBUgY-h( z*MW+n<}JGaUb@dAz+3kIsjBx3ZmZtMesAou5HJonJWowTu*OkGgE&KpgDNM1j!q70 z?Tdn-26dYcDm>^0=2tu@KG&4^=bDl;49cctG$E7Ik-EeaJxCFOcSn3ed5o@wmT{dF zj%B%u^sYDM7}-TZ2%w-h#ibbNmM{YN*bcH(t7Gh^%i5$3@B=#1!n>uSwKrI_&Sae z>{WNiCQR1Zi$-HtjF^+tWY1;0KNR~L=|{*YLdWrB-`EyNc00x)ml)}V!ULGbVTtV7 zlstjCn!5>(uGlX-WWI>F%X(-uIg_|MBFL`~?v~@v%V7+B=3pn|xJv=x>7bYd#7PLu ze2>PEA|Q+)8&sztx`7gF$mK+l{dKTGM)Mg=hP#S(SI(nPiENIwSQOi5xy>jAD#hS0o3}ab{O<{E95NqUc)*>2peiUV zQbt94Qf!q91$}%DCh_*uX`7^k2m9!|9B`PA`L&NLCqm!LXYOV4Gep?{o8@llr!Blh zh4IA7cFdih_>PVOAcQ%YNlnC#yfXXH7`0&cC3a|DJn@WE#*P#3Q z@vfka;j9JcSg)sLb(Cl9cw<%6R29{cTBFsbbLynJc95zP(`8|s_l@N#&E=T)^^qE* zAF6>V{=8t-aNww!Lri4n)@tO~wa+l}JsU?ZzbU+8Y~(1L6C+>H$i?I)N4`mqq!)L- zMR85#_Igc3gT;*IV~~e(v%TzE19+f3#YqcdS;! zi`FeISpA^$Zh7=N>n&?VC$R%jYu!&+k4LYQu8O6vK+vC0S;Z7nrnz^^quHqvoQ}u0 zqwi9vtQ$d&El4T#Y!EuRgjEkrAmQKRowOqoehd|pnJ0C~Y3v9Zc(&{$n(9Jm0Cs70 zKpr#d5(-IO8}eXv$f`@yMMT;@HsAiSiZSh0iBPEb@-S zED^y?6`m;zH#aXlqmwUl(^*RMEDM9i@nYr}2Jq3+*^FV>YIGP40cLo}ujrvlpsup> zo8RKd&!$%sz8$9P>PNSU$*^ zm;VYbn(2fpu~WkQShxy`vNZ{OSecY-SH`BZh1=ZQd-yLb?P^-WZEAD45m#!3wTuE< zN`X1=z%g)0_EddS08ZIADc#n$-20Y!-`Zt!Tg+)YHfMdS5MYbG5k(mL25FO3mA-8& zS|$&xK204ddo)${sEIHKT8*IzhpLf80N@;K5ZVy7!ZL4!)v8i_%ajXB=9?ETyC0#| zrbm`&{~{?4u(uiHnB>_-(x&v|5{0D^9H8Ha6_9K39t2IXrGkcJnFSdWscz08tUvOuik*e0u}y@mh1}f93~-=VKnhd%las&IT@Hv202*a zsg8`sne;W&G4y-+Ncb>Qub&^`O87^?>|e<(`eec7)SpV?5^bSao&CZPDV1d;hLQ_; zn1@t2VnTRbhIw!(_C0)TI!eSK*~wT~p_??=Hv1U1sjxph&!zt(=n>)6m-(fbrhi-y z88bExCW>8K|1tbo*cN-l@@4O^7#@%Dpb&oZ6t#SeaX0{gEO8G80F@!s%PKM5Ea~iL z)~sgO7Ta*3#ixi2kvhrukHwz~0r}pgY+IG_ilcf#29qE9(~yrS9dupIlN+6NQeUai`YDt(gfq+tLdr{svj5ADyupD=ids=5t@}TP*d*Z_I7BH+ z6Qe@BoJu{(firFuCrl8M)?Q3?3<&Z{Vf>($eG9uKBcGh|@qG(e%@DRC$m&xW_%aoz z5*V)9E59N7#N1R1xT&szkxELbhnU-{#+Y1ax>&e-$cclPDB1NZT|(t_Efb)?q&1N`yuC^!goh2mV!La(TPqVyQLp?>hg$_?g-xDr-hc8qlGU0fiRWQV+|g3HsO z32d5WBE1B9)zqSbs3uK7nu}!uTph^R5@88hm~ROj%lZyQ>04u}QQ*)ip+9j}E^y>0 zEqZdY>S)SX(ma$s!*i84fzyM$gyt&f0;fH~b#y@UP}(=r&s-X)tekl%-_NvLogqZVi%>M(Wq1siPuzW&9@W zJ2KnJ((*rHBzVh#jRjhO)2}!V&-nk@KL%$MfuJX=gK1_FCan1^GR-G`+3C0Sy5)?5 z$(m8iw=aD=&S(~ARBm8qR6sFzx|ofEG~^cc8KtDnXc?r@^clrcXEUmTKBJ@|noQ9f zgEZKIVe(y$DX9`D^}t6C#ikEEDgR?w3`~PZn5LuQ^D_?ru5$PSC&yRWUp6c`Ysx*A zh0~8%XjEvAQr6W2k39@2Gm9s9@)2xRIiyS#qk|R{LlXM3qUFnb5HovIv~@)fSqw<6 zR==Qm84RYh^e%YB9jm&q&zEyt_HzdVxqx?uGA#61?`fSYR@;BcLb(u1?GciQxpaql zxJg8u3#pkTu^q)x1bV}$zz6vrxro>BfZp4vd95R2aXE?$A~0FLCK8ywY+<|DdmpB+ z$V|Cw(L%#hUy%YLLkZ030Rh=UYtgt0cz&7OYBpMH7#>2KU(W&dRS>7)19(`Uw?{-Qtq()iOyz1}|_ zfBGAD%6%06$e+4HG!1_VUC(HwI`tRIb2op3Sq@KINu{1n!q17jY89A+LeP_8)f5^0 znLCS&N|CunbS9<66;UcgL+H>_ABN^U<>xXFF*PqtoEK9DJg_>FO(+sY@Cje{N{3BqM5mxm_+ntv%0vC6?>EukHdg16>hw4_i=%H-C8 zA(lbuUepiEC^|USfvja5uR|7s$R^m?tO3}T@5atJ^!<1-tCi0rJDW8DrSc}Aa00s? zMnPw1oRdAt&g>hl8l9a<3zvYBk-!C18b;D7BmEJlZ(4p~L`>0udoTSMOQ@o;fC7d00q$}m+a<(&C z{B!yioBq@sdU1wy`pZpK!AF zBx9+D_DO%sro)~3rA40j58=m>NbI+g-06$w_qii|DqAtyyoTqegy(4C+Q%d;EdAh)g zw9xDK^L&4H$krwJocQi==>t{y?9jz|5kYb(MH0hhM*27z+FS~@=#nLD zVZ8=9wsR00Cq~T*vS<^m4dbyiY%F*bHpH^S7OSxw8B)+)sX0D(HZfz?Ax@H#T~lmQ z#-iPlLY?q%b<4866VB&6G@)(Bj%u>NWGIXEwltRMqPvo;yruu^=(%_=R+4W;Pv%!L zB=YpWm6y`@y?e;P)c>>C2&}_EBVJj;L}s%(h>Q2 z;}X_uQAz&27`JL`hDS7u(4>l3 zvz!3dP(?*zJ{*C-PAH~DD0Da#{p$4FL`cCIIv8C=#_Yy|oW-92YH}G^OfAe(jN75q zfgA@Ey7jb^ceA%sr&PrOH4Y{hsb6eTy|gz!*7qGc9duOe8&wRUd}(iXtk?qQf->Wv zhtg?@AZ4x=zLdl_nqy&%Fkp}w2d1YMGzKzA5n&W`pL2M0#25c+(beiliRIQOb>{rI zY%@4U9p^RHWkvgJLc}bhRSjH9q>P3!M#9qPvE1=@0}ZR&5*c!iL+@|ZpDT}D+FPpn zvQ+O2G5<_+-eq5c;3r16R3c$yboepjt4O*_lcY;TD&RD33VYcd{#rQ0Di54-Ov}5w zVkN+W9S^X>2IfXetWl!k4rnPx>`l~HbO)vY^Qs~{v2`ePfU;n^eN32EW|A#a)nzkb zO*>U^e0$4w2A?Bx9==Df5a~kX^Sn1qY8^zx-(A|M#%OT6n1W%jw(&Vj z`wQu)5ufFwjRFRlY@AP9#SSLe1hfSKO$rXl|8U5R<@hFLT-}A6LM!oGHZY@`IprF6 z936jW+;Ma`9`pfGi#yteV?P(qCGy+Bi`m!8emZ{$ zS~`M*#(8IbDVOxWCxfvy!>=S-aQm<*{(X+yR+P1^x894Gslj!FmYlIRZZRzc8P+HX zJJ$ufznzO*l1l`lVXj%JOdrz1X|obSSLJ7JXnvp~R2?SbmKqfqL+cMj%e{;9Lo$$x zi$TX}|I--~wVb1=@QFXEb=9^tS)279nP4n6v<+{C5!Rb(kQ$xP$mSD()nS{t(*}Vi z9mBRnXa=QcFr(-h5*8^INzst@93-mUF%ZpP4qOeHrx9C{@Snv1ODqHI6bfSCw;)4z zOQ73A)0#sApqCw(-01V#TtTotQ6>%4GR5F6xDYV~HKGS4SC;uS-1d~3Ro3}Cv(%1V zkLa0cezCS0cV$Uo=`Xq3A&pvMFh&-NR8i*Du5x(Cb6)gr{G1oFiU`W|##YOHJ?=75+o$fZ(**zak}WI*tG3%`|P4H}z{vH*M6I)J_D3 zBD5sKE$sPj4)s5h`LE{^{e-5H@aOi^79L-=pW<_Tt^z{mFw`#wkc8Li7s#CU?-u4W zBy)m&*cC7vE+CN~k9W3sG9N+OzsGXuon>+0V(mP-BLL zW{mbR73hWE)kUjlJaJF)yZ?!dwOgEmr1L^6TfmK00@`9?G;1s}W}yfEu_YQiRQes@ zkltP-j|^)Vd3*Gup%jTMM~f->mAGhg1280oh8Y;O0j4SPh+ns08ImWG9z@mp3*&{DC-W;e;Hn4WIfz|zD(O70hk7=7thEOaW$SLze zP@K3fAWn(|pRrchYq(^{FN+>wgvrkw;OVQz73g5v5Gmow=X?y8=S&!(14~-wN*0IN z|F^n#fwQZs@4olm=Q`)iBqtC;NCNCR1_+SLOfHjT2$&s6NaPYE0Tt2YBy*BXGB@TD z61hzv-nF9AYFo8nRj7)WK31usf_JO+@;q2tA6wBUt$jc3t5j?CRh0Mp`>(yv*=I5V z6z%(Y2X@ZBtm}XM*Z;oO;w4a7P{r&Gu&Oc+J9t4U3}*IWT@``jKy{WDM~5F30_y#Ca-brP^@-=OcG>nQ^$56>gfrX+W4)rr0@0Ult-8uwb_o<`Jg~b{Hi| zaRF*v!#N;D*_PVgtEKB2-H^~^9itG0ia{%35(4}kTK&X-9jq}e&8ITz3EPlSSPI~z zLfP6VY_>T_NmIxRMb*%o>dm4s$mUQhnHv-O33_1@IE|1Ov1)i7S$$ zsw}(Ey4fI{DMF9MX@-9B_XAY7KBGvJD{8W&3X{SLh~SQLauVVxmbVki32z|j3>9-q zQbrJ-jGNH9O@3QwOO2_8wixZz4DbO*!F)b77usqOS977QuL!J#A^M>(-3=p{V`D64 zA*I%Q1OP6hG0-pr9)1+lgrVG#?s8*}cq+_jxJ0x-EQwZ_BHI9)p(+wFRkFlRyQnQN zNkiz@a^nI%8z>%wo7sY@myKSRtjIi;alu+}D4gVJ8o-VX!YgLJ)Ns2mR?C;!J?38{ z0of|fE6lVYJ|;?t!xC?9Rra9+z#C&A!8c$8y}yk*i|W1kF%;IHt$fMWV+r~2UT9?) zKx1S8P>$iACzGzBpGnQkp?S1DBgkk4hJhJ|jTaL0JdGh6+xiG@VzB~qk!3_I7uUvg zv@+C&Vu-t8krlSQq8^8j^5I54i{lKHSh|Lr3y+hiMaVW!5?DN3$*C^Ts%HC{(Q3bF z`)}WV*eJC%+pmUSp*FKissw`LTV-eAm|+YUM{m<`zFjIis9_=r*eik*pOAKEDLB=c z=k6pD3$qTG3^VYe$!z6+1wc#EO!Z_(7sSc+LWamr<5_xx?#oZHs_E2O5~5g|>P(UT z4rXho>;>)e)^~Jz1~1$qUX>9Qfp^D#I**nJ4gQIE;de%KUQQ!3!Y2#Am9jM~De)<0 z5}%?AOH#rUh9$*5#k{HFicW_Q#tXkEwX|BZL15B8AsTQ;F`zoaFf9m!SXAH$3_-xp z74xCBBs#!;3HS&UnnJ#IaEW~Z+0SYg5Xc_roEtrugJ8~JtJO)rvy6#A;g6a1n5MC0 zkf~wKD#;h1Cl&@n(4sj9IvGP5C_D23_#e%S7HV@RO^ZylkPWf4dB(i0qDu?6YD)ww zjE(6vwL+A1P?=0$qD!iXapYe6XmR7ReaYK8pU9|%TI5=a{@v49$q?>UPqEgy!`4lk zJSEk-Jd4O^9ki}=fAutEXIfn?-G6I!p4sR{kLKO0y%GrOg#UykwdgdeDI6ftX_hD- zo_4PyBP0A+A$(W=UN)cJ#eL!t2%~}!_}mG}(ah3}reg|aAyz5|jSz?f4v`i@OkKG3 z6?`f01e01B3PVhFXcb1msiyolk8X1=Pe~7%c*kAQ)x#GC6fWgeC$AekgNnfKS8&zzPrNpJdsd3gOw- z1*pV|N(2cponsLI_tZmT8;Ar&!ql|liLye%WSP{!L*s2Tk!Gqdxp4LnkSGj=ES6%> zbv$|~1Fv~u0zp*R|L7CmWlT0NdJZ5Gj1A9=LO9vqGSR|;=m{O6o{7$O2dEEeV$2er z&m!u<(4B2ykWiuk952Mt69H{ijYa_iI^3qPMd0;1);344Gs*ai+7eomj6x7P)Z2D- z6=|B|%Tb&D?}Uh{=h3_LsJ$;B&K?ZrBRofKvU9T(kg9x99XjbPZPlTnz$~Z zA8WBj$^^+fv(91h^B~B!I4nR&rg`*fSJ0Q$2fQsZ?rHNB*{7=F=4D{bmU+O(PU7MH zW{p))u4dRkj;)+|+Tc52T9Bgnqe28Th#f{16=2xn^aU7VYbquaQ$^?d<%9gb^i@t^ z9fquwjw+JUA}!3n%ZSFVNjR6eCY8`p#gtE&JQh3Se8NcdiE9!87pf>}K5+J>IFvPL zhO#=f6!JxMwSp~W!Se5Cc}n&bN13wBR7DlwwTd1Bf^HWy(9zD93yazbELM`szd$J? zf=IlC{z-d~w3k7~M4T0)$!X<#$o3UtG8zWAtX#6Wh=I7ag6Ty&KLR9j(S0ol3J&X#x3aKd>oBBV|FyuRU=#^$ zgGruP43Up1t{_MmV7Q-}3TlDW;B1D7SISM~VV5|F*o@f>&7N+LM&)y9kBTC}uo+rM zbLLTDc4}S#d6SobbmCEwnXq9n^pFGztTT^FTUauWO5m(zF1v=UO|FwRi@JklYNd%N zlxfrE&z5Njf1{RlSe4|_tnkd+9brxoh1W)W455NW%fFrqPn5VOD3Pj!UfQn201YE? zfs#LQ7Fbu8YG6#09xA&P!LUw+E-87dOJe|PPLqZ<9ybCOAZ~%#ZUoGU-W-8U>j-2t z0=Dws7B+NZnDC$B2o#PR0qdH%SIkzCfVD9cn#T!zmEyP|N)G_{h}wNnbhj8k9qZS`KK_NxI(IfqT&*KD zsp{fhQm|>cQj6#XGP;}qR0*MwOPG3HK&UqGkVeATwAQSS!9f&>gTRs9sO(qhvF^*A~L zL~c0<$)w6^PGcj6Skey+Q8>UIVG+*NhMQ5QZ0G;wmAPN^9Y0}fK!o;uqR|EugvBCF zD`_GCJo;)j>qJFP&$@uIaSrO%x2;dePY)9ov9=BGNBXZ==qPoRn{WJVt|Q;k(eAf1 z8h*Ri!4F^ghqlGtnj4{WM?Z!$Mm{#w&x8JR? zJUq7BR*`feEdC(>O4}feEirj54Ft2uuJ#E-)eQ0uvC(=d{a-47gngL4sYg4PTsA5M$SD zMd=h3a^qEQhea<67FB%^M#2UUiz`Q@M-{0I6DhPzx41z!_}6mZp?40uY*Na3jzBBN z8nU-xZ^L~q*vzr--)i~;la|KVf3kf~O=>!#kX$}9G{q&}VwHk>hBymL+Umh3jCQ)7 zK$50*rgAR>rLN4SE1cW-JF+)qsnSAE zv&^iSB!P(I{P;}J;brvJkE()<+*h{bB>rlQ)82JTx~h@^tP-8oUSh!Pm+%gSD`Cdb z+8$APq)$0YG8HQrOTTO{DxBMS;x$XW`I^#Fcl`amwy=w3AS{rzo*SK06>+s<)NIN< zn+7OB<$Y9+OlU2^yrY&__?lV1S?w4-@-J{7shq?g2wM_tLg8h!Q=_%9us_3}KAF=@n@E2V^Y?PmD+k zUXEn_GelC`Og&8ht&{X;i-SxYT_86Mps;b zn(N9eBjj}DwE+P{2{>lPL28ypwN#$I7DbY$0j8+!q%$@>Lbruho5jtN6jLOCH_YNG z30{*^8H6^1$_^Y<2#!%JHL+F(r4WXUJ+t%J` zA2&#vqUjqwDK_Fil=a&}I0PsVt^;(z9sti5>y4=pt?;Va26FnLG-;<1ACMl(r1S1K z6)QlCS_ampV7^`6m$)t|Nll!o5_inhbb?i+s2?!EDKxT9#O0$=h*q(yT|=xeL01x^ zHn9yhc%AJC*3+aj9TJ0zEHZKaYTFbozAZ}Z8>YpZWEM*!7+~8PT6|lg#lvJ7+Sq>5 z6h8_LEuK4xABh&9h#w{y2adm*>SN_NfrGFgeNN_KOd)OPgfA^oEsB}7gpRT_Vk|AS z1r%|@+I~=l2w5Gn2NI+QTSY!C7c zXkyAy7*~%(QD8})un@K+={hFW86$Ag_Lwnwsa_%%3DMVAQ&1l+V zS2cWb(_V^3A&xU|p>_Y*Y^I}i4leNf_M|!|QM7ACpuvo9xDnDSK$(CyH?_mI${Uc! zlc+Yy4T@x&!mrwz-(wCF_uGP%+_uNkgG^41r72gwah*1ng1ARV=?FCPJDQ?kp*2{@ zA}nlHrP^V`V#T)v3{6de^5!*yh8mD&RAi2C#V8wNUOEVv|BWYxfPv#JcZ~=gRt3uL zn=K!0sA32J>I8XMn=+i&@$?0KE z=V5PD@IM7WHj$`h>=LBy85J~s(LzQuB0E-={7ZiH*nd9cmOf)eY^;I?87azQohgh? zqJv9yWs7i$^3(Mvd57dA6>fHr>&SK#5|z#OJuk>4+L@@ZMEkUS;9}UtLY-XH1d06Z zj(>g?N_a{NK=FLOgZYdo2f9FE=2pvuPUjNoDHakkQCi+f!a`*_{RU-X)?u}qHR+Eu zcZgNC$y#j4Xi1CHqK4^=jF)2dPO)w`xGZ9S^fosO4gFQ2!|RmLH#-qZ++>{HXtHt( zJTZ^65(tmh=3kuwW6JuYz|dx@#9_#3p&pnbS|kn`CO|1CaWH`mdD$Q(#h4s@qM5P8 zp>7exCPBCp_9McRN#qTgA1rK$k#X_{R1Y-nz+q$f(uBmuj@gO4k#xlHlSZ7JaA^mC zliL#+H37go1VY>1P&K1Opij^LR9*g!_3 z=kL^zJK;>Y>02`9*lXfeNk9NlL>)VnL`f9ob{hbM?N_-x(NDz6FzyL+NU5}F?9|Na z(hYv)RlLQCM$`p9-S+1@tTD+kh<>K5j>*dqW{oUUuF5dgydlatv`reRwzk$J$aVr$ ztB~Hv>8gE0;+FGfo|-P}Cx9@#eFlJgIDi8{p=yy?1lhg(W;~%zHd{ zbMjian0F^nJfpdrJMr9Ykyb%xS>_uMo;r79r9%M;+$Jl640qBif;d1sWq7j{xWF8w z==2kz)FyXqcyswBxEe}Nng2A0UBa?LSdoF)@TT=(79@hkK6jgITC~v`})8a3rPF&5YhC;y?+;oE6lsgldsv2~z@k z9VTZJ%rSh%Stpi2RE}Z9Q?LZbKcAWGCLzbl z>cT0h;OWURyUITUaxB%d@@kM$v)SFnjcX9b0F_a0^o~lRE7519%~_f!C2=o@glT1G zrbO&`8fDVV@+gqi!)*hsf83N?F(H?^B;bbstm)Td@<>Y+?qm*Gj!#;)hHcO zrs9%gQ8JxN-xNk{0f~-6J10*MNk@ebfdF)-1p%OjmPHdY-6L}v zDO)3xD2N%rd@~CgQpEgKnPan{aSYSL9N5s2U9Hnn{<#>AuZxvf{=UxatBNyIM^*7Ah4qC^KCCe>ermv_1 zTkw=&oeQ~XbPNDXBkfEciq_epjQ2+0)8<+V0mp8gVYOQ)h#7O_p!`IeJ09*abU+`W zw;}rr!`y7+oON|C%hAO2B+-_>1)rvavKoXL@h3Tk5V`ap243w`)=2vm7qGzc7SYqJ z%?Fn$F*u24>WIiV=)*RiV9ZElawPSz13gAJm)Uo25G*Zt=NDB)47gcb&AXeGU{{Qx zCf6m9GIo^L?yYG!vG_(zR?{J%>BImpwh{pV!^(EQ4hP+!W27ORS!3i94{m8xaqR?GB$2687Yo&q!#sLKzZw_s<4%) zJ~J%l^S-U@Y#Pse7O9e|v7a{kQ0Td_oi^23&PA>thD_!kr4@_8Qr|W?791K-*bWpl z-d7O5U@*AC<-Od&V6$=&I2Yp_p>oI~dZ8r|8eK(ABDkt|S+^sUrFK2PUK`r+?S(EC z+5$b#Qh|tshzx*@wQ%L}YO(fT3dL>Y*w5n&^t; zaJ4#xDw&?f`4c_e_;-fjTAC*sr3t8qg#I|IwX@YI6o-#SL`>lm3Qq0)m(_dXNHm#j z(`MQO_A%Cv*^Ysk^2>96R(rjo8f4h&)t9;i|9m}1<(M%#AVi}TXs**u#f8}uD=v?V zAkri-Njj*(#wdyvB~)`11@ZXb)9wQUl>-`|;x&KP=By2v!9&0XgfcE`>taDBBkv=7 z|0WZLFk~kRs|$t#HV~akiDBA|%qFFpChA3ho5GE}BnRNB0n4GOm59@vk2Z6R^)iwzX19#PG$-e%m2TWkLYlgERGu`NnfUnv%}LXC z3FZ|&iMZaGX$|jewkVnGiP=*Nxn@h-5v7-) zV+OE7u->|PqI7KV7+5iuzZ%GeWRY^t2o^*wE~FqG!J;^Aj9|7+YG5v;hRT~5!O(Kt z)*4A5DCABW4*|KcB2C2Sb>{Pjhc__2D1%lJBXB~)6l>owXBnL~X<&+o;Uv_=Dn>{H z+9v}ig6>6MiAjgRXQTs3`xWNa*Nl`wC9$BCpU4G87lNBMXSfObbfff{=|;(sw`Vk7 zgp5ALs1mj-_7)?l(@#_JMo(q3WZTF_ypc0|I7dr@O)$aZ!gdj8HCm-cype_NYI3JX zD~Shnp&OuVG6EQL;;l}6n>B7Sm@h&RMMPJJ%qU6C)0rSF_J=U6sV0cm2aMG;CJ2b2 zro5Yn1-kgIqZA;ifp+4LV;TT#YCXeRT!9{Vu>OiS$wjiA^PX--A;J zm7n+uh9Y>02q+b${pxKa5959y0*IGrI2QiE!*LAJja{TLr{mfniqxoE)h3l%O}0LA zeZYUzZ822z+>g$I)-$M_=WL-;f%FfZ&W-S5C1_3gY+T`nRqWdqMlMu}+w-)dVu^RY zBBLZDC{*e^e(kJDewuMkl!*J>xP!x77VRu#9QE45r5NNmTuM{n*uOmFMd#bs=*}N- z|MO!HC416ZNSMtzAs);k2CRdo1a8lu!$-J0sAcXg1`do)DdLnMs-Apzyg&6l=KU0w z($uNU`FDLB=32gq%->veaaY!Fi)GXkn6IVw8rHjs3C^Qg$-!hRQ8Jx@@I*VMN>>kn zXO+X?8mmyGa9q@zCf2)6bj4m{^>KC#J~Ge+;ub~8i}$v=nqBm`6W}naAfTrAO;ZFhpbw(& zIR(hXDqH%D3@Z(!DdfpUO!iX8pYOqV^h7}iDV)&9Z4BN}!MPk8R6j90L04NbK@{&8U2=+aO!fkc(zeAo zO{`ciP2O`fj_ERG7Yn9M%Ptn2m62iak>x{X2dl}-ZVQG7@yXkX?0RJLyPrPfF=N=s z!Zrf=5|3_!h6~*W4Tu~b=1Q>IBF&>GNMQ1ccG=U;s>;#WS@rJ!q9fW_bskv&*aMv8 zATr#`JBh$m7fUQd2WdvO?1TlC*3)VmWrIo9edn^bL@hT%*ai=3%-d+d8i81 zI?!hL^85+gr6YytMhDz)CH|djzrlX~fP4ljK}KTCv5Zx7Xm8ANaS%?H9S1vk>jJD* z2+QD<10Oj!D{@`1yIvGSeca?m6(7WUBybTJfTW{1g|~d;E{%+ zHGC}q6Vo0NSrFj_wmD1?+oaNa#5lv?Z?Q*AV^^8qZrhibF2~k{SQO4w9!zzU0dDB- zuEQ)AQa;gxWKWypcBPSgZiO5NL{@aBN_Vz0(8D&8ad4Eh3>>M!JORK{6Or*?|A2On zmHU4ggO{m?#6vRdfgGJ6CzuY`09$n4(A$3L=3Nl)ZQSk##J3!r8L5GE7N2*0FQG2h zGB&l4$$SHJG|$;BO7*rln|Tk+i8xQ>1v|xFq{x=qkm>qe(W0-+gz~R%JRt5W*KnQ3Lz1r z4!8`g#2e_Oh{EFJsEUj>J!$97S0^7f0Aw}8nyk)eRoTBko1Xn)9@@-s3mwsl4TrL$W;oV{?w}1sk#JFc zX=e`|CX%=w7}iQ+Zf!cUZ%%Tw3PP)fs9Z(##?-7}M#4og7Z{bcCAd&SH2^YvC24h- zi?(90rDtw+X`{+)TqVCrmE0azrRh?(Wfy`CacfLR*4&uG%uL`DF2!JtU`H z*h9verDVr(KHCIIMcLq?c_amr(pH{HDosF2)8K<5`qS|Q*C04A@M|72~nBl$({y>o2m0LB6upF zfT2FN&k8&fbEuAk+R3juug!~uU#_0kVypsK?v}EPQDY6G@*2;M5F zmS6dLQ2uh@c4M0aEYbv+n+yXab3qmEVY?y)Q7FlyktfzwyiO0O1i%EDmwge~7Ql;U zvQ0$PrCIPO&*)WK=4)we0Mtz^t!xo^qwK*>&ti#fQwN~)G=;5xMrBdWBzlM!9Wgn< z<0*RVSFol(mEgibWZXwMHq=}aMzrfd<*#G$>9@&QrWe{AOYU~BJel)Lu^qt;BCE0& z1B1}UOhSuDear=T3i-y5cmqH27I*+3=2jt?UvpnH5bOknBs4Jw2$8~Oz!_=b63f>? zLVSM)!OVJrRwHi4XXMpTm`58WyDoGHC?}KnFSSZ!fa@{=pmg$jSq=OUH-ng4%`q*E zh%kB743FY-cmgl18E2#cx=o+jxnankuKTjQ+CcLw}xS+pP_^^ zfgS(F{fV67Am(;faHy~DO(~AujFRHCv5_@Jv;s4X6{p$AYL?krIfs3M@3g}SI<0_) z76{N@2n9zFXlMum9`<;HQD~5aXQ>DqK>kUOAs9jB3=N_kW5$fLfRFM8P!Spx&<#!R zcLq++nH}Bti-&~yjCM?hY%Fcb**k+y$)dlp$Z_|PXCdF*TL}EdDOF4sH=5J`tBnow ze*70?eLs^tq<@QgDA+Xr4lV(ZJW#ATqroODql8PlEeT;PAeHPSngHGf{v3XO#p9U_ zAcyze5WN>rITSp@US$uqzCGRE7N@)wQ3gk+yq#}vD^uRWI)o%s-m<@Y_v}>6m>2?V+wy za(%}>DK7Z9PY>89+24=*^caKSnQbhZ3~n%a=D0Lpvor)$K;S2{7&IYaY#9l4p%>zm z6iaU`JmUXHfCmm;3SB*eK6m?S$pGhEqV zeP(^Aw)+PW)~g8J6=B9Fiuo57R;J)48KciDIM2%jQ?(4H($oK|-x6f`tS) zr5W7N1YWnuBPo$OAI({e1K;tS)18l~GFxqJoGdyemizei*}MkpgPQdIq)G5e?}nU6 zr3fR^_mbgh80nDvZ0r(I8)oBkK9G2%s3{a43R#$nXoiN zCZ5ofM}g-Xkne)1Gj;BTnjbxu9E0(He2+GGoP}XA0NP!X-O6NT#{eSa1}v6fa?-X2 zG;yn){j265){+k&+926(Xhp;6pG6jwGkQCw$m zX`#4oXWyw5*V#sM>X|yh_VEKS3rbl=#~F2 z7vyo!f*EGJ45ET|FQO{85Yg^%KDsWZN;V!gYh@<0-tp291Qycb2eKm=@jSV$WznzD z2Ek$!F1I<1QWBtI;-j|q@;G1g$n8fD$$cctgv{z-gLEWwCQXK&CA+C~wpnGgZt8!C zIL8nZ)B>0qr|B1=vhlO>|dzA~P~9IgX<|FeB%Co+n)+FEgqN3ofI^^;c?}ETk+BpW{qZ zz3-9_&&1U?=x|A)tRM@QO^AazYtQ$w_ zUQlIQPt!vBOX>%XqpRjFygc+Y7Z919=xMnza+V^p9qewfLoju!i@zjVD#yatPR>T z2P36=!Z23Izixl@X<-MqyrI3(QS0{HFefAALS8(?cL#+opb(N*TTZxsqhNB^#T&e3 zSu=Xh^rA0FPdPty=j`rut-*_9>a=SO)&p9DJvr?*5~e;#RyD`l;A<2-t9=3e74ed} zgimHJ5e_;l>nytM6lCdFGL7gBxMhkGt-xpX#w>dQLtmk+9ZIX?$ocU)fv9wHR;!EZ z3D2R9@odm$Pwt&|#}Omv2?vm9G#jqvFtu1brqTmIqmNqPgK)wyq4Swcfk$3iIFY30 z9@ayrcHM=#I3>R=dd*$;eZw1zpwq;@qehSh1lH0U{a4@j_$$#(;7pn_P> zN7{k*$#iHj?^Bw`lGSwclnm*TRwkJ;Y83kQ+PPrW`-=8v}CsBLpwZ1GF>@(zpy_WmK^Hy zPL@3iqoZL_qA5Gq#4VJ$ke7fp^f4O1NLeo|)i94WLtb;pp(}>!a-38HY4^%o%}Xj& zFvFf1DGeE_(#X_^OwtIHdYKU8Mo=8$#U|4|sgRE{K9)ZfAhY^9Cya>)s;h$m%}fzN zd)B~0pcVi%M+OxMZqVRuOb@YbHHZ{n1!!C9D41EQhXoxNK_eA>frkaG%(tST-Xdqn z!7(|@G{~9c07uU3tC2JL0s$MeQPZ0DF*)OIi6du-4I*dC+-@@-K|?glK!fFp#}v)t zKA~A=n5LykO6_e+(;X4hx-QBQ5i2iqRuA7GhV<`4u>>prnH_z`^_TmYF_g=%&ck$q zTg}LVV01FxNv11W4jl35uix`e-^(mzQQY$0xB9-F2 zK;{31<~L0V@KJ4RH1Lt`H@1bG-)Jav13Di zekX)bAv|&y#Zng}G!FF(*y|P;Lc!!`io=<0krL_-J|^@5ZWKMkeW@5 zSvhe5L90_fC8F{Yfu1d$;gv};C>QaVAW4;z8zf2E?n5f7vtXsh$4BFRVv}t#6po1y z0NN}yf|d3+G=?m)AcvT!p{RrK6v6;;m%lowJV;c9NT$8cRtxm^yD0ISoR(n4z1R!wOKn(Hz0Y6G62l{J`z;)IT^+py&k8zLzeNsX<=87PQwR01yT zCLT2S-unS#76zMy zCGM6P6Wt6i;GyKctWrbP~!UvI}FWS;e@eL*}zKuWF}F zRe39&d}N6cNHB=erh-HX32QgsfJhiOfWZRCWd{Sb;=|1y;%ixnd#Q7mH5)X%0fR~> zVh3!{2?!MK^APG0UmxvZeo%2?0s<_IRnaFT{G}Ttl4oB& zt}iy+NmH2_+7-f-;)j~eE}yX3PzW`fkyNuOS6Xtpwb}GW2ddDlkq>4xJdasZwoEn% z)(eGZv!iWQH*>3;rdFxS7-alG)7FrONzQpxuvsxfGUcjmOe%<&*;SD{M2zh?*4T)& z#8Zrqz2r<6oaFBGf?|Anfn*gJg9%aW*PlASKwp@-D$Pz<2bJs?1KS0?*gRaF4M06= z0DE<+J#woiFA-8?hZe#FY>jq71hVoT_zI2AqFP2e?8VdVO#L&%oeL0eAD!n!IMUhL zA9$49GW;kGNuECliU56lEY6mv)mb`|cNWSB1f0ggnJ0biFi%N33`43s4WEZ%#?O4WM~1kw_CU=b zF5~o7NGh!bLJ3bVh8<>7H*FZq$zp2Hus5b$1R8DnqL_!MUxupUNuSOdh_!lE<%hKk0Wnk!W9d0W<%L~4c%Bi z5=dcyTtpd3Et4jpsJl$v#om*?1Qt*&{w247TFfuX7{s^6|L^*`GZykMD zQY>9EOJ(DmqNSX43tC3tA@;?1`*aqX$g)aFbJa5UAGjNAslt9R;aTLK*{prgEZC@T zZYOyU`7OqJm`JA6s-=q|WA3v%IsHTVNx5afOT&u-#~4u-b`Z@sxXgYVkt${<8JIB7 zi-HIO6oDjyoFhtOn1pTH_;We|KFc@(aga)YE*Yc~WTqydRV@j$!rWD1B@`mbR`f}l zQbsd+nt9LnG#;6ILcY;BU`*dkUO_POHq#M5rhCY2I?GBVdWWrl6Wz;mYKt2;JF1De zSfW_~D4C1^qQi5Jp|Tp~lgE&-Oc(H*I=hAB7R71FN1?%v^3gVkrWH!Y#uVeWImMJ# zQw*+e__~N6^}$T>oB*}o%*PTRkEQOv!~JJsqxU1+e>T3yNQ9j`dhF#7gPhp3H{@0a z81gOT_i{?+sB&$WA$z~<-95oRyOS+^r`;{$?uB-@kh`nwPEo>}wZ@9h2zxlzj#lC& zY_?5pkda;OWYVb(cfTTOL*{AP;ObKwTzzW8X8DGX?{iXz>QflA>cgU-`X(EFCb;A& z`|NtE`drPj2D+MMpWiGKFTIQ&p#zn7Lsyu!AJUI_3nZv9iM2(8a~PDFJ^C!m{YRT? zJ_u=#d^;MNiZQ<1>Nyj1}xdsl;d0 zSych?px5x3e1=Zg>7i69nY~I>p-4EKT4@w59cHM2aAYx=M%j=M^;^$!|6sF`Y+FF{ zputVnaaYig(6tmmQ0bId2jHj!O^4WQGK1HMiQKgBPi8!DF`^zX!vKDh1h6T*QsM|- zF+Itl&oN&I@y6<~U3;4Ds9vPE#!O5?}ll+0Gn5IsoK`hMNaG1C^_AJNb7Y>jB6t-&0yxPz9X~Z=?BgC^(#pJD@p1 zytSL2&0fepVmw2Z1x-@ufz(!5t5?3K%-J6Pt?@y}LY{SefDu8sc5fM;h^%K6+M0OFM@5b>qOquNr^lc7biZ(F98~nH# z8Xo3Z^UqW>=rdgpK)neP(|9TjlhfD6n9gAtqq5$}z@5gdHqCT*vI<8XC|lVD;>2jx zCS3({uo#O_0yTy)Fg+tiD~xe0YpJ#gtw^I-hLX(IG9V!Go7Xel>b7*NX9#DewwnIL zt!_KukdC?3(&`k#&2X)5YiYHx?f6#PlxuBuN7Cw!sja3}SU>r%yoJ^BYCyqhDl)-p zS}}(}9zms~kI5QLTgYAz_6YmY`3!qR&3-fNvD0=T39%6oN(}_y?x)p0^Jf#20v>{1#smpfgM7fPX}<>`lEcL04`Q~TSw&;MWG9( z>21(VfvPlZ3NqW4U(J*!C<{``JU~cPEGiMBP&*LYF<^Q6kkn8bZ27itz}GtsLxy)^ zvl>{ma}x$ZSWF&#XXg`SX~Ka1NwPFV3Ni;i1e!GzgJ)7p`jPW~jhnJ~5Xx`bo0&pb zxvoQh3#RwcI|!Vqa~|=rLN88tfF~CjR*Z$(%vPe070*D+yoC6w1HO#7`w%y3HT_x3 zhS2kb5V6I&02>sKRoEbdDnxnPE0ejQIb}~aHyZV&=0EgR4i}n^x7F<8#yUKDDoYw# zq{H>Bv*^X50U%R9NP(nHz%BrgLdv|PucGqN>(mBQSb&uR_$?d`^?gi%dttm1oaY4T9GLQ0!9Yu3WH4|&)KOT(@MS`JR-k`; z-+up85K`n^S0v+s1Fs259X&3SV=G*(LgWdzNv;m2GVt+Z0NgGW%mL7hBrUMk@n4eF ztS!0i$ZjU63G~-WCb$j>NZ3Dh1md+JGLNE{PBRvq8>_MSVnDEr1t)<(Sv2c&;0-iK z;VRqJE;DljJx-y7>Y<(zP{9aWg2`$@=@k3n!WgioOcPE4%{&0U<@q{&6a`FclhvB1LPzVl`tDey_v0L!&fj3 z+$P%0`R$y492Rd4;XvE(=bNQGdh^X6-L%KMiXT zF;TVH<}DFd2JuY!ZN40V5I<*uP=Amk38?`hne2L%E2kFkDXj|3q?O6|A{Gdohz}sG zy6?&AnpV3rWTp^tOgTB~DzEEuQK zxya4*O~Iz}0l|yH>;b)HfF$VUX*u&PY&&RzpVXZ3QIi`iIb4m7BSENYC!|w4&~oh3 z@|+;G&ftTs(pG6{Oc>h*5oyCh9~>)DADhFgJ}PvUK62guCqC3@a`GXseC&3=uRb(9 zSQ{Lk7#iO-FueP~_-JitthRf+e|Tv3@DNYC$M@Cy_wE}X?;ou1-dF1%+R@)PRv+rC zkM5Zm>Km)|^^MlY#`<}2XkuVs_wd-@jkU4C9b@Bty}f*y7#JVx?M;f>;okK2UL2Qw zwWV0snr&DAP;K;ZZ|?^Cy{Pr$Z&_v|8#g1vLu2*cUh1~Hi+10*yxF2_>!V|Io=%L{ z_e>1z*juChgJXMpdp91c@17X1Uop0~wMFBHN9v@x0x;C}*0&7p8J;Hd^C#+~hfkDs zXEQq6n}e$6*t|Hg6 z(TTC~-OJYQ>grm%s;9oHhu>YbUCV2=?p1xOckS8J-L*M=|`}&)}9=>s?PW`+3!T!<1 zboO9b~X6ckQBwU0vOK zmL(Xogn6-KIn}PTdAI{rnDa&E*;z78ZKmL-a#`*9_GrX!B_Q z%j$hwY22QH;TtcuQEkj+@2ixdar`E~8cRkJ819f zvhtzsCSrrAsNsWSdyO8Y#QnS4-TNxt`5j)x6iA=Bmp7UCz}? z{%PiF_wqH#WW9m3v#9@eel=Hz57>n8W^$j30+a`8_(*1oSwZj9$;QZKL$jXj^{=xq7tLq~Jhqn&Z25zh! z9&=P_V)t%1+K{N<#)FW4&Ewj*BO>*&D7iaOKWsBQ;ijY?8Xxmcq0VI7=5T*1*RvTn z^+$gix6`P6~o6x{Hh&&6C(rtyCEP+BHpdz zn{YHqGcj~v2!;|Ktc~`=%qeJbh(tA74{KaQ!^sEH{he{%8~9a!Nt$rgF!}a2z6q{T zU!R6^V&JOb8@KHn-L`MQ^B&;aC%8Vv^)T1xxW34>ad2e(FnO*V9w)`8|*NG5F+0Ww=uIZATd`bVo{=WK#!`IbEhtuP8 zIo}XMVu7PsfZ&t#{|fGtFH|^;oQ7a5V7J2Y$|?0&+T#m%uSqL72>x5S(&KRz&(Yq! zNY<{B^tb2pZ9{E*_dZHVAXgjPw`q8Eur?mQ*w(*ysD@@zZ+Yv6w&hhk=!b!DZ7|Mk z1n(M0tv9RWi6PU1ud4M+_t+?+*gt+a-KMK)Q=EfV)de9FEYoSWk!H)T-SA!0toPJM zQKE;2>XLSw!mU%lrD6|Hj1Sh4uF4w;dS=DjLEldY5hb%G&;FF>nNyx0CT%+X z-%NQve@gnF#NW5`o8Z+o++WM}0{&pR|FXp-$H4d&ZB6e3F4g1H!AGcUSN)FLBjss)EUb-NbCTxq{Z7)0_a^z?%)NM|Vc#gM z8(c_C9MX$oMMw0++e5m9-iwy)&6j^FK+*J?j5_ZD=p>P|TD)yM(UUc0M#aHi`SmWVtX!TflczA-l zp>SfX-b^~mxE!pL65~&;Z)te>FcKj8E!L>;(mFOU9$f_{U5tf$Mu!J20W}%&(1;uB z0|VjM#E3)!*+|AE@KLqwCriU^{D#AOLU}-Px|`zKr6^0^AG(R zzp-9NxS^LrOX`PEv-uRlvXFP28OFM8ty&shErT6NZ(N*oQ$>!}2M$X@QfqeA_tg&e zs|_?I-J_-9_TdnXd>mtrWwsuUj}A}l8mNZ@G=?lgi|M4gJrYWkRi{R=lqEQio#6}W;XWEfjCG9-hasEl+r zD`(%tU~QktdvsuNd4nb*&$m^_!1{g$}w<79v) z5qP@hdk;{iMT&651j*#9=WXV@_(&{A zHa_g*{Y>7+{Ro`^$()j~0j^B)T{?5}T~YwRds)4=p%Y#hIzjTnyGbjZ>_L7_#*EFO z`|5`p1wO(zwe#Ybydd^6EZ1z`v?knj7^|pA&~PI)x&rAXFB)0hBayU8d&9XEuf#Vu zz9WdKqKj65gw&Acd+SIe9dG#d~pqrihtovo3Em4Q%kxfb-&nvm z**B6jzlnWgeVq6C{0cYH_KoD*&3u!LasyW)tBi6##`SDum2vXxPqNAc*Y8qR`8jQt zuGQj`;Q1hz`Y9f9O9At(ZME3E%vB2@p-^0A!+dou~p@CnGdR|Ifr0bln$pUW*JTZ@(c>4hG5#C;o7%TbHlrNJsOcJ%%jG<&!IT&Nd zA`ITyE?d4g-m0LLYfk)aZO@gIC-HQwh6w63?o{m~wK3$Al=&gyDV{g;%!>I6%>LkB zx3KeMeD+~BkTln{NHC(YNn*--!~{&oCcw957i*?E))B^ zmnJnE1Y=V~=$a9mFVYRL0v#Hg*u4+)k&C%#KKJ2!G#A3e zP(!CoN}*5t;yP~RS3Lcd@$Xys6}|j(ekJ3)m*125wXuyG@i^}^4}Th`N$dv6`}V4n zC#6R$U;L?>)(H1U~p)7s9yj^ z-1E*~ykzMzHQ^an`}<9n(A6oiGh>HQ_6Hl0Gu!OZxjv@E%`kqygK(RRyx9wdNhV*T z_z#4L5Q+nWL75_eq#r8^OE+%agecmNe357YwQvBcKHUcd?_K-hNYj0Ls`8$D*?z zX-li4FwkQay7(MCOQX7bNo(=MU9^;bu`7MkZ&A8cbW6H;Iwhc@{5M)MJ~~lHXx_P} zHZZ0e84kjoGFYa1eSB}sm`KVLBok6tAKP6+V;d7yg0MCi%Fx8%E?7^JOuAZfKY>+3 zx}*JLjA!Xq8(8CJ3Exge)VvwgjirNXl99lEw6A~nJ~P0XHA^^U&6A;Sx6@H&%rk|k zPv#+npCxOSS{mrL*}*6S%@r#-_9HCM1JZ*UNP*d6k5E<|--X7Srzs%AFRFOEsO!~S5m)m3a_$#%ZE%t>&?fk902=`5_4j*g z8&FOJ_xq@8H+6lBOET-TtaCd3-t>gM@+lJUG%_(t;8T5BpBZDE+`Qo2is`KELS=eKgdKK1+-?$h7@WXkh9rab@Il;>CSd=^(yzGTqzQ_t(UpPzc( zzvm*Q#BzCe zm+20W%LEO)H^+7V8@3AR3P*VsER$bx`fz9Sxw6E?q9otN#?UkuhvbnjfMQJky_4TJ zPI>nxp7kf3O7sxn+aGf!whZBy=aRDER$}HaLlbuS8z%bkTMgpcg6M5nR`Ej8PVFm_z0+we zU8_<%Kpyc!%~g%r@p)ri7&zTWTEXcLxt4P=Jf<;T^rKII(s`OgLne!=5cb97Is-hEtC`@MAOGX8I1N^FM^ea5;Nla%&u*PnwF(nT2wUaSX}G}lukdh%{3 zX*0Z&O+K_gH=o>n{4eg}UcTQ&TD8k8DK4lPF;|lBhypu?C&s|DUGfPdf+Hf<`3&kn44eHzqfz`udAdoZW$W4d=~Z5I+h=zOpR?jm&W$PTz|>+Ke!SYUCM`rspn7AnAJS* zxbDgni?T%>OZw`#m-i0TVN~5qm#?s)*0O=!7Tp3|S5{1Jl{{MJN}h$|>1WyQ($9jO zXh4#Fn0v{y$@2*JqRq+kDEBswaecBu&r5wD=U(z}FBK$#z%NQn=ASLSKOz| zl)SPf_5HQnpE>1u8P6A|-iddt;#z#}qKnp@ect+{?A!G&mF_6_XK_j1OVT8=q}nBX z(4{sd-__^MTswAL{fx%tV3%fw=Y4UNqZ8s4;=#$Y+Ma$sf6DW9Jd2m^+%rhjtzp+|rfgJp7h5cn-Hs6ugOp%KwYjS+7R&p5el;(z;kU}~jr`6^ zweNb`C%oP@JUk#weP0>*vX8Me!O<* zmYb#+L*O&GBI|v(Jog+J&$^3{pkMrw-rk!O*+|6Z*uMV3-sgmXO+u47?#9Cl!oI^p zA<`^@TWt^4phKeWVKu4y5t!)`>aK=+h8BfOE(!s?nZ{%%yD7XW3~#|za;VYPzX7mH zzjR>W;Na3{G-VJ8+?@Hvnu_UhyT~v7EqU(eUUOzH{6>E_nILZVpGKF{^To+UJGU`L zm&-_0@7pvu9`)5mG&c-y5J-2k+6soAo+pxllRCFCW*VbLAsY|vs}TYx831->v|Y4R zmvHIb@T2!~eU$5AuCH=2Z1zpx0b}FRv%aYuUFq+-*G2Wmn&HbbAiz{#TG9fC(K zcH~*mg~huz!)l$Bb==}e??LkEPw@C8*YWj1BdKegx9VHXEPXfkN zOTV)RyO=eFqst<@$LbGVc)Er2q*9GZe|^eSHzsUDK|O-1*>vqe=4PX)v~0&{t*`$O zE8)g_Aq|*m2l^%0I)f{sM?Kv6;^m9O6+JK6iLC7$6!iIz*Ezpq0_%nxN*fbvz+c9NR%3fyT81S~d+ySuO;?q3XL;T+;H$sh7bg;)Tl6<|MM}6+9?4`yN;BUj7rOCD zew_}4OfDS&CE;^cy2G2#bMFRQY!w}DmtwNUdJPUj4DiA@iww~&A#afNsDmHxtNfnC z?}Zn3UWk7hQk=3P>>Q}?84trzg^lingvzE+3c5rX4nh*$DS%DN|!CI;}a;b*PI4xn0Y;TG_pF`N|b5SFT*OvS;P$m1|b6UDdU!d)4w)D^{&swQ5z*s@1F3tXkXC)zjUx zyk|wv%AQp{Jw2;?*7U4h-L<-V_43s#RmElpfY^=m15E!o!c>Ub;8dAJ`&!;8Z1wb0$T-#>x?2)94Q)!>cXw=PPvtpd7clo9gdyHZ?gL_W7%}lByI37D6vBEmh>LV{t_wZX(8;K?b0=kA zx1nNk`#yff{|EThIN!{#_>V%k;;~9%Dt*KS11IR@y+b) zxjn0|eZg(-{lEu5x$3c#Uis=jct^Hl#;lXh?OxftanqLPUAeWde*H&3Hh)2(SSrsx zwP$VbeSh)y|IoJj&NtpyC|z*Tp8hwyY1Z(LPyg^o*X{bxC!XB4{ZIaM>9TVcUGw(4 z@A>n0-Fx5tAAj(3`EvUyr}sX0bjNJLTOR_W0n|yD6VRm75QE_GY%8QSzZktmo&b?sc+RW}^ zTh|;;o0^~V*RRQ5mRpuB71|2x!*jCjZ9SRZ+`K}zy>Qi*)hjwy6qXiCN6xb(qyX%b2#nR+^URvE) zF6BE;?#-8a7H3bL{Ofgn+uAp`l{Rghzqz=rV@shl`Cpq#r)MtRvN|)PSjw+0l#cYA zR=6Ou;97s?@{T+Hbk9V2@^i1be0RsuuF9M@y!ZA?@A>Q7*A~vpUY|d^w5hZxck=BY zdU5@-?ApSt^+Jia{JePd@6Ky`=MRponCYLMpOGyddEKkC2XY;mwnF7iJ1=b;UpM(* zrLp43DVtt4yM1>13))VbeC3f#GcVsT^OU1kote*1e(U_)MV zk#C%L`@c;7?A*(b_bjG`7_(IYv|mfV)e=++uKj4Ej`5|Fn}%)G*Ue?f32C&QngSyEo=cV)VR z<^H|FUj*;XzOVR;;Fq~y1;5Tb*>?Y-!>@h)JG)-+!q>j;&ISKCW9DU-|MH2Y%bt7v zOLlz!=PO%Br*HrA*S_8{>)hT8Hg0*ri?4s_j=uWq-}o0~`TUo^d+eVd z@0hi5OJ9BR=wCkgsZW3F(Z~Pej+ejoUGMqSr$7J2uYdc0Z+`11|Mm-C`}&qEx4z&- zFWvF#KX}83Kl-sxKm3I+K00g8sV~0%zkc@XCnpDQ_^0pAICE%t!Rb40x%C4dyzLVY z&N=mrGdEp&3L^>2A= z*Bj3KpO1X)$t$;B_u@ivX62k^Km5_q@ahYnyJ6#N^O~9 zroiTJ84jRiC&#=$vBl=5qeo7ix2ynIIHy6lVEChwTLpfsoL z^6cbm^6z_B`>EOPd$LEqeKy-n<|f}$Ir7tjAD)-z>+7?VpUTY7%=Wt0;z9SoYZ_MrV zUUKr?-bts1XSRns&-~HiyU#zbD_lJMp2rpk_w8JA#xHj+^?n`pyyMB8J-_n5*W;Hu zS1;`N-s<Exa>hNEuU}ca>hb;eJb&wO=hbh2@Sdx^uh+KKzj@C# z@7tZ*y~nwM8S{`H<0h29Te^tgZ9bu3gWcuNqB0{-(im%C1>_;qj~ z2>k4G{4?gixZK;;=FiRgZLq7{`I&Xa^XB^DYBFStjCG+DobLB3d$vfDQZSFb*Ve+< zvH`f|pAlr(dy?lI3H;f?9Jn5-DZA(wGNs@Q{{r&1lXDTpQ!2ZP`q@HIwo=t3Dh>3! zAXrQLl3GspH~U$i!u_KEd_O3(7kBwVTe+|$m`{1Wzj}sGjk&VFu+86-_470;I4#I# zDp}5a5Ar^%O*3BR^xzEsThA6^ML#IF`Cz<15mfzynQYMJ=QIBsAkf-^N(_qmQs8%; z*`4j;Ip;5GYiDCP5@go!k&Kz%Vi3GF<9GN4RhS9Bu-@}O+v#Oq@9zw~e1G6&{ZbfQ z6+jzl`)NVWe@ig$qz?b=;%VijnJ)Sk1n2k{1Nnd*JB$7@e+8woCm{VkFDUvy6xe(O zsY*rak^g=F4|86IUS=0%vOe3@X1(C5%%*a8_9nk)=DGBK=I&nRSapDn60rwXc!mD2gaztOflzw?7@ih8qO@Zf7b z!=UE8Hb3|&BM(OScT!*0=Oov>jZ{9!ECt|R0f6{d&!H)l^0GV?0CTWSRrwyHyE2#4 zou8lSK?Xekx!LFQ-dh@+iqK9hXR#O*&dA=C@m6P-7yTLjoSZ+CQfFC-xjz4H@?4k& i0)@eXw{!AwXTO(CUvgq{Nl!1K>z~7Q1=rZR%Kr-&#c&z` literal 0 HcmV?d00001 diff --git a/x/evm/precompile/wasm_test.go b/x/evm/precompile/wasm_test.go index 3bedd115b..6698e6439 100644 --- a/x/evm/precompile/wasm_test.go +++ b/x/evm/precompile/wasm_test.go @@ -6,18 +6,22 @@ import ( "math/big" "testing" + "cosmossdk.io/math" wasm "github.com/CosmWasm/wasmd/x/wasm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/suite" + "github.com/NibiruChain/nibiru/v2/eth" "github.com/NibiruChain/nibiru/v2/x/common/testutil" "github.com/NibiruChain/nibiru/v2/x/common/testutil/testapp" + "github.com/NibiruChain/nibiru/v2/x/evm" "github.com/NibiruChain/nibiru/v2/x/evm/embeds" "github.com/NibiruChain/nibiru/v2/x/evm/evmtest" "github.com/NibiruChain/nibiru/v2/x/evm/precompile" "github.com/NibiruChain/nibiru/v2/x/evm/precompile/test" tokenfactory "github.com/NibiruChain/nibiru/v2/x/tokenfactory/types" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/suite" ) // rough gas limits for wasm execution - used in tests only @@ -34,11 +38,48 @@ func TestWasmSuite(t *testing.T) { suite.Run(t, new(WasmSuite)) } -func (s *WasmSuite) TestExecuteHappy() { +func (s *WasmSuite) TestInstantiate() { + deps := evmtest.NewTestDeps() + evmObj, _ := deps.NewEVM() + + test.SetupWasmContracts(&deps, &s.Suite) + + contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( + string(precompile.WasmMethod_instantiate), + "", // admin + uint64(1), // codeId + []byte(`{}`), // instantiateMsg + "some non-empty label", // label + []precompile.WasmBankCoin{}, // funds + ) + s.Require().NoError(err) + + ethTxResp, err := deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, + &precompile.PrecompileAddr_Wasm, + true, + contractInput, + WasmGasLimitExecute, + ) + + s.Require().NoError(err) + s.Require().NotEmpty(ethTxResp.Ret) + + vals, err := embeds.SmartContract_Wasm.ABI.Unpack( + string(precompile.WasmMethod_instantiate), + ethTxResp.Ret, + ) + s.Require().NoError(err) + s.Require().NotEmpty(vals[0].(string)) +} + +func (s *WasmSuite) TestExecute() { deps := evmtest.NewTestDeps() evmObj, _ := deps.NewEVM() - wasmContracts := test.SetupWasmContracts(&deps, evmObj, &s.Suite) + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) wasmContract := wasmContracts[0] // nibi_stargate.wasm s.Run("create denom", func() { @@ -50,17 +91,11 @@ func (s *WasmSuite) TestExecuteHappy() { } `) - var funds []precompile.WasmBankCoin - fundsJson, err := json.Marshal(funds) - s.NoErrorf(err, "fundsJson: %s", fundsJson) - err = json.Unmarshal(fundsJson, &funds) - s.Require().NoError(err, "fundsJson %s, funds %s", fundsJson, funds) - contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( string(precompile.WasmMethod_execute), wasmContract.String(), msgArgsBz, - funds, + []precompile.WasmBankCoin{}, ) s.Require().NoError(err) ethTxResp, err := deps.EvmKeeper.CallContractWithInput( @@ -76,7 +111,6 @@ func (s *WasmSuite) TestExecuteHappy() { s.Require().NotEmpty(ethTxResp.Ret) }) - s.T().Log("Execute: mint tokens") s.Run("mint tokens", func() { coinDenom := tokenfactory.TFDenom{ Creator: wasmContract.String(), @@ -98,6 +132,7 @@ func (s *WasmSuite) TestExecuteHappy() { ) s.Require().NoError(err) + evmObj, _ = deps.NewEVM() ethTxResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, @@ -115,82 +150,104 @@ func (s *WasmSuite) TestExecuteHappy() { }) } -func (s *WasmSuite) TestExecuteMultiHappy() { +func (s *WasmSuite) TestExecuteMulti() { deps := evmtest.NewTestDeps() evmObj, _ := deps.NewEVM() - wasmContracts := test.SetupWasmContracts(&deps, evmObj, &s.Suite) + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) wasmContract := wasmContracts[1] // hello_world_counter.wasm // count = 0 - test.AssertWasmCounterState(&s.Suite, deps, evmObj, wasmContract, 0) + test.AssertWasmCounterState(&s.Suite, deps, wasmContract, 0) // count += 2 test.IncrementWasmCounterWithExecuteMulti( &s.Suite, &deps, evmObj, wasmContract, 2, true) // count = 2 - test.AssertWasmCounterState(&s.Suite, deps, evmObj, wasmContract, 2) - s.assertWasmCounterStateRaw(deps, wasmContract, 2) + test.AssertWasmCounterState(&s.Suite, deps, wasmContract, 2) // count += 67 test.IncrementWasmCounterWithExecuteMulti( &s.Suite, &deps, evmObj, wasmContract, 67, true) // count = 69 - test.AssertWasmCounterState(&s.Suite, deps, evmObj, wasmContract, 69) - s.assertWasmCounterStateRaw(deps, wasmContract, 69) + test.AssertWasmCounterState(&s.Suite, deps, wasmContract, 69) } -// From IWasm.query of Wasm.sol: -// -// ```solidity -// function queryRaw( -// string memory contractAddr, -// bytes memory key -// ) external view returns (bytes memory response); -// ``` -func (s *WasmSuite) assertWasmCounterStateRaw( - deps evmtest.TestDeps, - wasmContract sdk.AccAddress, - wantCount int64, -) { +func (s *WasmSuite) TestQueryRaw() { + deps := evmtest.NewTestDeps() + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) + wasmContract := wasmContracts[1] // hello_world_counter.wasm + contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( string(precompile.WasmMethod_queryRaw), wasmContract.String(), []byte(`state`), ) s.Require().NoError(err) - evmObj, _ := deps.NewEVM() - ethTxResp, err := deps.EvmKeeper.CallContractWithInput( + evmObj, _ := deps.NewEVM() + queryResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, &precompile.PrecompileAddr_Wasm, - true, + false, // commit contractInput, WasmGasLimitQuery, ) - s.Require().NoError(err) - s.Require().NotEmpty(ethTxResp.Ret) - s.T().Log("Parse the response contract addr and response bytes") - s.T().Logf("ethTxResp.Ret: %s", ethTxResp.Ret) + s.Require().NoError(err) + s.Require().NotEmpty(queryResp.Ret) - var queryResp []byte + var respBz []byte err = embeds.SmartContract_Wasm.ABI.UnpackIntoInterface( - &queryResp, + &respBz, string(precompile.WasmMethod_queryRaw), - ethTxResp.Ret, + queryResp.Ret, + ) + s.Require().NoError(err, "ethTxResp: %s", queryResp) + + var typedResp test.QueryMsgCountResp + s.NoError(json.Unmarshal(respBz, &typedResp)) + s.EqualValues(0, typedResp.Count) + s.EqualValues(deps.Sender.NibiruAddr.String(), typedResp.Owner) +} + +func (s *WasmSuite) TestQuerySmart() { + deps := evmtest.NewTestDeps() + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) + wasmContract := wasmContracts[1] // hello_world_counter.wasm + + contractInput, err := embeds.SmartContract_Wasm.ABI.Pack( + string(precompile.WasmMethod_query), + wasmContract.String(), + []byte(`{"count": {}}`), ) s.Require().NoError(err) - s.T().Logf("queryResp: %s", queryResp) - var wasmMsg wasm.RawContractMessage - s.NoError(wasmMsg.UnmarshalJSON(queryResp), queryResp) - s.T().Logf("wasmMsg: %s", wasmMsg) - s.NoError(wasmMsg.ValidateBasic()) + evmObj, _ := deps.NewEVM() + queryResp, err := deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, + &precompile.PrecompileAddr_Wasm, + false, // commit + contractInput, + WasmGasLimitQuery, + ) + + s.Require().NoError(err) + s.Require().NotEmpty(queryResp.Ret) + + var respBz []byte + err = embeds.SmartContract_Wasm.ABI.UnpackIntoInterface( + &respBz, + string(precompile.WasmMethod_query), + queryResp.Ret, + ) + s.Require().NoError(err, "ethTxResp: %s", queryResp) var typedResp test.QueryMsgCountResp - s.NoError(json.Unmarshal(wasmMsg, &typedResp)) - s.EqualValues(wantCount, typedResp.Count) - s.EqualValues(deps.Sender.NibiruAddr.String(), typedResp.Owner) + s.Require().NoError(json.Unmarshal(respBz, &typedResp)) + s.Require().EqualValues(0, typedResp.Count) + s.Require().EqualValues(deps.Sender.NibiruAddr.String(), typedResp.Owner) } func (s *WasmSuite) TestSadArgsCount() { @@ -357,24 +414,23 @@ type WasmExecuteMsg struct { func (s *WasmSuite) TestExecuteMultiValidation() { deps := evmtest.NewTestDeps() - evmObj, _ := deps.NewEVM() s.Require().NoError(testapp.FundAccount( deps.App.BankKeeper, deps.Ctx, deps.Sender.NibiruAddr, - sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))), + sdk.NewCoins(sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(100))), )) - wasmContracts := test.SetupWasmContracts(&deps, evmObj, &s.Suite) + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) wasmContract := wasmContracts[1] // hello_world_counter.wasm - invalidMsgArgsBz := []byte(`{"invalid": "json"}`) // Invalid message format validMsgArgsBz := []byte(`{"increment": {}}`) // Valid increment message + invalidMsgArgsBz := []byte(`{"invalid": "json"}`) // Invalid message format var emptyFunds []precompile.WasmBankCoin validFunds := []precompile.WasmBankCoin{{ - Denom: "unibi", + Denom: evm.EVMBankDenom, Amount: big.NewInt(100), }} invalidFunds := []precompile.WasmBankCoin{{ @@ -500,11 +556,11 @@ func (s *WasmSuite) TestExecuteMultiPartialExecution() { deps := evmtest.NewTestDeps() evmObj, _ := deps.NewEVM() - wasmContracts := test.SetupWasmContracts(&deps, evmObj, &s.Suite) + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) wasmContract := wasmContracts[1] // hello_world_counter.wasm // First verify initial state is 0 - test.AssertWasmCounterState(&s.Suite, deps, evmObj, wasmContract, 0) + test.AssertWasmCounterState(&s.Suite, deps, wasmContract, 0) // Create a batch where the second message will fail validation executeMsgs := []WasmExecuteMsg{ @@ -540,5 +596,177 @@ func (s *WasmSuite) TestExecuteMultiPartialExecution() { s.Require().Contains(err.Error(), "unknown variant") // Verify that no state changes occurred - test.AssertWasmCounterState(&s.Suite, deps, evmObj, wasmContract, 0) + test.AssertWasmCounterState(&s.Suite, deps, wasmContract, 0) +} + +// TestDirtyStateAttack4 +// 1. Deploy a simple wasm contract that bank transfers NIBI to a recipient (Alice) +// 2. Calls the test contract +// a. call the wasm precompile which calls the wasm contract with a bank transfer +// +// INITIAL STATE: +// - Test contract funds: 10 NIBI +// CONTRACT CALL: +// - Sends 1 NIBI to Alice via wasm precompile +// EXPECTED: +// - Test contract funds: 9 NIBI +// - Alice: 1 NIBI +func (s *WasmSuite) TestWasmPrecompileDirtyStateAttack4() { + deps := evmtest.NewTestDeps() + + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) + wasmContract := wasmContracts[2] // bank_transfer.wasm + + s.T().Log("Deploy Test Contract") + deployResp, err := evmtest.DeployContract( + &deps, + embeds.SmartContract_TestDirtyStateAttack4, + ) + s.Require().NoError(err) + testContractAddr := deployResp.ContractAddr + + s.Run("Send 10 NIBI to test contract manually", func() { + s.Require().NoError(testapp.FundAccount( + deps.App.BankKeeper, + deps.Ctx, + eth.EthAddrToNibiruAddr(testContractAddr), + sdk.NewCoins(sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(10e6))), + )) + }) + + alice := evmtest.NewEthPrivAcc() + + s.Run("call test contract", func() { + msgArgsBz := []byte(fmt.Sprintf(` + { + "bank_transfer": { + "recipient": "%s" + } + } + `, alice.NibiruAddr)) + contractInput, err := embeds.SmartContract_TestDirtyStateAttack4.ABI.Pack( + "attack", + wasmContract.String(), + msgArgsBz, + ) + s.Require().NoError(err) + + evmObj, _ := deps.NewEVM() + _, err = deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, + &testContractAddr, + true, + contractInput, + evmtest.FunTokenGasLimitSendToEvm, + ) + s.Require().NoError(err) + + balanceAlice := deps.App.BankKeeper.GetBalance(deps.Ctx, alice.NibiruAddr, evm.EVMBankDenom) + s.Require().Equal(balanceAlice.Amount.BigInt(), big.NewInt(1e6)) + + balanceTestContract := deps.App.BankKeeper.GetBalance(deps.Ctx, eth.EthAddrToNibiruAddr(testContractAddr), evm.EVMBankDenom) + s.Require().Equal(balanceTestContract.Amount.BigInt(), big.NewInt(9e6)) + }) +} + +// TestDirtyStateAttack5 +// 1. Deploy a simple wasm contract that stakes NIBI +// 2. Calls the test contract +// a. call the wasm precompile which calls the wasm contract that stakes 5 NIBI +// +// INITIAL STATE: +// - Test contract funds: 10 NIBI +// CONTRACT CALL: +// - Sends 5 NIBI to the wasm contract +// - The wasm contract stakes 5 NIBI +// EXPECTED: +// - Test contract funds: 5 NIBI +// - Staked NIBI from wasm contract: 5 NIBI +// - Wasm contract: 0 NIBI +func (s *WasmSuite) TestWasmPrecompileDirtyStateAttack5() { + deps := evmtest.NewTestDeps() + + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) + wasmContract := wasmContracts[3] // staking.wasm + + s.T().Log("Deploy Test Contract") + deployResp, err := evmtest.DeployContract( + &deps, + embeds.SmartContract_TestDirtyStateAttack5, + ) + s.Require().NoError(err) + testContractAddr := deployResp.ContractAddr + + s.Run("Mint 10 NIBI to test contract", func() { + s.Require().NoError(testapp.FundAccount( + deps.App.BankKeeper, + deps.Ctx, + eth.EthAddrToNibiruAddr(testContractAddr), + sdk.NewCoins(sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(10e6))), + )) + }) + + validator := evmtest.NewEthPrivAcc() + s.Run("create validator", func() { + s.Require().NoError(testapp.FundAccount( + deps.App.BankKeeper, + deps.Ctx, + validator.NibiruAddr, + sdk.NewCoins(sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(10e6))), + )) + + createValMsg, err := stakingtypes.NewMsgCreateValidator( + sdk.ValAddress(validator.NibiruAddr), + validator.PrivKey.PubKey(), + sdk.NewCoin(evm.EVMBankDenom, sdk.NewInt(10e6)), + stakingtypes.NewDescription("validator0", "", "", "", ""), + stakingtypes.NewCommissionRates(sdk.NewDec(1), sdk.NewDec(1), sdk.NewDec(1)), + math.OneInt(), + ) + s.Require().NoError(err) + + stakingMsgServer := stakingkeeper.NewMsgServerImpl(deps.App.StakingKeeper) + resp, err := stakingMsgServer.CreateValidator(deps.Ctx, createValMsg) + s.Require().NoError(err) + s.Require().NotNil(resp) + }) + + s.Run("call test contract", func() { + msgArgsBz := []byte(fmt.Sprintf(`{"run": {"validator": "%s"}}`, sdk.ValAddress(validator.NibiruAddr).String())) + contractInput, err := embeds.SmartContract_TestDirtyStateAttack5.ABI.Pack( + "attack", + wasmContract.String(), + msgArgsBz, + ) + s.Require().NoError(err) + + evmObj, _ := deps.NewEVM() + _, err = deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, + &testContractAddr, + true, + contractInput, + evmtest.FunTokenGasLimitSendToEvm, + ) + s.Require().NoError(err) + + testContractBalance := deps.App.BankKeeper.GetBalance(deps.Ctx, eth.EthAddrToNibiruAddr(testContractAddr), evm.EVMBankDenom) + s.Require().Equal(testContractBalance.Amount.BigInt(), big.NewInt(5e6)) + + wasmContractBalance := deps.App.BankKeeper.GetBalance(deps.Ctx, wasmContract, evm.EVMBankDenom) + s.Require().Equal(wasmContractBalance.Amount.BigInt(), big.NewInt(0)) + + delegations := deps.App.StakingKeeper.GetAllDelegatorDelegations(deps.Ctx, wasmContract) + s.Require().Equal(len(delegations), 1) + s.Require().Equal(sdk.ValAddress(validator.NibiruAddr).String(), delegations[0].ValidatorAddress) + + // after converting the wasm contract address to an eth address, check the balances + wasmContractEthAddr := eth.NibiruAddrToEthAddr(wasmContract) + balance := deps.App.BankKeeper.GetBalance(deps.Ctx, eth.EthAddrToNibiruAddr(wasmContractEthAddr), evm.EVMBankDenom) + s.Require().Equal(big.NewInt(0), balance.Amount.BigInt()) + }) } diff --git a/x/evm/statedb/debug.go b/x/evm/statedb/debug.go index c2b5fb968..3927e4a5d 100644 --- a/x/evm/statedb/debug.go +++ b/x/evm/statedb/debug.go @@ -22,12 +22,6 @@ func (s *StateDB) DebugDirties() map[common.Address]int { return s.Journal.dirties } -// DebugEntries is a test helper that returns the sequence of [JournalChange] -// objects added during execution. -func (s *StateDB) DebugEntries() []JournalChange { - return s.Journal.entries -} - // DebugStateObjects is a test helper that returns returns a copy of the // [StateDB.stateObjects] map. func (s *StateDB) DebugStateObjects() map[common.Address]*stateObject { diff --git a/x/evm/statedb/journal_test.go b/x/evm/statedb/journal_test.go index 27582e69f..e10505a00 100644 --- a/x/evm/statedb/journal_test.go +++ b/x/evm/statedb/journal_test.go @@ -161,8 +161,6 @@ func (s *Suite) TestContractCallsAnotherContract() { func (s *Suite) TestJournalReversion() { deps := evmtest.NewTestDeps() - evmObj, _ := deps.NewEVM() - stateDB := evmObj.StateDB.(*statedb.StateDB) s.Require().NoError(testapp.FundAccount( deps.App.BankKeeper, deps.Ctx, @@ -171,11 +169,12 @@ func (s *Suite) TestJournalReversion() { )) s.T().Log("Set up helloworldcounter.wasm") - wasmContracts := test.SetupWasmContracts(&deps, evmObj, &s.Suite) + wasmContracts := test.SetupWasmContracts(&deps, &s.Suite) helloWorldCounterWasm := wasmContracts[1] fmt.Printf("wasmContract: %s\n", helloWorldCounterWasm) s.T().Log("commitEvmTx=true, expect 0 dirty journal entries") + evmObj, stateDB := deps.NewEVM() test.IncrementWasmCounterWithExecuteMulti( &s.Suite, &deps, evmObj, helloWorldCounterWasm, 7, true, ) @@ -185,6 +184,7 @@ func (s *Suite) TestJournalReversion() { } s.T().Log("commitEvmTx=false, expect dirty journal entries") + evmObj, stateDB = deps.NewEVM() test.IncrementWasmCounterWithExecuteMulti( &s.Suite, &deps, evmObj, helloWorldCounterWasm, 5, false, ) @@ -194,24 +194,27 @@ func (s *Suite) TestJournalReversion() { s.FailNowf("statedb dirty count mismatch", "expected 1 dirty journal change, but instead got: %d", stateDB.DebugDirtiesCount()) } - s.T().Log("Expect to see the pending changes included") + s.T().Log("Expect to see the pending changes included in the EVM context") + test.AssertWasmCounterStateWithEvm( + &s.Suite, deps, evmObj, helloWorldCounterWasm, 7+5, + ) + s.T().Log("Expect to see the pending changes not included in cosmos ctx") test.AssertWasmCounterState( - &s.Suite, deps, evmObj, helloWorldCounterWasm, 12, // 12 = 7 + 5 + &s.Suite, deps, helloWorldCounterWasm, 7, ) // NOTE: that the [StateDB.Commit] fn has not been called yet. We're still // mid-transaction. s.T().Log("EVM revert operation should bring about the old state") - err := test.IncrementWasmCounterWithExecuteMultiViaVMCall( - &s.Suite, &deps, helloWorldCounterWasm, 50, false, evmObj, + test.IncrementWasmCounterWithExecuteMulti( + &s.Suite, &deps, evmObj, helloWorldCounterWasm, 50, false, ) - s.Require().NoError(err) s.T().Log(heredoc.Doc(`At this point, 2 precompile calls have succeeded. One that increments the counter to 7 + 5, and another for +50. The StateDB has not been committed. We expect to be able to revert to both snapshots and see the prior states.`)) - test.AssertWasmCounterState( + test.AssertWasmCounterStateWithEvm( &s.Suite, deps, evmObj, helloWorldCounterWasm, 7+5+50, ) @@ -221,21 +224,20 @@ snapshots and see the prior states.`)) }) s.Require().ErrorContains(errFn(), "revision id 9000 cannot be reverted") - stateDB.RevertToSnapshot(5) - test.AssertWasmCounterState( + stateDB.RevertToSnapshot(2) + test.AssertWasmCounterStateWithEvm( &s.Suite, deps, evmObj, helloWorldCounterWasm, 7+5, ) - stateDB.RevertToSnapshot(3) - test.AssertWasmCounterState( - &s.Suite, deps, evmObj, helloWorldCounterWasm, 7, // state before precompile called + stateDB.RevertToSnapshot(0) + test.AssertWasmCounterStateWithEvm( + &s.Suite, deps, evmObj, helloWorldCounterWasm, 7, ) - err = stateDB.Commit() - s.Require().NoError(err) + s.Require().NoError(stateDB.Commit()) s.Require().EqualValues(0, stateDB.DebugDirtiesCount()) test.AssertWasmCounterState( - &s.Suite, deps, evmObj, helloWorldCounterWasm, 7, // state before precompile called + &s.Suite, deps, helloWorldCounterWasm, 7, ) } diff --git a/x/inflation/keeper/inflation_test.go b/x/inflation/keeper/inflation_test.go index 00b8b9870..6831f656f 100644 --- a/x/inflation/keeper/inflation_test.go +++ b/x/inflation/keeper/inflation_test.go @@ -137,7 +137,7 @@ func TestGetCirculatingSupplyAndInflationRate(t *testing.T) { }{ { "no epochs per period", - sdk.TokensFromConsensusPower(400_000_000, sdk.DefaultPowerReduction), + sdk.TokensFromConsensusPower(400_000_000-100_000_001, sdk.DefaultPowerReduction), func(nibiruApp *app.NibiruApp, ctx sdk.Context) { nibiruApp.InflationKeeper.Params.Set(ctx, types.Params{ EpochsPerPeriod: 0, @@ -150,7 +150,7 @@ func TestGetCirculatingSupplyAndInflationRate(t *testing.T) { }, { "high supply", - sdk.TokensFromConsensusPower(800_000_000, sdk.DefaultPowerReduction), + sdk.TokensFromConsensusPower(800_000_000-100_000_001, sdk.DefaultPowerReduction), func(nibiruApp *app.NibiruApp, ctx sdk.Context) { params := nibiruApp.InflationKeeper.GetParams(ctx) params.InflationEnabled = true @@ -160,7 +160,7 @@ func TestGetCirculatingSupplyAndInflationRate(t *testing.T) { }, { "low supply", - sdk.TokensFromConsensusPower(400_000_000, sdk.DefaultPowerReduction), + sdk.TokensFromConsensusPower(400_000_000-100_000_001, sdk.DefaultPowerReduction), func(nibiruApp *app.NibiruApp, ctx sdk.Context) { params := nibiruApp.InflationKeeper.GetParams(ctx) params.InflationEnabled = true @@ -184,7 +184,7 @@ func TestGetCirculatingSupplyAndInflationRate(t *testing.T) { require.NoError(t, err) circulatingSupply := nibiruApp.InflationKeeper.GetCirculatingSupply(ctx, denoms.NIBI) - require.EqualValues(t, tc.supply, circulatingSupply) + require.EqualValues(t, tc.supply.Add(sdk.TokensFromConsensusPower(100_000_001, sdk.DefaultPowerReduction)), circulatingSupply) inflationRate := nibiruApp.InflationKeeper.GetInflationRate(ctx, denoms.NIBI) require.Equal(t, tc.expInflationRate, inflationRate) diff --git a/x/inflation/keeper/keeper_test.go b/x/inflation/keeper/keeper_test.go index 46f1619fc..b3f24b2ee 100644 --- a/x/inflation/keeper/keeper_test.go +++ b/x/inflation/keeper/keeper_test.go @@ -55,17 +55,17 @@ func TestBurn(t *testing.T) { ) supply := nibiruApp.BankKeeper.GetSupply(ctx, "unibi") - require.Equal(t, tc.mintCoin.Amount, supply.Amount) + require.Equal(t, tc.mintCoin.Amount.Add(sdk.TokensFromConsensusPower(100_000_001, sdk.DefaultPowerReduction)), supply.Amount) // Burn coins err := nibiruApp.InflationKeeper.Burn(ctx, sdk.NewCoins(tc.burnCoin), tc.sender) supply = nibiruApp.BankKeeper.GetSupply(ctx, "unibi") if tc.expectedErr != nil { require.EqualError(t, err, tc.expectedErr.Error()) - require.Equal(t, tc.mintCoin.Amount, supply.Amount) + require.Equal(t, tc.mintCoin.Amount.Add(sdk.TokensFromConsensusPower(100_000_001, sdk.DefaultPowerReduction)), supply.Amount) } else { require.NoError(t, err) - require.Equal(t, math.ZeroInt(), supply.Amount) + require.Equal(t, sdk.TokensFromConsensusPower(100_000_001, sdk.DefaultPowerReduction), supply.Amount) } }) } diff --git a/x/tokenfactory/keeper/msg_server_test.go b/x/tokenfactory/keeper/msg_server_test.go index 0d7ce4f04..a403a1618 100644 --- a/x/tokenfactory/keeper/msg_server_test.go +++ b/x/tokenfactory/keeper/msg_server_test.go @@ -662,7 +662,7 @@ func (s *TestSuite) TestBurnNative() { }, PostHook: func(ctx sdk.Context, bapp *app.NibiruApp) { s.Equal( - math.NewInt(0), s.app.BankKeeper.GetSupply(s.ctx, "unibi").Amount, + sdk.TokensFromConsensusPower(100_000_001, sdk.DefaultPowerReduction), s.app.BankKeeper.GetSupply(s.ctx, "unibi").Amount, ) s.Equal( @@ -696,7 +696,7 @@ func (s *TestSuite) TestBurnNative() { }, PostHook: func(ctx sdk.Context, bapp *app.NibiruApp) { s.Equal( - math.NewInt(123), s.app.BankKeeper.GetSupply(s.ctx, "unibi").Amount, + math.NewInt(123).Add(sdk.TokensFromConsensusPower(100_000_001, sdk.DefaultPowerReduction)), s.app.BankKeeper.GetSupply(s.ctx, "unibi").Amount, ) s.Equal( From 1ddbc2a60e2c74027044e2b4fce5aacf50971fe6 Mon Sep 17 00:00:00 2001 From: Kevin Yang <5478483+k-yang@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:10:55 -0500 Subject: [PATCH 5/6] fix(evm): consume gas in CallContractWithInput (#2180) * fix(evm): consume gas in CallContractWithInput * Update CHANGELOG.md * fix: gas consumption in ApplyEvmMsg * fix: move commit after gas refund calculation so that we can return a valid evmResp * refactor: GasToRefund * fix: proper checking of err pointer nil Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: remove fullRefundLeftoverGas * test: add gas assertions * Update gas_fees.go --------- Co-authored-by: Oleg Nikonychev Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- CHANGELOG.md | 1 + x/evm/keeper/call_contract.go | 10 +- x/evm/keeper/erc20.go | 12 +- x/evm/keeper/funtoken_from_coin.go | 4 +- x/evm/keeper/funtoken_from_coin_test.go | 34 ++++- x/evm/keeper/funtoken_from_erc20_test.go | 183 ++++++++++++++--------- x/evm/keeper/gas_fees.go | 18 +-- x/evm/keeper/grpc_query.go | 8 +- x/evm/keeper/keeper.go | 3 +- x/evm/keeper/msg_server.go | 112 ++++++-------- x/evm/precompile/funtoken.go | 10 +- x/evm/precompile/funtoken_test.go | 24 +-- 12 files changed, 231 insertions(+), 188 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 626db49c6..7e17a49cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -88,6 +88,7 @@ needed to include double quotes around the hexadecimal string. - [#2173](https://github.com/NibiruChain/nibiru/pull/2173) - fix(evm): clear `StateDB` between calls - [#2177](https://github.com/NibiruChain/nibiru/pull/2177) - fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go - [#2176](https://github.com/NibiruChain/nibiru/pull/2176) - tests(evm): add dirty state tests from code4rena audit +- [#2180](https://github.com/NibiruChain/nibiru/pull/2180) - fix(evm): apply gas consumption across the entire EVM codebase at `CallContractWithInput` #### Nibiru EVM | Before Audit 2 - 2024-12-06 diff --git a/x/evm/keeper/call_contract.go b/x/evm/keeper/call_contract.go index f9fdc2c8b..032d30bd7 100644 --- a/x/evm/keeper/call_contract.go +++ b/x/evm/keeper/call_contract.go @@ -39,7 +39,7 @@ func (k Keeper) CallContractWithInput( ) (evmResp *evm.MsgEthereumTxResponse, err error) { // This is a `defer` pattern to add behavior that runs in the case that the // error is non-nil, creating a concise way to add extra information. - defer HandleOutOfGasPanic(&err, "CallContractError") + defer HandleOutOfGasPanic(&err, "CallContractError")() nonce := k.GetAccNonce(ctx, fromAcc) unusedBigInt := big.NewInt(0) @@ -61,11 +61,13 @@ func (k Keeper) CallContractWithInput( // sent by a user txConfig := k.TxConfig(ctx, gethcommon.BigToHash(big.NewInt(0))) evmResp, err = k.ApplyEvmMsg( - ctx, evmMsg, evmObj, evm.NewNoOpTracer(), commit, txConfig.TxHash, true, + ctx, evmMsg, evmObj, evm.NewNoOpTracer(), commit, txConfig.TxHash, ) + if evmResp != nil { + ctx.GasMeter().ConsumeGas(evmResp.GasUsed, "CallContractWithInput") + } if err != nil { - err = errors.Wrap(err, "failed to apply ethereum core message") - return + return nil, errors.Wrap(err, "failed to apply ethereum core message") } if evmResp.Failed() { diff --git a/x/evm/keeper/erc20.go b/x/evm/keeper/erc20.go index f26bee952..3851e06dd 100644 --- a/x/evm/keeper/erc20.go +++ b/x/evm/keeper/erc20.go @@ -196,7 +196,7 @@ func (e erc20Calls) loadERC20String( if err != nil { return out, err } - res, err := e.Keeper.CallContractWithInput( + evmResp, err := e.Keeper.CallContractWithInput( ctx, evmObj, evm.EVM_MODULE_ADDRESS, @@ -211,13 +211,13 @@ func (e erc20Calls) loadERC20String( erc20Val := new(ERC20String) if err := erc20Abi.UnpackIntoInterface( - erc20Val, methodName, res.Ret, + erc20Val, methodName, evmResp.Ret, ); err == nil { return erc20Val.Value, err } erc20Bytes32Val := new(ERC20Bytes32) - if err := erc20Abi.UnpackIntoInterface(erc20Bytes32Val, methodName, res.Ret); err == nil { + if err := erc20Abi.UnpackIntoInterface(erc20Bytes32Val, methodName, evmResp.Ret); err == nil { return bytes32ToString(erc20Bytes32Val.Value), nil } @@ -239,7 +239,7 @@ func (e erc20Calls) loadERC20Uint8( if err != nil { return out, err } - res, err := e.Keeper.CallContractWithInput( + evmResp, err := e.Keeper.CallContractWithInput( ctx, evmObj, evm.EVM_MODULE_ADDRESS, @@ -254,14 +254,14 @@ func (e erc20Calls) loadERC20Uint8( erc20Val := new(ERC20Uint8) if err := erc20Abi.UnpackIntoInterface( - erc20Val, methodName, res.Ret, + erc20Val, methodName, evmResp.Ret, ); err == nil { return erc20Val.Value, err } erc20Uint256Val := new(ERC20BigInt) if err := erc20Abi.UnpackIntoInterface( - erc20Uint256Val, methodName, res.Ret, + erc20Uint256Val, methodName, evmResp.Ret, ); err == nil { // We can safely cast to uint8 because it's nonsense for decimals to be larger than 255 return uint8(erc20Uint256Val.Value.Uint64()), err diff --git a/x/evm/keeper/funtoken_from_coin.go b/x/evm/keeper/funtoken_from_coin.go index 294d72964..6cb4977d5 100644 --- a/x/evm/keeper/funtoken_from_coin.go +++ b/x/evm/keeper/funtoken_from_coin.go @@ -102,7 +102,7 @@ func (k *Keeper) deployERC20ForBankCoin( k.Bank.StateDB = nil }() evmObj := k.NewEVM(ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB) - evmResp, err := k.CallContractWithInput( + _, err = k.CallContractWithInput( ctx, evmObj, evm.EVM_MODULE_ADDRESS, nil, true /*commit*/, input, Erc20GasLimitDeploy, ) if err != nil { @@ -114,7 +114,5 @@ func (k *Keeper) deployERC20ForBankCoin( return gethcommon.Address{}, errors.Wrap(err, "failed to commit stateDB") } - ctx.GasMeter().ConsumeGas(evmResp.GasUsed, "deploy erc20 funtoken contract") - return erc20Addr, nil } diff --git a/x/evm/keeper/funtoken_from_coin_test.go b/x/evm/keeper/funtoken_from_coin_test.go index 432d3ce5b..32563b002 100644 --- a/x/evm/keeper/funtoken_from_coin_test.go +++ b/x/evm/keeper/funtoken_from_coin_test.go @@ -82,6 +82,7 @@ func (s *FunTokenFromCoinSuite) TestCreateFunTokenFromCoin() { }) s.Run("happy: CreateFunToken for the bank coin", func() { + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) s.Require().NoError(testapp.FundAccount( deps.App.BankKeeper, deps.Ctx, @@ -97,6 +98,7 @@ func (s *FunTokenFromCoinSuite) TestCreateFunTokenFromCoin() { }, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) s.Equal( createFuntokenResp.FuntokenMapping, @@ -167,6 +169,7 @@ func (s *FunTokenFromCoinSuite) TestConvertCoinToEvmAndBack() { funToken := s.fundAndCreateFunToken(deps, 100) s.T().Log("Convert bank coin to erc-20") + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) _, err := deps.EvmKeeper.ConvertCoinToEvm( sdk.WrapSDKContext(deps.Ctx), &evm.MsgConvertCoinToEvm{ @@ -178,6 +181,7 @@ func (s *FunTokenFromCoinSuite) TestConvertCoinToEvmAndBack() { }, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) s.T().Log("Check typed event") testutil.RequireContainsTypedEvent( @@ -226,6 +230,7 @@ func (s *FunTokenFromCoinSuite) TestConvertCoinToEvmAndBack() { deps.Sender.NibiruAddr.String(), ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ = deps.NewEVM() _, err = deps.EvmKeeper.CallContractWithInput( deps.Ctx, @@ -237,6 +242,7 @@ func (s *FunTokenFromCoinSuite) TestConvertCoinToEvmAndBack() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) // Check 1: module balance moduleBalance = deps.App.BankKeeper.GetBalance(deps.Ctx, authtypes.NewModuleAddress(evm.ModuleName), evm.EVMBankDenom) @@ -252,6 +258,7 @@ func (s *FunTokenFromCoinSuite) TestConvertCoinToEvmAndBack() { s.Require().Equal("0", balance.String()) s.T().Log("sad: Convert more erc-20 to back to bank coin, insufficient funds") + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ = deps.NewEVM() _, err = deps.EvmKeeper.CallContractWithInput( deps.Ctx, @@ -263,6 +270,7 @@ func (s *FunTokenFromCoinSuite) TestConvertCoinToEvmAndBack() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().ErrorContains(err, "transfer amount exceeds balance") + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) } // TestNativeSendThenPrecompileSend tests a race condition where the state DB @@ -362,6 +370,7 @@ func (s *FunTokenFromCoinSuite) TestNativeSendThenPrecompileSend() { newSendAmtSendToBank, /*amount*/ ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ = deps.NewEVM() evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, @@ -373,6 +382,9 @@ func (s *FunTokenFromCoinSuite) TestNativeSendThenPrecompileSend() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greaterf(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed, "total gas consumed on cosmos context should be greater than gas used by EVM") s.Empty(evmResp.VmError) gasUsedFor2Ops := evmResp.GasUsed @@ -404,6 +416,7 @@ func (s *FunTokenFromCoinSuite) TestNativeSendThenPrecompileSend() { newSendAmtSendToBank, /*amount*/ ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ = deps.NewEVM() evmResp, err = deps.EvmKeeper.CallContractWithInput( deps.Ctx, @@ -415,6 +428,9 @@ func (s *FunTokenFromCoinSuite) TestNativeSendThenPrecompileSend() { evmtest.DefaultEthCallGasLimit, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greaterf(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed, "total gas consumed on cosmos context should be greater than gas used by EVM") s.Empty(evmResp.VmError) gasUsedFor1Op := evmResp.GasUsed @@ -517,8 +533,9 @@ func (s *FunTokenFromCoinSuite) TestERC20TransferThenPrecompileSend() { big.NewInt(9e6), /*amount*/ ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ = deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, // from @@ -528,6 +545,9 @@ func (s *FunTokenFromCoinSuite) TestERC20TransferThenPrecompileSend() { 10_000_000, // gas limit ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greaterf(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed, "total gas consumed on cosmos context should be greater than gas used by EVM") evmtest.FunTokenBalanceAssert{ FunToken: funToken, @@ -620,6 +640,7 @@ func (s *FunTokenFromCoinSuite) TestPrecompileSelfCallRevert() { charles := evmtest.NewEthPrivAcc() s.T().Log("call test contract") + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ = deps.NewEVM() contractInput, err := embeds.SmartContract_TestPrecompileSelfCallRevert.ABI.Pack( "selfCallTransferFunds", @@ -629,7 +650,7 @@ func (s *FunTokenFromCoinSuite) TestPrecompileSelfCallRevert() { big.NewInt(9e6), ) s.Require().NoError(err) - _, err = deps.EvmKeeper.CallContractWithInput( + evpResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -639,6 +660,9 @@ func (s *FunTokenFromCoinSuite) TestPrecompileSelfCallRevert() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evpResp.GasUsed) + s.Require().Greaterf(deps.Ctx.GasMeter().GasConsumed(), evpResp.GasUsed, "total gas consumed on cosmos context should be greater than gas used by EVM") evmtest.FunTokenBalanceAssert{ FunToken: funToken, @@ -726,8 +750,9 @@ func (s *FunTokenFromCoinSuite) TestPrecompileSendToBankThenErc20Transfer() { "attack", ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evpResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -737,6 +762,9 @@ func (s *FunTokenFromCoinSuite) TestPrecompileSendToBankThenErc20Transfer() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().ErrorContains(err, "execution reverted") + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evpResp.GasUsed) + s.Require().Greaterf(deps.Ctx.GasMeter().GasConsumed(), evpResp.GasUsed, "total gas consumed on cosmos context should be greater than gas used by EVM") evmtest.FunTokenBalanceAssert{ FunToken: funToken, diff --git a/x/evm/keeper/funtoken_from_erc20_test.go b/x/evm/keeper/funtoken_from_erc20_test.go index 438b928ba..86960a2f3 100644 --- a/x/evm/keeper/funtoken_from_erc20_test.go +++ b/x/evm/keeper/funtoken_from_erc20_test.go @@ -42,7 +42,6 @@ func (s *FunTokenFromErc20Suite) TestCreateFunTokenFromERC20() { s.Require().Equal(expectedERC20Addr, deployResp.ContractAddr) evmObj, _ := deps.NewEVM() - actualMetadata, err := deps.EvmKeeper.FindERC20Metadata(deps.Ctx, evmObj, deployResp.ContractAddr, nil) s.Require().NoError(err) s.Require().Equal(metadata, *actualMetadata) @@ -75,6 +74,7 @@ func (s *FunTokenFromErc20Suite) TestCreateFunTokenFromERC20() { deps.EvmKeeper.FeeForCreateFunToken(deps.Ctx), )) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) resp, err := deps.EvmKeeper.CreateFunToken( sdk.WrapSDKContext(deps.Ctx), &evm.MsgCreateFunToken{ @@ -83,6 +83,7 @@ func (s *FunTokenFromErc20Suite) TestCreateFunTokenFromERC20() { }, ) s.Require().NoError(err, "erc20 %s", erc20Addr) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) expectedBankDenom := fmt.Sprintf("erc20/%s", expectedERC20Addr.String()) s.Equal( @@ -199,79 +200,100 @@ func (s *FunTokenFromErc20Suite) TestSendFromEvmToBank_MadeFromErc20() { s.Require().NoError(err, "erc20 %s", deployResp.ContractAddr) bankDemon := resp.FuntokenMapping.BankDenom - s.T().Logf("mint erc20 tokens to %s", deps.Sender.EthAddr.String()) - contractInput, err := embeds.SmartContract_ERC20Minter.ABI.Pack("mint", deps.Sender.EthAddr, big.NewInt(69_420)) - s.Require().NoError(err) - evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( - deps.Ctx, - evmObj, - deps.Sender.EthAddr, /*from*/ - &deployResp.ContractAddr, /*to*/ - true, /*commit*/ - contractInput, - keeper.Erc20GasLimitExecute, - ) - s.Require().NoError(err) + s.Run("happy: mint erc20 tokens", func() { + contractInput, err := embeds.SmartContract_ERC20Minter.ABI.Pack("mint", deps.Sender.EthAddr, big.NewInt(69_420)) + s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + evmObj, _ := deps.NewEVM() + evmResp, err := deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, /*from*/ + &deployResp.ContractAddr, /*to*/ + true, /*commit*/ + contractInput, + keeper.Erc20GasLimitExecute, + ) + s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) + }) randomAcc := testutil.AccAddress() + s.Run("happy: send erc20 tokens to Bank", func() { + contractInput, err := embeds.SmartContract_FunToken.ABI.Pack("sendToBank", deployResp.ContractAddr, big.NewInt(1), randomAcc.String()) + s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + evmObj, _ := deps.NewEVM() + evmResp, err := deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, /*from*/ + &precompile.PrecompileAddr_FunToken, /*to*/ + true, /*commit*/ + contractInput, + evmtest.FunTokenGasLimitSendToEvm, + ) + s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) + }) - s.T().Log("happy: send erc20 tokens to Bank") - contractInput, err = embeds.SmartContract_FunToken.ABI.Pack("sendToBank", deployResp.ContractAddr, big.NewInt(1), randomAcc.String()) - s.Require().NoError(err) - evmObj, _ = deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( - deps.Ctx, - evmObj, - deps.Sender.EthAddr, /*from*/ - &precompile.PrecompileAddr_FunToken, /*to*/ - true, /*commit*/ - contractInput, - evmtest.FunTokenGasLimitSendToEvm, - ) - s.Require().NoError(err) - - s.T().Log("check balances") - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, deps.Sender.EthAddr, big.NewInt(69_419), "expect nonzero balance") - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, evm.EVM_MODULE_ADDRESS, big.NewInt(1), "expect nonzero balance") - s.Require().Equal(sdk.NewInt(1), - deps.App.BankKeeper.GetBalance(deps.Ctx, randomAcc, bankDemon).Amount, - ) + s.Run("happy: check balances", func() { + evmObj, _ := deps.NewEVM() + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, deps.Sender.EthAddr, big.NewInt(69_419), "expect nonzero balance") + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, evm.EVM_MODULE_ADDRESS, big.NewInt(1), "expect nonzero balance") + s.Require().Equal(sdk.NewInt(1), + deps.App.BankKeeper.GetBalance(deps.Ctx, randomAcc, bankDemon).Amount, + ) + }) - s.T().Log("sad: send too many erc20 tokens to Bank") - contractInput, err = embeds.SmartContract_FunToken.ABI.Pack("sendToBank", deployResp.ContractAddr, big.NewInt(70_000), randomAcc.String()) - s.Require().NoError(err) - evmObj, _ = deps.NewEVM() - evmResp, err := deps.EvmKeeper.CallContractWithInput( - deps.Ctx, - evmObj, - deps.Sender.EthAddr, /*from*/ - &precompile.PrecompileAddr_FunToken, /*to*/ - true, /*commit*/ - contractInput, - evmtest.FunTokenGasLimitSendToEvm, - ) - s.Require().Error(err, evmResp.String()) + s.Run("sad: send too many erc20 tokens to Bank", func() { + contractInput, err := embeds.SmartContract_FunToken.ABI.Pack("sendToBank", deployResp.ContractAddr, big.NewInt(70_000), randomAcc.String()) + s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + evmObj, _ := deps.NewEVM() + evmResp, err := deps.EvmKeeper.CallContractWithInput( + deps.Ctx, + evmObj, + deps.Sender.EthAddr, /*from*/ + &precompile.PrecompileAddr_FunToken, /*to*/ + true, /*commit*/ + contractInput, + evmtest.FunTokenGasLimitSendToEvm, + ) + s.Require().Error(err, evmResp.String()) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) + }) - s.T().Log("send Bank tokens back to erc20") - _, err = deps.EvmKeeper.ConvertCoinToEvm(sdk.WrapSDKContext(deps.Ctx), - &evm.MsgConvertCoinToEvm{ - ToEthAddr: eth.EIP55Addr{ - Address: deps.Sender.EthAddr, + s.Run("happy: send Bank tokens back to erc20", func() { + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + _, err = deps.EvmKeeper.ConvertCoinToEvm(sdk.WrapSDKContext(deps.Ctx), + &evm.MsgConvertCoinToEvm{ + ToEthAddr: eth.EIP55Addr{ + Address: deps.Sender.EthAddr, + }, + Sender: randomAcc.String(), + BankCoin: sdk.NewCoin(bankDemon, sdk.NewInt(1)), }, - Sender: randomAcc.String(), - BankCoin: sdk.NewCoin(bankDemon, sdk.NewInt(1)), - }, - ) - s.Require().NoError(err) + ) + s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + }) s.T().Log("check balances") - evmObj, _ = deps.NewEVM() - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, deps.Sender.EthAddr, big.NewInt(69_420), "expect nonzero balance") - evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, evm.EVM_MODULE_ADDRESS, big.NewInt(0), "expect nonzero balance") - s.Require().True( - deps.App.BankKeeper.GetBalance(deps.Ctx, randomAcc, bankDemon).Amount.Equal(sdk.NewInt(0)), - ) + s.Run("happy: check balances", func() { + evmObj, _ := deps.NewEVM() + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, deps.Sender.EthAddr, big.NewInt(69_420), "expect nonzero balance") + evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, evm.EVM_MODULE_ADDRESS, big.NewInt(0), "expect nonzero balance") + s.Require().True( + deps.App.BankKeeper.GetBalance(deps.Ctx, randomAcc, bankDemon).Amount.Equal(sdk.NewInt(0)), + ) + }) s.T().Log("sad: send too many Bank tokens back to erc20") _, err = deps.EvmKeeper.ConvertCoinToEvm(sdk.WrapSDKContext(deps.Ctx), @@ -368,8 +390,9 @@ func (s *FunTokenFromErc20Suite) TestFunTokenFromERC20MaliciousTransfer() { s.T().Log("send erc20 tokens to cosmos") input, err := embeds.SmartContract_FunToken.ABI.Pack("sendToBank", deployResp.ContractAddr, big.NewInt(1), randomAcc.String()) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, evm.EVM_MODULE_ADDRESS, @@ -379,6 +402,9 @@ func (s *FunTokenFromErc20Suite) TestFunTokenFromERC20MaliciousTransfer() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().ErrorContains(err, "gas required exceeds allowance") + s.Require().NotZero(evmResp.GasUsed) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) } // TestFunTokenInfiniteRecursionERC20 creates a funtoken from a contract @@ -422,7 +448,7 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInfiniteRecursionERC20() { contractInput, err := embeds.SmartContract_TestInfiniteRecursionERC20.ABI.Pack("attackBalance") s.Require().NoError(err) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, /*from*/ @@ -432,12 +458,15 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInfiniteRecursionERC20() { 10_000_000, ) s.Require().NoError(err) + s.Require().NotZero(evmResp.GasUsed) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) s.T().Log("sad: call attackTransfer()") contractInput, err = embeds.SmartContract_TestInfiniteRecursionERC20.ABI.Pack("attackTransfer") s.Require().NoError(err) evmObj, _ = deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evmResp, err = deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, /*from*/ @@ -447,6 +476,9 @@ func (s *FunTokenFromErc20Suite) TestFunTokenInfiniteRecursionERC20() { 10_000_000, ) s.Require().ErrorContains(err, "execution reverted") + s.Require().NotZero(evmResp.GasUsed) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) } // TestSendERC20WithFee creates a funtoken from a malicious contract which charges a 10% fee on any transfer. @@ -494,8 +526,9 @@ func (s *FunTokenFromErc20Suite) TestSendERC20WithFee() { randomAcc.String(), /*to*/ ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, /*from*/ @@ -505,6 +538,9 @@ func (s *FunTokenFromErc20Suite) TestSendERC20WithFee() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) s.T().Log("check balances") evmtest.AssertERC20BalanceEqualWithDescription(s.T(), deps, evmObj, deployResp.ContractAddr, deps.Sender.EthAddr, big.NewInt(900), "expect 900 balance") @@ -569,8 +605,9 @@ func (s *FunTokenFromErc20Suite) TestFindMKRMetadata() { ) s.Require().NoError(err) + deps.Ctx = deps.Ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + evmResp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -579,8 +616,10 @@ func (s *FunTokenFromErc20Suite) TestFindMKRMetadata() { contractInput, evmtest.FunTokenGasLimitSendToEvm, ) - s.Require().NoError(err) + s.Require().NotZero(deps.Ctx.GasMeter().GasConsumed()) + s.Require().NotZero(evmResp.GasUsed) + s.Require().Greater(deps.Ctx.GasMeter().GasConsumed(), evmResp.GasUsed) info, err := deps.EvmKeeper.FindERC20Metadata(deps.Ctx, evmObj, deployResp.ContractAddr, embeds.SmartContract_TestBytes32Metadata.ABI) s.Require().NoError(err) diff --git a/x/evm/keeper/gas_fees.go b/x/evm/keeper/gas_fees.go index d5712c067..8b8a6a495 100644 --- a/x/evm/keeper/gas_fees.go +++ b/x/evm/keeper/gas_fees.go @@ -74,16 +74,16 @@ func (k *Keeper) RefundGas( return nil } -// GasToRefund calculates the amount of gas the state machine should refund to -// the sender. It is capped by the refund quotient value. Note that passing a -// jrefundQuotient of 0 will cause problems. -func GasToRefund(availableRefund, gasConsumed, refundQuotient uint64) uint64 { - // Apply refund counter - refund := gasConsumed / refundQuotient - if refund > availableRefund { - return availableRefund +// gasToRefund calculates the amount of gas the state machine should refund to +// the sender. +// EIP-3529: refunds are capped to gasUsed / 5 +func gasToRefund(availableRefundAmount, gasUsed uint64) uint64 { + refundAmount := gasUsed / params.RefundQuotientEIP3529 + if refundAmount > availableRefundAmount { + // Apply refundAmount counter + return availableRefundAmount } - return refund + return refundAmount } // CheckSenderBalance validates that the tx cost value is positive and that the diff --git a/x/evm/keeper/grpc_query.go b/x/evm/keeper/grpc_query.go index 3255b8f73..da2274d50 100644 --- a/x/evm/keeper/grpc_query.go +++ b/x/evm/keeper/grpc_query.go @@ -286,7 +286,7 @@ func (k *Keeper) EthCall( // pass false to not commit StateDB stateDB := statedb.New(ctx, k, txConfig) evm := k.NewEVM(ctx, msg, evmCfg, nil /*tracer*/, stateDB) - res, err := k.ApplyEvmMsg(ctx, msg, evm, nil /*tracer*/, false /*commit*/, txConfig.TxHash, false /*fullRefundLeftoverGas*/) + res, err := k.ApplyEvmMsg(ctx, msg, evm, nil /*tracer*/, false /*commit*/, txConfig.TxHash) if err != nil { return nil, grpcstatus.Error(grpccodes.Internal, err.Error()) } @@ -421,7 +421,7 @@ func (k Keeper) EstimateGasForEvmCallType( txConfig := statedb.NewEmptyTxConfig(gethcommon.BytesToHash(ctx.HeaderHash().Bytes())) stateDB := statedb.New(ctx, &k, txConfig) evmObj := k.NewEVM(tmpCtx, evmMsg, evmCfg, nil /*tracer*/, stateDB) - rsp, err = k.ApplyEvmMsg(tmpCtx, evmMsg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash, false /*fullRefundLeftoverGas*/) + rsp, err = k.ApplyEvmMsg(tmpCtx, evmMsg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash) if err != nil { if errors.Is(err, core.ErrIntrinsicGas) { return true, nil, nil // Special case, raise gas limit @@ -516,7 +516,7 @@ func (k Keeper) TraceTx( WithTransientKVGasConfig(storetypes.GasConfig{}) stateDB := statedb.New(ctx, &k, txConfig) evmObj := k.NewEVM(ctx, msg, evmCfg, nil /*tracer*/, stateDB) - rsp, err := k.ApplyEvmMsg(ctx, msg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash, false /*fullRefundLeftoverGas*/) + rsp, err := k.ApplyEvmMsg(ctx, msg, evmObj, nil /*tracer*/, false /*commit*/, txConfig.TxHash) if err != nil { continue } @@ -790,7 +790,7 @@ func (k *Keeper) TraceEthTxMsg( WithTransientKVGasConfig(storetypes.GasConfig{}) stateDB := statedb.New(ctx, k, txConfig) evmObj := k.NewEVM(ctx, msg, evmCfg, tracer, stateDB) - res, err := k.ApplyEvmMsg(ctx, msg, evmObj, tracer, false /*commit*/, txConfig.TxHash, false /*fullRefundLeftoverGas*/) + res, err := k.ApplyEvmMsg(ctx, msg, evmObj, tracer, false /*commit*/, txConfig.TxHash) if err != nil { return nil, 0, grpcstatus.Error(grpccodes.Internal, err.Error()) } diff --git a/x/evm/keeper/keeper.go b/x/evm/keeper/keeper.go index ff36cd6cb..19de7266d 100644 --- a/x/evm/keeper/keeper.go +++ b/x/evm/keeper/keeper.go @@ -128,13 +128,12 @@ func HandleOutOfGasPanic(err *error, format string) func() { if r := recover(); r != nil { switch r.(type) { case sdk.ErrorOutOfGas: - *err = vm.ErrOutOfGas default: panic(r) } } - if err != nil && format != "" { + if err != nil && *err != nil && format != "" { *err = fmt.Errorf("%s: %w", format, *err) } } diff --git a/x/evm/keeper/msg_server.go b/x/evm/keeper/msg_server.go index 7c6e98021..e5421725c 100644 --- a/x/evm/keeper/msg_server.go +++ b/x/evm/keeper/msg_server.go @@ -10,7 +10,6 @@ import ( "strconv" "cosmossdk.io/errors" - "cosmossdk.io/math" tmbytes "github.com/cometbft/cometbft/libs/bytes" tmtypes "github.com/cometbft/cometbft/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -71,8 +70,10 @@ func (k *Keeper) EthereumTx( nil, /*tracer*/ true, /*commit*/ txConfig.TxHash, - false, /*fullRefundLeftoverGas*/ ) + if evmResp != nil { + ctx.GasMeter().ConsumeGas(evmResp.GasUsed, "execute ethereum tx") + } if err != nil { return nil, errors.Wrap(err, "error applying ethereum core message") } @@ -89,7 +90,6 @@ func (k *Keeper) EthereumTx( if err = k.RefundGas(ctx, evmMsg.From(), refundGas, weiPerGas); err != nil { return nil, errors.Wrapf(err, "error refunding leftover gas to sender %s", evmMsg.From()) } - ctx.GasMeter().ConsumeGas(evmResp.GasUsed, "execute ethereum tx") err = k.EmitEthereumTxEvents(ctx, tx.To(), tx.Type(), evmMsg, evmResp) if err != nil { @@ -259,23 +259,21 @@ func (k *Keeper) ApplyEvmMsg( tracer vm.EVMLogger, commit bool, txHash gethcommon.Hash, - fullRefundLeftoverGas bool, ) (resp *evm.MsgEthereumTxResponse, err error) { - leftoverGas := msg.Gas() + gasRemaining := msg.Gas() // Allow the tracer captures the tx level events, mainly the gas consumption. vmCfg := evmObj.Config if vmCfg.Debug { - vmCfg.Tracer.CaptureTxStart(leftoverGas) + vmCfg.Tracer.CaptureTxStart(gasRemaining) defer func() { - vmCfg.Tracer.CaptureTxEnd(leftoverGas) + vmCfg.Tracer.CaptureTxEnd(gasRemaining) }() } - sender := vm.AccountRef(msg.From()) contractCreation := msg.To() == nil - intrinsicGas, err := core.IntrinsicGas( + intrinsicGasCost, err := core.IntrinsicGas( msg.Data(), msg.AccessList(), contractCreation, true, true, ) @@ -290,15 +288,15 @@ func (k *Keeper) ApplyEvmMsg( // // Should check again even if it is checked on Ante Handler, because eth_call // don't go through Ante Handler. - if leftoverGas < intrinsicGas { + if gasRemaining < intrinsicGasCost { // eth_estimateGas will check for this exact error return nil, errors.Wrapf( core.ErrIntrinsicGas, "ApplyEvmMsg: provided msg.Gas (%d) is less than intrinsic gas cost (%d)", - leftoverGas, intrinsicGas, + gasRemaining, intrinsicGasCost, ) } - leftoverGas = leftoverGas - intrinsicGas + gasRemaining -= intrinsicGasCost // access list preparation is moved from ante handler to here, because it's // needed when `ApplyMessage` is called under contexts where ante handlers @@ -318,28 +316,28 @@ func (k *Keeper) ApplyEvmMsg( // take over the nonce management from evm: // - reset sender's nonce to msg.Nonce() before calling evm. // - increase sender's nonce by one no matter the result. - evmObj.StateDB.SetNonce(sender.Address(), msg.Nonce()) + evmObj.StateDB.SetNonce(msg.From(), msg.Nonce()) - var ret []byte + var returnBz []byte var vmErr error if contractCreation { - ret, _, leftoverGas, vmErr = evmObj.Create( - sender, + returnBz, _, gasRemaining, vmErr = evmObj.Create( + vm.AccountRef(msg.From()), msg.Data(), - leftoverGas, + gasRemaining, msgWei, ) } else { - ret, leftoverGas, vmErr = evmObj.Call( - sender, + returnBz, gasRemaining, vmErr = evmObj.Call( + vm.AccountRef(msg.From()), *msg.To(), msg.Data(), - leftoverGas, + gasRemaining, msgWei, ) } // Increment nonce after processing the message - evmObj.StateDB.SetNonce(sender.Address(), msg.Nonce()+1) + evmObj.StateDB.SetNonce(msg.From(), msg.Nonce()+1) // EVM execution error needs to be available for the JSON-RPC client var vmError string @@ -347,57 +345,34 @@ func (k *Keeper) ApplyEvmMsg( vmError = vmErr.Error() } - // The dirty states in `StateDB` is either committed or discarded after return - if commit { - if err := evmObj.StateDB.(*statedb.StateDB).Commit(); err != nil { - return nil, errors.Wrap(err, "ApplyEvmMsg: failed to commit stateDB") - } - } - // Rare case of uint64 gas overflow - if msg.Gas() < leftoverGas { - return nil, errors.Wrapf(core.ErrGasUintOverflow, "ApplyEvmMsg: message gas limit (%d) < leftover gas (%d)", msg.Gas(), leftoverGas) - } + // process gas refunds (we refund a portion of the unused gas) + gasUsed := msg.Gas() - gasRemaining + // please see https://eips.ethereum.org/EIPS/eip-3529 for why we do refunds + refundAmount := gasToRefund(evmObj.StateDB.GetRefund(), gasUsed) + gasRemaining += refundAmount + gasUsed -= refundAmount - // TODO: UD-DEBUG: Clarify text below. - // GAS REFUND - // If msg.Gas() > gasUsed, we need to refund extra gas. - // leftoverGas = amount of extra (not used) gas. - // If the msg comes from user, we apply refundQuotient capping the refund to 20% of used gas - // If msg is internal (funtoken), we refund 100% - // - // EIP-3529: refunds are capped to gasUsed / 5 - // We evaluate "fullRefundLeftoverGas" and use only the gas consumed (not the - // gas limit) if the `ApplyEvmMsg` call originated from a state transition - // where the chain set the gas limit and not an end-user. - refundQuotient := params.RefundQuotientEIP3529 - if fullRefundLeftoverGas { - refundQuotient = 1 // 100% refund + evmResp := &evm.MsgEthereumTxResponse{ + GasUsed: gasUsed, + VmError: vmError, + Ret: returnBz, + Logs: evm.NewLogsFromEth(evmObj.StateDB.(*statedb.StateDB).Logs()), + Hash: txHash.Hex(), } - temporaryGasUsed := msg.Gas() - leftoverGas - refund := GasToRefund(evmObj.StateDB.GetRefund(), temporaryGasUsed, refundQuotient) - // update leftoverGas and temporaryGasUsed with refund amount - leftoverGas += refund - temporaryGasUsed -= refund - if msg.Gas() < leftoverGas { - return nil, errors.Wrapf(core.ErrGasUintOverflow, "ApplyEvmMsg: message gas limit (%d) < leftover gas (%d)", msg.Gas(), leftoverGas) + if gasRemaining > msg.Gas() { // rare case of overflow + evmResp.GasUsed = msg.Gas() // cap the gas used to the original gas limit + return evmResp, errors.Wrapf(core.ErrGasUintOverflow, "ApplyEvmMsg: message gas limit (%d) < leftover gas (%d)", msg.Gas(), gasRemaining) } - // Min gas used is a % of gasLimit - gasUsed := math.LegacyNewDec(int64(temporaryGasUsed)).TruncateInt().Uint64() - - // This resulting "leftoverGas" is used by the tracer. This happens as a - // result of the defer statement near the beginning of the function with - // "vm.Tracer". - leftoverGas = msg.Gas() - gasUsed + // The dirty states in `StateDB` is either committed or discarded after return + if commit { + if err := evmObj.StateDB.(*statedb.StateDB).Commit(); err != nil { + return evmResp, errors.Wrap(err, "ApplyEvmMsg: failed to commit stateDB") + } + } - return &evm.MsgEthereumTxResponse{ - GasUsed: gasUsed, - VmError: vmError, - Ret: ret, - Logs: evm.NewLogsFromEth(evmObj.StateDB.(*statedb.StateDB).Logs()), - Hash: txHash.Hex(), - }, nil + return evmResp, nil } func ParseWeiAsMultipleOfMicronibi(weiInt *big.Int) (newWeiInt *big.Int, err error) { @@ -560,6 +535,7 @@ func (k Keeper) convertCoinToEvmBornCoin( defer func() { k.Bank.StateDB = nil }() + evmObj := k.NewEVM(ctx, evmMsg, k.GetEVMConfig(ctx), nil /*tracer*/, stateDB) evmResp, err := k.CallContractWithInput( ctx, @@ -573,15 +549,13 @@ func (k Keeper) convertCoinToEvmBornCoin( if err != nil { return nil, err } - ctx.GasMeter().ConsumeGas(evmResp.GasUsed, "mint erc20 tokens") if evmResp.Failed() { return nil, fmt.Errorf("failed to mint erc-20 tokens of contract %s", erc20Addr.String()) } - err = stateDB.Commit() - if err != nil { + if err = stateDB.Commit(); err != nil { return nil, errors.Wrap(err, "failed to commit stateDB") } diff --git a/x/evm/precompile/funtoken.go b/x/evm/precompile/funtoken.go index 6a1aa210b..82739c612 100644 --- a/x/evm/precompile/funtoken.go +++ b/x/evm/precompile/funtoken.go @@ -143,8 +143,7 @@ func (p precompileFunToken) sendToBank( erc20, amount, to, err := p.parseArgsSendToBank(args) if err != nil { - err = ErrInvalidArgs(err) - return + return nil, ErrInvalidArgs(err) } var evmResponses []*evm.MsgEthereumTxResponse @@ -191,10 +190,9 @@ func (p precompileFunToken) sendToBank( // owns the ERC20 contract and was the original minter of the ERC20 tokens. // Since we're sending them away and want accurate total supply tracking, the // tokens need to be burned. - burnResp, e := p.evmKeeper.ERC20().Burn(erc20, evm.EVM_MODULE_ADDRESS, gotAmount, ctx, evmObj) - if e != nil { - err = fmt.Errorf("ERC20.Burn: %w", e) - return + burnResp, err := p.evmKeeper.ERC20().Burn(erc20, evm.EVM_MODULE_ADDRESS, gotAmount, ctx, evmObj) + if err != nil { + return nil, fmt.Errorf("ERC20.Burn: %w", err) } evmResponses = append(evmResponses, burnResp) } else { diff --git a/x/evm/precompile/funtoken_test.go b/x/evm/precompile/funtoken_test.go index a5b21f60d..be9a33714 100644 --- a/x/evm/precompile/funtoken_test.go +++ b/x/evm/precompile/funtoken_test.go @@ -267,13 +267,14 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { s.Require().NoError(err) contractAddr := deployResp.ContractAddr - s.T().Log("Fund sender's wallet") - s.Require().NoError(testapp.FundAccount( - deps.App.BankKeeper, - deps.Ctx, - deps.Sender.NibiruAddr, - sdk.NewCoins(sdk.NewCoin(funtoken.BankDenom, sdk.NewInt(1000))), - )) + s.Run("Fund sender's wallet", func() { + s.Require().NoError(testapp.FundAccount( + deps.App.BankKeeper, + deps.Ctx, + deps.Sender.NibiruAddr, + sdk.NewCoins(sdk.NewCoin(funtoken.BankDenom, sdk.NewInt(1000))), + )) + }) s.Run("Fund contract with erc20 coins", func() { _, err = deps.EvmKeeper.ConvertCoinToEvm( @@ -297,7 +298,7 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { ) s.Require().NoError(err) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + resp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -307,6 +308,7 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { evmtest.FunTokenGasLimitSendToEvm, ) s.Require().NoError(err) + s.Require().NotZero(resp.GasUsed) }) s.Run("Happy: callBankSend with local gas - sufficient gas amount", func() { @@ -318,7 +320,7 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { ) s.Require().NoError(err) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + resp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -328,6 +330,7 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { evmtest.FunTokenGasLimitSendToEvm, // gasLimit for the entire call ) s.Require().NoError(err) + s.Require().NotZero(resp.GasUsed) }) s.Run("Sad: callBankSend with local gas - insufficient gas amount", func() { @@ -339,7 +342,7 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { ) s.Require().NoError(err) evmObj, _ := deps.NewEVM() - _, err = deps.EvmKeeper.CallContractWithInput( + resp, err := deps.EvmKeeper.CallContractWithInput( deps.Ctx, evmObj, deps.Sender.EthAddr, @@ -349,6 +352,7 @@ func (s *FuntokenSuite) TestPrecompileLocalGas() { evmtest.FunTokenGasLimitSendToEvm, // gasLimit for the entire call ) s.Require().ErrorContains(err, "execution reverted") + s.Require().NotZero(resp.GasUsed) }) } From ecda4c10dff2874acae1874df1d1e0c0892b7e4a Mon Sep 17 00:00:00 2001 From: Kevin Yang <5478483+k-yang@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:23:50 -0500 Subject: [PATCH 6/6] fix(evm): bank keeper extension gas meter type (#2183) * fix: force gas invariant gas meter type * Update bank_extension.go * Update CHANGELOG.md --- CHANGELOG.md | 3 ++- x/evm/keeper/bank_extension.go | 18 +++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e17a49cb..53514b6fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,7 +89,8 @@ needed to include double quotes around the hexadecimal string. - [#2177](https://github.com/NibiruChain/nibiru/pull/2177) - fix(cmd): Continue from #2127 and unwire vesting flags and logic from genaccounts.go - [#2176](https://github.com/NibiruChain/nibiru/pull/2176) - tests(evm): add dirty state tests from code4rena audit - [#2180](https://github.com/NibiruChain/nibiru/pull/2180) - fix(evm): apply gas consumption across the entire EVM codebase at `CallContractWithInput` - +- [#2183](https://github.com/NibiruChain/nibiru/pull/2183) - fix(evm): bank keeper extension gas meter type +- #### Nibiru EVM | Before Audit 2 - 2024-12-06 The codebase went through a third-party [Code4rena diff --git a/x/evm/keeper/bank_extension.go b/x/evm/keeper/bank_extension.go index 587135ac2..5531b9c5c 100644 --- a/x/evm/keeper/bank_extension.go +++ b/x/evm/keeper/bank_extension.go @@ -185,24 +185,20 @@ func (bk NibiruBankKeeper) ForceGasInvariant( // Assign vars for the tx gas meter gasMeterBefore := ctx.GasMeter() // Tx gas meter MUST be defined gasConsumedBefore := gasMeterBefore.GasConsumed() - // Don't modify the "ctx.BlockGasMeter()" directly because this is - // handled in "BaseApp.runTx" - - // Start baseGasConsumed at 0 in case we panic before BaseOp completes and - // baseGasConsumed gets a value assignment baseOpGasConsumed := uint64(0) defer func() { + // NOTE: we have to refund the entire gasMeterBefore because it's modified by AfterOp + // stateDB.getStateObject() reads from state using the local root ctx which affects the gas meter gasMeterBefore.RefundGas(gasMeterBefore.GasConsumed(), "") gasMeterBefore.ConsumeGas(gasConsumedBefore+baseOpGasConsumed, "NibiruBankKeeper invariant") }() - // Note that because the ctx gas meter uses private variables to track gas, - // we have to branch off with a new gas meter instance to avoid mutating the - // "true" gas meter (called GasMeterBefore here). - // We use an infinite gas meter because we consume gas in the deferred function - // and gasMeterBefore will panic if we consume too much gas. - ctx = ctx.WithGasMeter(sdk.NewInfiniteGasMeter()) + // We keep the same gas meter type but reset the gas consumed prior to measuring the base op + // We need the same gas meter type because we use a custom FixedGasMeter for oracle votes in the AnteHandler + // In the defer function, we reset the gas meter again and then add the gasConsumedBefore to baseOpGasConsumed, + // so any modifications to the gasMeterBefore after this point will be inconsequential. + ctx.GasMeter().RefundGas(gasConsumedBefore, "reset gas meter before measuring base op") err := BaseOp(ctx) baseOpGasConsumed = ctx.GasMeter().GasConsumed()