diff --git a/contracts/prototypes/evm/GatewayEVM.sol b/contracts/prototypes/evm/GatewayEVM.sol index ad912d129..2114d3ad6 100644 --- a/contracts/prototypes/evm/GatewayEVM.sol +++ b/contracts/prototypes/evm/GatewayEVM.sol @@ -20,7 +20,6 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate /// @notice The address of the custody contract. address public custody; - /// @notice The address of the TSS (Threshold Signature Scheme) contract. address public tssAddress; /// @notice The address of the ZetaConnector contract. @@ -86,11 +85,10 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate uint256 amount, bytes calldata data ) public nonReentrant { - if (amount == 0) revert InsufficientETHAmount(); + if (amount == 0) revert InsufficientERC20Amount(); // Approve the target contract to spend the tokens if(!resetApproval(token, to)) revert ApprovalFailed(); if(!IERC20(token).approve(to, amount)) revert ApprovalFailed(); - // Execute the call on the target contract bytes memory result = _execute(to, data); @@ -100,7 +98,7 @@ contract GatewayEVM is Initializable, OwnableUpgradeable, UUPSUpgradeable, IGate // Transfer any remaining tokens back to the custody/connector contract uint256 remainingBalance = IERC20(token).balanceOf(address(this)); if (remainingBalance > 0) { - transferToAssetHandler(token, amount); + transferToAssetHandler(token, remainingBalance); } emit ExecutedWithERC20(token, to, amount, data); diff --git a/contracts/prototypes/evm/IReceiverEVM.sol b/contracts/prototypes/evm/IReceiverEVM.sol index 41a6285be..d604a0269 100644 --- a/contracts/prototypes/evm/IReceiverEVM.sol +++ b/contracts/prototypes/evm/IReceiverEVM.sol @@ -6,4 +6,5 @@ interface IReceiverEVMEvents { event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag); event ReceivedERC20(address sender, uint256 amount, address token, address destination); event ReceivedNoParams(address sender); + event ReceivedRevert(address sender, bytes data); } diff --git a/contracts/prototypes/evm/ReceiverEVM.sol b/contracts/prototypes/evm/ReceiverEVM.sol index c13597b5d..c3887d97f 100644 --- a/contracts/prototypes/evm/ReceiverEVM.sol +++ b/contracts/prototypes/evm/ReceiverEVM.sol @@ -3,14 +3,13 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "./IReceiverEVM.sol"; -contract ReceiverEVM { +// @notice This contract is used just for testing +contract ReceiverEVM is IReceiverEVMEvents, ReentrancyGuard { using SafeERC20 for IERC20; - - event ReceivedPayable(address sender, uint256 value, string str, uint256 num, bool flag); - event ReceivedNonPayable(address sender, string[] strs, uint256[] nums, bool flag); - event ReceivedERC20(address sender, uint256 amount, address token, address destination); - event ReceivedNoParams(address sender); + error ZeroAmount(); // Payable function function receivePayable(string memory str, uint256 num, bool flag) external payable { @@ -23,15 +22,33 @@ contract ReceiverEVM { } // Function using IERC20 - function receiveERC20(uint256 amount, address token, address destination) external { + function receiveERC20(uint256 amount, address token, address destination) external nonReentrant { // Transfer tokens from the Gateway contract to the destination address IERC20(token).safeTransferFrom(msg.sender, destination, amount); emit ReceivedERC20(msg.sender, amount, token, destination); } + // Function using IERC20 to partially transfer tokens + function receiveERC20Partial(uint256 amount, address token, address destination) external nonReentrant { + uint256 amountToSend = amount / 2; + if (amountToSend == 0) revert ZeroAmount(); + + IERC20(token).safeTransferFrom(msg.sender, destination, amountToSend); + + emit ReceivedERC20(msg.sender, amountToSend, token, destination); + } + // Function without parameters function receiveNoParams() external { emit ReceivedNoParams(msg.sender); } + + // onRevertCallback + function onRevert(bytes calldata data) external { + emit ReceivedRevert(msg.sender, data); + } + + receive() external payable {} + fallback() external payable {} } \ No newline at end of file diff --git a/contracts/prototypes/evm/TestERC20.sol b/contracts/prototypes/evm/TestERC20.sol index 7ffb19888..82702031a 100644 --- a/contracts/prototypes/evm/TestERC20.sol +++ b/contracts/prototypes/evm/TestERC20.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +// @notice This contract is used just for testing contract TestERC20 is ERC20 { constructor(string memory name, string memory symbol) ERC20(name, symbol) {} diff --git a/contracts/prototypes/evm/ZetaConnectorNative.sol b/contracts/prototypes/evm/ZetaConnectorNative.sol index ec333d594..6b34035dc 100644 --- a/contracts/prototypes/evm/ZetaConnectorNative.sol +++ b/contracts/prototypes/evm/ZetaConnectorNative.sol @@ -12,13 +12,13 @@ contract ZetaConnectorNative is ZetaConnectorNewBase { ZetaConnectorNewBase(_gateway, _zetaToken) {} - // Withdraw is called by TSS address, it directly transfers zetaToken to the destination address without contract call + // @dev withdraw is called by TSS address, it directly transfers zetaToken to the destination address without contract call function withdraw(address to, uint256 amount, bytes32 internalSendHash) external override nonReentrant { IERC20(zetaToken).safeTransfer(to, amount); emit Withdraw(to, amount); } - // WithdrawAndCall is called by TSS address, it transfers zetaToken to the gateway and calls a contract + // @dev withdrawAndCall is called by TSS address, it transfers zetaToken to the gateway and calls a contract function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { // Transfer zetaToken to the Gateway contract IERC20(zetaToken).safeTransfer(address(gateway), amount); @@ -29,9 +29,19 @@ contract ZetaConnectorNative is ZetaConnectorNewBase { emit WithdrawAndCall(to, amount, data); } - // Function to handle token transfer - function receiveTokens(uint256 amount) external override nonReentrant { - // Transfer tokens from the sender to this contract + // @dev withdrawAndRevert is called by TSS address, it transfers zetaToken to the gateway and calls onRevert on a contract + function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { + // Transfer zetaToken to the Gateway contract + IERC20(zetaToken).safeTransfer(address(gateway), amount); + + // Forward the call to the Gateway contract + gateway.revertWithERC20(address(zetaToken), to, amount, data); + + emit WithdrawAndRevert(to, amount, data); + } + + // @dev receiveTokens handles token transfer and burn them + function receiveTokens(uint256 amount) external override { IERC20(zetaToken).safeTransferFrom(msg.sender, address(this), amount); } } diff --git a/contracts/prototypes/evm/ZetaConnectorNewBase.sol b/contracts/prototypes/evm/ZetaConnectorNewBase.sol index 6ae2ce066..f17620510 100644 --- a/contracts/prototypes/evm/ZetaConnectorNewBase.sol +++ b/contracts/prototypes/evm/ZetaConnectorNewBase.sol @@ -16,6 +16,7 @@ abstract contract ZetaConnectorNewBase is ReentrancyGuard { event Withdraw(address indexed to, uint256 amount); event WithdrawAndCall(address indexed to, uint256 amount, bytes data); + event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); constructor(address _gateway, address _zetaToken) { if (_gateway == address(0) || _zetaToken == address(0)) { @@ -29,5 +30,7 @@ abstract contract ZetaConnectorNewBase is ReentrancyGuard { function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external virtual; + function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external virtual; + function receiveTokens(uint256 amount) external virtual; } \ No newline at end of file diff --git a/contracts/prototypes/evm/ZetaConnectorNonNative.sol b/contracts/prototypes/evm/ZetaConnectorNonNative.sol index 47da0ec11..1cf9a6939 100644 --- a/contracts/prototypes/evm/ZetaConnectorNonNative.sol +++ b/contracts/prototypes/evm/ZetaConnectorNonNative.sol @@ -10,13 +10,13 @@ contract ZetaConnectorNonNative is ZetaConnectorNewBase { ZetaConnectorNewBase(_gateway, _zetaToken) {} - // Withdraw is called by TSS address, it mints zetaToken to the destination address + // @dev withdraw is called by TSS address, it mints zetaToken to the destination address function withdraw(address to, uint256 amount, bytes32 internalSendHash) external override nonReentrant { IZetaNonEthNew(zetaToken).mint(to, amount, internalSendHash); emit Withdraw(to, amount); } - // WithdrawAndCall is called by TSS address, it mints zetaToken and calls a contract + // @dev withdrawAndCall is called by TSS address, it mints zetaToken and calls a contract function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { // Mint zetaToken to the Gateway contract IZetaNonEthNew(zetaToken).mint(address(gateway), amount, internalSendHash); @@ -27,9 +27,19 @@ contract ZetaConnectorNonNative is ZetaConnectorNewBase { emit WithdrawAndCall(to, amount, data); } - // Function to handle token transfer and burn them + // @dev withdrawAndRevert is called by TSS address, it mints zetaToken to the gateway and calls onRevert on a contract + function withdrawAndRevert(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external override nonReentrant { + // Mint zetaToken to the Gateway contract + IZetaNonEthNew(zetaToken).mint(address(gateway), amount, internalSendHash); + + // Forward the call to the Gateway contract + gateway.revertWithERC20(address(zetaToken), to, amount, data); + + emit WithdrawAndRevert(to, amount, data); + } + + // @dev receiveTokens handles token transfer and burn them function receiveTokens(uint256 amount) external override { - // Burn the tokens IZetaNonEthNew(zetaToken).burnFrom(msg.sender, amount); } } diff --git a/contracts/prototypes/zevm/GatewayZEVM.sol b/contracts/prototypes/zevm/GatewayZEVM.sol index e41255e31..17fe9c4f5 100644 --- a/contracts/prototypes/zevm/GatewayZEVM.sol +++ b/contracts/prototypes/zevm/GatewayZEVM.sol @@ -11,7 +11,6 @@ import "../../zevm/interfaces/zContract.sol"; import "./IGatewayZEVM.sol"; import "../../zevm/interfaces/IWZETA.sol"; - // The GatewayZEVM contract is the endpoint to call smart contracts on omnichain // The contract doesn't hold any funds and should never have active allowances contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, OwnableUpgradeable, UUPSUpgradeable, ReentrancyGuardUpgradeable { @@ -38,6 +37,11 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O function _authorizeUpgrade(address newImplementation) internal override onlyOwner() {} + /// @dev Receive function to receive ZETA from WETH9.withdraw(). + receive() external payable { + if (msg.sender != zetaToken && msg.sender != FUNGIBLE_MODULE_ADDRESS) revert OnlyWZETAOrFungible(); + } + function _withdrawZRC20(uint256 amount, address zrc20) internal returns (uint256) { (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFee(); if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { @@ -75,13 +79,13 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O // Withdraw ZETA to external chain function withdraw(uint256 amount) external nonReentrant { _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); - emit Withdrawal(msg.sender, address(0), abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), amount, 0, 0, ""); + emit Withdrawal(msg.sender, address(zetaToken), abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), amount, 0, 0, ""); } // Withdraw ZETA and call smart contract on external chain function withdrawAndCall(uint256 amount, bytes calldata message) external nonReentrant { _transferZETA(amount, FUNGIBLE_MODULE_ADDRESS); - emit Withdrawal(msg.sender, address(0), abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), amount, 0, 0, message); + emit Withdrawal(msg.sender, address(zetaToken), abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), amount, 0, 0, message); } // Call smart contract on external chain without asset transfer diff --git a/contracts/prototypes/zevm/IGatewayZEVM.sol b/contracts/prototypes/zevm/IGatewayZEVM.sol index b46076456..af6dba4a1 100644 --- a/contracts/prototypes/zevm/IGatewayZEVM.sol +++ b/contracts/prototypes/zevm/IGatewayZEVM.sol @@ -47,4 +47,5 @@ interface IGatewayZEVMErrors { error CallerIsNotFungibleModule(); error InvalidTarget(); error FailedZetaSent(); + error OnlyWZETAOrFungible(); } \ No newline at end of file diff --git a/contracts/prototypes/zevm/SenderZEVM.sol b/contracts/prototypes/zevm/SenderZEVM.sol index 8099a15d5..4e999f696 100644 --- a/contracts/prototypes/zevm/SenderZEVM.sol +++ b/contracts/prototypes/zevm/SenderZEVM.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IGatewayZEVM.sol"; import "../../zevm/interfaces/IZRC20.sol"; +// @notice This contract is used just for testing contract SenderZEVM { address public gateway; error ApprovalFailed(); diff --git a/contracts/prototypes/zevm/TestZContract.sol b/contracts/prototypes/zevm/TestZContract.sol index b6d3f4010..785937164 100644 --- a/contracts/prototypes/zevm/TestZContract.sol +++ b/contracts/prototypes/zevm/TestZContract.sol @@ -4,8 +4,10 @@ pragma solidity 0.8.7; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../zevm/interfaces/zContract.sol"; +// @notice This contract is used just for testing contract TestZContract is UniversalContract { event ContextData(bytes origin, address sender, uint256 chainID, address msgSender, string message); + event ContextDataRevert(bytes origin, address sender, uint256 chainID, address msgSender, string message); function onCrossChainCall( zContext calldata context, @@ -30,6 +32,9 @@ contract TestZContract is UniversalContract { if (message.length > 0) { decodedMessage = abi.decode(message, (string)); } - emit ContextData(context.origin, context.sender, context.chainID, msg.sender, decodedMessage); + emit ContextDataRevert(context.origin, context.sender, context.chainID, msg.sender, decodedMessage); } + + receive() external payable {} + fallback() external payable {} } \ No newline at end of file diff --git a/contracts/zevm/WZETA.sol b/contracts/zevm/WZETA.sol index 42c54af8b..2e31390bb 100644 --- a/contracts/zevm/WZETA.sol +++ b/contracts/zevm/WZETA.sol @@ -1,61 +1,68 @@ -pragma solidity ^0.4.18; +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; contract WETH9 { - string public name = "Wrapped Zeta"; - string public symbol = "WZETA"; + string public name = "Wrapped Ether"; + string public symbol = "WETH"; uint8 public decimals = 18; - event Approval(address indexed src, address indexed guy, uint wad); - event Transfer(address indexed src, address indexed dst, uint wad); - event Deposit(address indexed dst, uint wad); - event Withdrawal(address indexed src, uint wad); + event Approval(address indexed src, address indexed guy, uint256 wad); + event Transfer(address indexed src, address indexed dst, uint256 wad); + event Deposit(address indexed dst, uint256 wad); + event Withdrawal(address indexed src, uint256 wad); - mapping(address => uint) public balanceOf; - mapping(address => mapping(address => uint)) public allowance; + mapping(address => uint256) public balanceOf; + mapping(address => mapping(address => uint256)) public allowance; - function() public payable { + receive() external payable { deposit(); } function deposit() public payable { balanceOf[msg.sender] += msg.value; - Deposit(msg.sender, msg.value); + emit Deposit(msg.sender, msg.value); } - function withdraw(uint wad) public { - require(balanceOf[msg.sender] >= wad); + function withdraw(uint256 wad) public { + require(balanceOf[msg.sender] >= wad, ""); balanceOf[msg.sender] -= wad; - msg.sender.transfer(wad); - Withdrawal(msg.sender, wad); + payable(msg.sender).transfer(wad); + emit Withdrawal(msg.sender, wad); } - function totalSupply() public view returns (uint) { - return this.balance; + function totalSupply() public view returns (uint256) { + return address(this).balance; } - function approve(address guy, uint wad) public returns (bool) { + function approve(address guy, uint256 wad) public returns (bool) { allowance[msg.sender][guy] = wad; - Approval(msg.sender, guy, wad); + emit Approval(msg.sender, guy, wad); return true; } - function transfer(address dst, uint wad) public returns (bool) { + function transfer(address dst, uint256 wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } - function transferFrom(address src, address dst, uint wad) public returns (bool) { - require(balanceOf[src] >= wad); + function transferFrom( + address src, + address dst, + uint256 wad + ) public returns (bool) { + require(balanceOf[src] >= wad, ""); - if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) { - require(allowance[src][msg.sender] >= wad); + if ( + src != msg.sender && allowance[src][msg.sender] != type(uint256).max + ) { + require(allowance[src][msg.sender] >= wad, ""); allowance[src][msg.sender] -= wad; } balanceOf[src] -= wad; balanceOf[dst] += wad; - Transfer(src, dst, wad); + emit Transfer(src, dst, wad); return true; } -} +} \ No newline at end of file diff --git a/data/addresses.mainnet.json b/data/addresses.mainnet.json index 5911c8c04..376b03d29 100644 --- a/data/addresses.mainnet.json +++ b/data/addresses.mainnet.json @@ -199,6 +199,19 @@ "symbol": "BTC.BTC", "type": "zrc20" }, + { + "address": "0x236b0DE675cC8F46AE186897fCCeFe3370C9eDeD", + "asset": "0x6982508145454ce325ddbe47a25d4ec3d2311933", + "category": "omnichain", + "chain_id": 7000, + "chain_name": "zeta_mainnet", + "coin_type": "erc20", + "decimals": 18, + "description": "ZetaChain ZRC20 PEPE on ETH", + "foreign_chain_id": "1", + "symbol": "PEPE.ETH", + "type": "zrc20" + }, { "address": "0x48f80608B672DC30DC7e3dbBd0343c5F02C738Eb", "asset": "", @@ -212,6 +225,19 @@ "symbol": "BNB.BSC", "type": "zrc20" }, + { + "address": "0x777915D031d1e8144c90D025C594b3b8Bf07a08d", + "asset": "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce", + "category": "omnichain", + "chain_id": 7000, + "chain_name": "zeta_mainnet", + "coin_type": "erc20", + "decimals": 18, + "description": "ZetaChain ZRC20 SHIB on ETH", + "foreign_chain_id": "1", + "symbol": "SHIB.ETH", + "type": "zrc20" + }, { "address": "0x7c8dDa80bbBE1254a7aACf3219EBe1481c6E01d7", "asset": "0xdac17f958d2ee523a2206206994597c13d831ec7", @@ -238,6 +264,19 @@ "symbol": "USDT.BSC", "type": "zrc20" }, + { + "address": "0xcC683A782f4B30c138787CB5576a86AF66fdc31d", + "asset": "0x6b175474e89094c44da98b954eedeac495271d0f", + "category": "omnichain", + "chain_id": 7000, + "chain_name": "zeta_mainnet", + "coin_type": "erc20", + "decimals": 18, + "description": "ZetaChain ZRC20 DAI on ETH", + "foreign_chain_id": "1", + "symbol": "DAI.ETH", + "type": "zrc20" + }, { "address": "0xd97B1de3619ed2c6BEb3860147E30cA8A7dC9891", "asset": "", diff --git a/lib/types.ts b/lib/types.ts index 00a69db41..c733dfedd 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -1,4 +1,4 @@ -export type ParamSymbol = "USDC.BSC" | "USDC.ETH" | "BTC.BTC" | "BNB.BSC" | "USDT.ETH" | "USDT.BSC" | "ETH.ETH" | "sETH.SEPOLIA" | "USDC" | "gETH" | "tMATIC" | "tBTC" | "MATIC.AMOY" | "USDC.SEPOLIA" | "tBNB"; +export type ParamSymbol = "USDC.BSC" | "USDC.ETH" | "BTC.BTC" | "PEPE.ETH" | "BNB.BSC" | "SHIB.ETH" | "USDT.ETH" | "USDT.BSC" | "DAI.ETH" | "ETH.ETH" | "sETH.SEPOLIA" | "USDC" | "gETH" | "tMATIC" | "tBTC" | "MATIC.AMOY" | "USDC.SEPOLIA" | "tBNB"; export type ParamChainName = "eth_mainnet" | "bsc_mainnet" | "zeta_mainnet" | "btc_mainnet" | "bsc_testnet" | "zeta_testnet" | "btc_testnet" | "amoy_testnet" | "sepolia_testnet"; export type ParamType = "connector" | "erc20Custody" | "pauser" | "tss" | "tssUpdater" | "uniswapV2Factory" | "uniswapV2Router02" | "uniswapV3Factory" | "uniswapV3Router" | "weth9" | "zetaToken" | "fungibleModule" | "systemContract" | "zrc20" | "zetaTokenConsumerUniV3"; diff --git a/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go b/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go index 1bd552298..13dd70da7 100644 --- a/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go +++ b/pkg/contracts/prototypes/evm/gatewayevm.sol/gatewayevm.go @@ -32,7 +32,7 @@ var ( // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RevertedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaConnector\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613c4462000243600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122084f923c76738030742931af51a40f0c0a7a6020c4d94ff93e54b3d756ce2e8b864736f6c63430008070033", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613c4462000243600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108782611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220062def546691dc60b8b2347c044e9cea9bd00dadb4eab14ae756bd185359a69964736f6c63430008070033", } // GatewayEVMABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index 856d0d225..33a46b99d 100644 --- a/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/pkg/contracts/prototypes/evm/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -32,7 +32,7 @@ var ( // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"RevertedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"custody\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tssAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"revertWithERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaConnector\",\"type\":\"address\"}],\"name\":\"setConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"setCustody\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tssAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220532e37c63a109f68316d1edcf713668fa374caec4a6df094fdf3d791e725c6d464736f6c63430008070033", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207a620a8f5e1407bdf259d6a98d79803d9d2c249529f99712b2a74e1bc0a940a664736f6c63430008070033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/evm/ireceiverevm.sol/ireceiverevmevents.go b/pkg/contracts/prototypes/evm/ireceiverevm.sol/ireceiverevmevents.go index 7d00091dd..c9841c66a 100644 --- a/pkg/contracts/prototypes/evm/ireceiverevm.sol/ireceiverevmevents.go +++ b/pkg/contracts/prototypes/evm/ireceiverevm.sol/ireceiverevmevents.go @@ -31,7 +31,7 @@ var ( // IReceiverEVMEventsMetaData contains all meta data concerning the IReceiverEVMEvents contract. var IReceiverEVMEventsMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"ReceivedERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ReceivedNoParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedNonPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedPayable\",\"type\":\"event\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"ReceivedERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ReceivedNoParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedNonPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ReceivedRevert\",\"type\":\"event\"}]", } // IReceiverEVMEventsABI is the input ABI used to generate the binding from. @@ -725,3 +725,138 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) ParseReceivedPayable(log event.Raw = log return event, nil } + +// IReceiverEVMEventsReceivedRevertIterator is returned from FilterReceivedRevert and is used to iterate over the raw logs and unpacked data for ReceivedRevert events raised by the IReceiverEVMEvents contract. +type IReceiverEVMEventsReceivedRevertIterator struct { + Event *IReceiverEVMEventsReceivedRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *IReceiverEVMEventsReceivedRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(IReceiverEVMEventsReceivedRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(IReceiverEVMEventsReceivedRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *IReceiverEVMEventsReceivedRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IReceiverEVMEventsReceivedRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IReceiverEVMEventsReceivedRevert represents a ReceivedRevert event raised by the IReceiverEVMEvents contract. +type IReceiverEVMEventsReceivedRevert struct { + Sender common.Address + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*IReceiverEVMEventsReceivedRevertIterator, error) { + + logs, sub, err := _IReceiverEVMEvents.contract.FilterLogs(opts, "ReceivedRevert") + if err != nil { + return nil, err + } + return &IReceiverEVMEventsReceivedRevertIterator{contract: _IReceiverEVMEvents.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil +} + +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *IReceiverEVMEventsReceivedRevert) (event.Subscription, error) { + + logs, sub, err := _IReceiverEVMEvents.contract.WatchLogs(opts, "ReceivedRevert") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(IReceiverEVMEventsReceivedRevert) + if err := _IReceiverEVMEvents.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedRevert is a log parse operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) ParseReceivedRevert(log types.Log) (*IReceiverEVMEventsReceivedRevert, error) { + event := new(IReceiverEVMEventsReceivedRevert) + if err := _IReceiverEVMEvents.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/evm/receiverevm.sol/receiverevm.go b/pkg/contracts/prototypes/evm/receiverevm.sol/receiverevm.go index 74e1c04d4..0780dd484 100644 --- a/pkg/contracts/prototypes/evm/receiverevm.sol/receiverevm.go +++ b/pkg/contracts/prototypes/evm/receiverevm.sol/receiverevm.go @@ -31,8 +31,8 @@ var ( // ReceiverEVMMetaData contains all meta data concerning the ReceiverEVM contract. var ReceiverEVMMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"ReceivedERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ReceivedNoParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedNonPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedPayable\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"receiveERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveNoParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"receiveNonPayable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"receivePayable\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061108a806100206000396000f3fe60806040526004361061003f5760003560e01c8063357fc5a2146100445780636ed701691461006d578063e04d4f9714610084578063f05b6abf146100a0575b600080fd5b34801561005057600080fd5b5061006b6004803603810190610066919061085a565b6100c9565b005b34801561007957600080fd5b50610082610138565b005b61009e600480360381019061009991906107eb565b610171565b005b3480156100ac57600080fd5b506100c760048036038101906100c29190610733565b6101b5565b005b6100f63382858573ffffffffffffffffffffffffffffffffffffffff166101f7909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af603384848460405161012b9493929190610bb0565b60405180910390a1505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101679190610b0b565b60405180910390a1565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516101a8959493929190610bf5565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516101ea9493929190610b5d565b60405180910390a1505050565b61027a846323b872dd60e01b85858560405160240161021893929190610b26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610280565b50505050565b60006102e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103479092919063ffffffff16565b9050600081511115610342578080602001905181019061030291906107be565b610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033890610cb1565b60405180910390fd5b5b505050565b6060610356848460008561035f565b90509392505050565b6060824710156103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610c71565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516103cd9190610af4565b60006040518083038185875af1925050503d806000811461040a576040519150601f19603f3d011682016040523d82523d6000602084013e61040f565b606091505b50915091506104208783838761042c565b92505050949350505050565b6060831561048f5760008351141561048757610447856104a2565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047d90610c91565b60405180910390fd5b5b82905061049a565b61049983836104c5565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156104d85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c9190610c4f565b60405180910390fd5b600061052861052384610cf6565b610cd1565b9050808382526020820190508285602086028201111561054b5761054a610f23565b5b60005b8581101561059957813567ffffffffffffffff81111561057157610570610f1e565b5b80860161057e89826106f0565b8552602085019450602084019350505060018101905061054e565b5050509392505050565b60006105b66105b184610d22565b610cd1565b905080838252602082019050828560208602820111156105d9576105d8610f23565b5b60005b8581101561060957816105ef888261071e565b8452602084019350602083019250506001810190506105dc565b5050509392505050565b600061062661062184610d4e565b610cd1565b90508281526020810184848401111561064257610641610f28565b5b61064d848285610e7c565b509392505050565b6000813590506106648161100f565b92915050565b600082601f83011261067f5761067e610f1e565b5b813561068f848260208601610515565b91505092915050565b600082601f8301126106ad576106ac610f1e565b5b81356106bd8482602086016105a3565b91505092915050565b6000813590506106d581611026565b92915050565b6000815190506106ea81611026565b92915050565b600082601f83011261070557610704610f1e565b5b8135610715848260208601610613565b91505092915050565b60008135905061072d8161103d565b92915050565b60008060006060848603121561074c5761074b610f32565b5b600084013567ffffffffffffffff81111561076a57610769610f2d565b5b6107768682870161066a565b935050602084013567ffffffffffffffff81111561079757610796610f2d565b5b6107a386828701610698565b92505060406107b4868287016106c6565b9150509250925092565b6000602082840312156107d4576107d3610f32565b5b60006107e2848285016106db565b91505092915050565b60008060006060848603121561080457610803610f32565b5b600084013567ffffffffffffffff81111561082257610821610f2d565b5b61082e868287016106f0565b935050602061083f8682870161071e565b9250506040610850868287016106c6565b9150509250925092565b60008060006060848603121561087357610872610f32565b5b60006108818682870161071e565b935050602061089286828701610655565b92505060406108a386828701610655565b9150509250925092565b60006108b983836109fb565b905092915050565b60006108cd8383610ad6565b60208301905092915050565b6108e281610e34565b82525050565b60006108f382610d9f565b6108fd8185610de5565b93508360208202850161090f85610d7f565b8060005b8581101561094b578484038952815161092c85826108ad565b945061093783610dcb565b925060208a01995050600181019050610913565b50829750879550505050505092915050565b600061096882610daa565b6109728185610df6565b935061097d83610d8f565b8060005b838110156109ae57815161099588826108c1565b97506109a083610dd8565b925050600181019050610981565b5085935050505092915050565b6109c481610e46565b82525050565b60006109d582610db5565b6109df8185610e07565b93506109ef818560208601610e8b565b80840191505092915050565b6000610a0682610dc0565b610a108185610e12565b9350610a20818560208601610e8b565b610a2981610f37565b840191505092915050565b6000610a3f82610dc0565b610a498185610e23565b9350610a59818560208601610e8b565b610a6281610f37565b840191505092915050565b6000610a7a602683610e23565b9150610a8582610f48565b604082019050919050565b6000610a9d601d83610e23565b9150610aa882610f97565b602082019050919050565b6000610ac0602a83610e23565b9150610acb82610fc0565b604082019050919050565b610adf81610e72565b82525050565b610aee81610e72565b82525050565b6000610b0082846109ca565b915081905092915050565b6000602082019050610b2060008301846108d9565b92915050565b6000606082019050610b3b60008301866108d9565b610b4860208301856108d9565b610b556040830184610ae5565b949350505050565b6000608082019050610b7260008301876108d9565b8181036020830152610b8481866108e8565b90508181036040830152610b98818561095d565b9050610ba760608301846109bb565b95945050505050565b6000608082019050610bc560008301876108d9565b610bd26020830186610ae5565b610bdf60408301856108d9565b610bec60608301846108d9565b95945050505050565b600060a082019050610c0a60008301886108d9565b610c176020830187610ae5565b8181036040830152610c298186610a34565b9050610c386060830185610ae5565b610c4560808301846109bb565b9695505050505050565b60006020820190508181036000830152610c698184610a34565b905092915050565b60006020820190508181036000830152610c8a81610a6d565b9050919050565b60006020820190508181036000830152610caa81610a90565b9050919050565b60006020820190508181036000830152610cca81610ab3565b9050919050565b6000610cdb610cec565b9050610ce78282610ebe565b919050565b6000604051905090565b600067ffffffffffffffff821115610d1157610d10610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d3d57610d3c610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d6957610d68610eef565b5b610d7282610f37565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610e3f82610e52565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610ea9578082015181840152602081019050610e8e565b83811115610eb8576000848401525b50505050565b610ec782610f37565b810181811067ffffffffffffffff82111715610ee657610ee5610eef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61101881610e34565b811461102357600080fd5b50565b61102f81610e46565b811461103a57600080fd5b50565b61104681610e72565b811461105157600080fd5b5056fea264697066735822122051bc1e54f38c77a2494563adb3467b39c2fd6e537d1dc0ced5a09c32d03b765064736f6c63430008070033", + ABI: "[{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"ReceivedERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ReceivedNoParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedNonPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ReceivedRevert\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"receiveERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"receiveERC20Partial\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveNoParams\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"receiveNonPayable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"receivePayable\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b506001600081905550611453806100286000396000f3fe6080604052600436106100595760003560e01c8063357fc5a2146100625780636ed701691461008b5780638fcaa0b5146100a2578063c5131691146100cb578063e04d4f97146100f4578063f05b6abf1461011057610060565b3661006057005b005b34801561006e57600080fd5b5061008960048036038101906100849190610ae2565b610139565b005b34801561009757600080fd5b506100a06101b8565b005b3480156100ae57600080fd5b506100c960048036038101906100c49190610a26565b6101f1565b005b3480156100d757600080fd5b506100f260048036038101906100ed9190610ae2565b610230565b005b61010e60048036038101906101099190610a73565b6102fc565b005b34801561011c57600080fd5b506101376004803603810190610132919061096e565b610340565b005b610141610382565b61016e3382858573ffffffffffffffffffffffffffffffffffffffff166103d2909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60338484846040516101a39493929190610eba565b60405180910390a16101b361045b565b505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101e79190610de3565b60405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161022493929190610e88565b60405180910390a15050565b610238610382565b6000600284610247919061116f565b90506000811415610284576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102b13383838673ffffffffffffffffffffffffffffffffffffffff166103d2909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60338285856040516102e69493929190610eba565b60405180910390a1506102f761045b565b505050565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610333959493929190610eff565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103759493929190610e35565b60405180910390a1505050565b600260005414156103c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bf90610fdb565b60405180910390fd5b6002600081905550565b610455846323b872dd60e01b8585856040516024016103f393929190610dfe565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610465565b50505050565b6001600081905550565b60006104c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661052c9092919063ffffffff16565b905060008151111561052757808060200190518101906104e791906109f9565b610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051d90610fbb565b60405180910390fd5b5b505050565b606061053b8484600085610544565b90509392505050565b606082471015610589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058090610f7b565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516105b29190610dcc565b60006040518083038185875af1925050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b509150915061060587838387610611565b92505050949350505050565b606083156106745760008351141561066c5761062c85610687565b61066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290610f9b565b60405180910390fd5b5b82905061067f565b61067e83836106aa565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106bd5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f19190610f59565b60405180910390fd5b600061070d61070884611020565b610ffb565b905080838252602082019050828560208602820111156107305761072f6112c3565b5b60005b8581101561077e57813567ffffffffffffffff811115610756576107556112be565b5b808601610763898261092b565b85526020850194506020840193505050600181019050610733565b5050509392505050565b600061079b6107968461104c565b610ffb565b905080838252602082019050828560208602820111156107be576107bd6112c3565b5b60005b858110156107ee57816107d48882610959565b8452602084019350602083019250506001810190506107c1565b5050509392505050565b600061080b61080684611078565b610ffb565b905082815260208101848484011115610827576108266112c8565b5b6108328482856111e8565b509392505050565b600081359050610849816113d8565b92915050565b600082601f830112610864576108636112be565b5b81356108748482602086016106fa565b91505092915050565b600082601f830112610892576108916112be565b5b81356108a2848260208601610788565b91505092915050565b6000813590506108ba816113ef565b92915050565b6000815190506108cf816113ef565b92915050565b60008083601f8401126108eb576108ea6112be565b5b8235905067ffffffffffffffff811115610908576109076112b9565b5b602083019150836001820283011115610924576109236112c3565b5b9250929050565b600082601f8301126109405761093f6112be565b5b81356109508482602086016107f8565b91505092915050565b60008135905061096881611406565b92915050565b600080600060608486031215610987576109866112d2565b5b600084013567ffffffffffffffff8111156109a5576109a46112cd565b5b6109b18682870161084f565b935050602084013567ffffffffffffffff8111156109d2576109d16112cd565b5b6109de8682870161087d565b92505060406109ef868287016108ab565b9150509250925092565b600060208284031215610a0f57610a0e6112d2565b5b6000610a1d848285016108c0565b91505092915050565b60008060208385031215610a3d57610a3c6112d2565b5b600083013567ffffffffffffffff811115610a5b57610a5a6112cd565b5b610a67858286016108d5565b92509250509250929050565b600080600060608486031215610a8c57610a8b6112d2565b5b600084013567ffffffffffffffff811115610aaa57610aa96112cd565b5b610ab68682870161092b565b9350506020610ac786828701610959565b9250506040610ad8868287016108ab565b9150509250925092565b600080600060608486031215610afb57610afa6112d2565b5b6000610b0986828701610959565b9350506020610b1a8682870161083a565b9250506040610b2b8682870161083a565b9150509250925092565b6000610b418383610cb0565b905092915050565b6000610b558383610dae565b60208301905092915050565b610b6a816111a0565b82525050565b6000610b7b826110c9565b610b85818561110f565b935083602082028501610b97856110a9565b8060005b85811015610bd35784840389528151610bb48582610b35565b9450610bbf836110f5565b925060208a01995050600181019050610b9b565b50829750879550505050505092915050565b6000610bf0826110d4565b610bfa8185611120565b9350610c05836110b9565b8060005b83811015610c36578151610c1d8882610b49565b9750610c2883611102565b925050600181019050610c09565b5085935050505092915050565b610c4c816111b2565b82525050565b6000610c5e8385611131565b9350610c6b8385846111e8565b610c74836112d7565b840190509392505050565b6000610c8a826110df565b610c948185611142565b9350610ca48185602086016111f7565b80840191505092915050565b6000610cbb826110ea565b610cc5818561114d565b9350610cd58185602086016111f7565b610cde816112d7565b840191505092915050565b6000610cf4826110ea565b610cfe818561115e565b9350610d0e8185602086016111f7565b610d17816112d7565b840191505092915050565b6000610d2f60268361115e565b9150610d3a826112e8565b604082019050919050565b6000610d52601d8361115e565b9150610d5d82611337565b602082019050919050565b6000610d75602a8361115e565b9150610d8082611360565b604082019050919050565b6000610d98601f8361115e565b9150610da3826113af565b602082019050919050565b610db7816111de565b82525050565b610dc6816111de565b82525050565b6000610dd88284610c7f565b915081905092915050565b6000602082019050610df86000830184610b61565b92915050565b6000606082019050610e136000830186610b61565b610e206020830185610b61565b610e2d6040830184610dbd565b949350505050565b6000608082019050610e4a6000830187610b61565b8181036020830152610e5c8186610b70565b90508181036040830152610e708185610be5565b9050610e7f6060830184610c43565b95945050505050565b6000604082019050610e9d6000830186610b61565b8181036020830152610eb0818486610c52565b9050949350505050565b6000608082019050610ecf6000830187610b61565b610edc6020830186610dbd565b610ee96040830185610b61565b610ef66060830184610b61565b95945050505050565b600060a082019050610f146000830188610b61565b610f216020830187610dbd565b8181036040830152610f338186610ce9565b9050610f426060830185610dbd565b610f4f6080830184610c43565b9695505050505050565b60006020820190508181036000830152610f738184610ce9565b905092915050565b60006020820190508181036000830152610f9481610d22565b9050919050565b60006020820190508181036000830152610fb481610d45565b9050919050565b60006020820190508181036000830152610fd481610d68565b9050919050565b60006020820190508181036000830152610ff481610d8b565b9050919050565b6000611005611016565b9050611011828261122a565b919050565b6000604051905090565b600067ffffffffffffffff82111561103b5761103a61128a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156110675761106661128a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156110935761109261128a565b5b61109c826112d7565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061117a826111de565b9150611185836111de565b9250826111955761119461125b565b5b828204905092915050565b60006111ab826111be565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156112155780820151818401526020810190506111fa565b83811115611224576000848401525b50505050565b611233826112d7565b810181811067ffffffffffffffff821117156112525761125161128a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6113e1816111a0565b81146113ec57600080fd5b50565b6113f8816111b2565b811461140357600080fd5b50565b61140f816111de565b811461141a57600080fd5b5056fea2646970667358221220806b40b0ed017d4b60c2eaaa0b400159c25423da3eb36986617bf147e45550f364736f6c63430008070033", } // ReceiverEVMABI is the input ABI used to generate the binding from. @@ -202,6 +202,27 @@ func (_ReceiverEVM *ReceiverEVMTransactorRaw) Transact(opts *bind.TransactOpts, return _ReceiverEVM.Contract.contract.Transact(opts, method, params...) } +// OnRevert is a paid mutator transaction binding the contract method 0x8fcaa0b5. +// +// Solidity: function onRevert(bytes data) returns() +func (_ReceiverEVM *ReceiverEVMTransactor) OnRevert(opts *bind.TransactOpts, data []byte) (*types.Transaction, error) { + return _ReceiverEVM.contract.Transact(opts, "onRevert", data) +} + +// OnRevert is a paid mutator transaction binding the contract method 0x8fcaa0b5. +// +// Solidity: function onRevert(bytes data) returns() +func (_ReceiverEVM *ReceiverEVMSession) OnRevert(data []byte) (*types.Transaction, error) { + return _ReceiverEVM.Contract.OnRevert(&_ReceiverEVM.TransactOpts, data) +} + +// OnRevert is a paid mutator transaction binding the contract method 0x8fcaa0b5. +// +// Solidity: function onRevert(bytes data) returns() +func (_ReceiverEVM *ReceiverEVMTransactorSession) OnRevert(data []byte) (*types.Transaction, error) { + return _ReceiverEVM.Contract.OnRevert(&_ReceiverEVM.TransactOpts, data) +} + // ReceiveERC20 is a paid mutator transaction binding the contract method 0x357fc5a2. // // Solidity: function receiveERC20(uint256 amount, address token, address destination) returns() @@ -223,6 +244,27 @@ func (_ReceiverEVM *ReceiverEVMTransactorSession) ReceiveERC20(amount *big.Int, return _ReceiverEVM.Contract.ReceiveERC20(&_ReceiverEVM.TransactOpts, amount, token, destination) } +// ReceiveERC20Partial is a paid mutator transaction binding the contract method 0xc5131691. +// +// Solidity: function receiveERC20Partial(uint256 amount, address token, address destination) returns() +func (_ReceiverEVM *ReceiverEVMTransactor) ReceiveERC20Partial(opts *bind.TransactOpts, amount *big.Int, token common.Address, destination common.Address) (*types.Transaction, error) { + return _ReceiverEVM.contract.Transact(opts, "receiveERC20Partial", amount, token, destination) +} + +// ReceiveERC20Partial is a paid mutator transaction binding the contract method 0xc5131691. +// +// Solidity: function receiveERC20Partial(uint256 amount, address token, address destination) returns() +func (_ReceiverEVM *ReceiverEVMSession) ReceiveERC20Partial(amount *big.Int, token common.Address, destination common.Address) (*types.Transaction, error) { + return _ReceiverEVM.Contract.ReceiveERC20Partial(&_ReceiverEVM.TransactOpts, amount, token, destination) +} + +// ReceiveERC20Partial is a paid mutator transaction binding the contract method 0xc5131691. +// +// Solidity: function receiveERC20Partial(uint256 amount, address token, address destination) returns() +func (_ReceiverEVM *ReceiverEVMTransactorSession) ReceiveERC20Partial(amount *big.Int, token common.Address, destination common.Address) (*types.Transaction, error) { + return _ReceiverEVM.Contract.ReceiveERC20Partial(&_ReceiverEVM.TransactOpts, amount, token, destination) +} + // ReceiveNoParams is a paid mutator transaction binding the contract method 0x6ed70169. // // Solidity: function receiveNoParams() returns() @@ -286,6 +328,48 @@ func (_ReceiverEVM *ReceiverEVMTransactorSession) ReceivePayable(str string, num return _ReceiverEVM.Contract.ReceivePayable(&_ReceiverEVM.TransactOpts, str, num, flag) } +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ReceiverEVM *ReceiverEVMTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _ReceiverEVM.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ReceiverEVM *ReceiverEVMSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _ReceiverEVM.Contract.Fallback(&_ReceiverEVM.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ReceiverEVM *ReceiverEVMTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _ReceiverEVM.Contract.Fallback(&_ReceiverEVM.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ReceiverEVM *ReceiverEVMTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReceiverEVM.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ReceiverEVM *ReceiverEVMSession) Receive() (*types.Transaction, error) { + return _ReceiverEVM.Contract.Receive(&_ReceiverEVM.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ReceiverEVM *ReceiverEVMTransactorSession) Receive() (*types.Transaction, error) { + return _ReceiverEVM.Contract.Receive(&_ReceiverEVM.TransactOpts) +} + // ReceiverEVMReceivedERC20Iterator is returned from FilterReceivedERC20 and is used to iterate over the raw logs and unpacked data for ReceivedERC20 events raised by the ReceiverEVM contract. type ReceiverEVMReceivedERC20Iterator struct { Event *ReceiverEVMReceivedERC20 // Event containing the contract specifics and raw log @@ -831,3 +915,138 @@ func (_ReceiverEVM *ReceiverEVMFilterer) ParseReceivedPayable(log types.Log) (*R event.Raw = log return event, nil } + +// ReceiverEVMReceivedRevertIterator is returned from FilterReceivedRevert and is used to iterate over the raw logs and unpacked data for ReceivedRevert events raised by the ReceiverEVM contract. +type ReceiverEVMReceivedRevertIterator struct { + Event *ReceiverEVMReceivedRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ReceiverEVMReceivedRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReceiverEVMReceivedRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ReceiverEVMReceivedRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ReceiverEVMReceivedRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ReceiverEVMReceivedRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ReceiverEVMReceivedRevert represents a ReceivedRevert event raised by the ReceiverEVM contract. +type ReceiverEVMReceivedRevert struct { + Sender common.Address + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ReceiverEVMReceivedRevertIterator, error) { + + logs, sub, err := _ReceiverEVM.contract.FilterLogs(opts, "ReceivedRevert") + if err != nil { + return nil, err + } + return &ReceiverEVMReceivedRevertIterator{contract: _ReceiverEVM.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil +} + +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ReceiverEVMReceivedRevert) (event.Subscription, error) { + + logs, sub, err := _ReceiverEVM.contract.WatchLogs(opts, "ReceivedRevert") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ReceiverEVMReceivedRevert) + if err := _ReceiverEVM.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedRevert is a log parse operation binding the contract event 0x0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa. +// +// Solidity: event ReceivedRevert(address sender, bytes data) +func (_ReceiverEVM *ReceiverEVMFilterer) ParseReceivedRevert(log types.Log) (*ReceiverEVMReceivedRevert, error) { + event := new(ReceiverEVMReceivedRevert) + if err := _ReceiverEVM.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/evm/testerc20.sol/testerc20.go b/pkg/contracts/prototypes/evm/testerc20.sol/testerc20.go index b759aaaf7..c8fd605cd 100644 --- a/pkg/contracts/prototypes/evm/testerc20.sol/testerc20.go +++ b/pkg/contracts/prototypes/evm/testerc20.sol/testerc20.go @@ -32,7 +32,7 @@ var ( // TestERC20MetaData contains all meta data concerning the TestERC20 contract. var TestERC20MetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220545991303ac9a4f6b3cfc261c565c8e48863d83d13d75ba6df5ddb3ee8e609dd64736f6c63430008070033", + Bin: "0x60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220fcfdc568a663fff3ad57cec6847cf2da019cf465788683cdfa49393f729d6a9f64736f6c63430008070033", } // TestERC20ABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go b/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go index f74c4a13b..cbc1e8c08 100644 --- a/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go +++ b/pkg/contracts/prototypes/evm/zetaconnectornative.sol/zetaconnectornative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620011f8380380620011f8833981810160405281019062000037919062000170565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a95750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506200020a565b6000815190506200016a81620001f0565b92915050565b600080604083850312156200018a5762000189620001eb565b5b60006200019a8582860162000159565b9250506020620001ad8582860162000159565b9150509250929050565b6000620001c482620001cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001fb81620001b7565b81146200020757600080fd5b50565b60805160601c60a05160601c610f996200025f6000396000818160fb015281816101c00152818161021101528181610293015261037901526000818161019c015281816101ef01526102570152610f996000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063106e62901461005c578063116191b61461007857806321e093b1146100965780635e3e9fef146100b4578063743e0c9b146100d0575b600080fd5b61007660048036038101906100719190610871565b6100ec565b005b61008061019a565b60405161008d9190610bd6565b60405180910390f35b61009e6101be565b6040516100ab9190610b0d565b60405180910390f35b6100ce60048036038101906100c991906108c4565b6101e2565b005b6100ea60048036038101906100e59190610979565b610369565b005b6100f46103c9565b61013f83837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104199092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516101859190610c93565b60405180910390a261019561049f565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6101ea6103c9565b6102557f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104199092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b81526004016102d6959493929190610b5f565b600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced85858560405161035293929190610cae565b60405180910390a261036261049f565b5050505050565b6103716103c9565b6103be3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104a9909392919063ffffffff16565b6103c661049f565b50565b6002600054141561040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040690610c73565b60405180910390fd5b6002600081905550565b61049a8363a9059cbb60e01b8484604051602401610438929190610bad565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610532565b505050565b6001600081905550565b61052c846323b872dd60e01b8585856040516024016104ca93929190610b28565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610532565b50505050565b6000610594826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166105f99092919063ffffffff16565b90506000815111156105f457808060200190518101906105b4919061094c565b6105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90610c53565b60405180910390fd5b5b505050565b60606106088484600085610611565b90509392505050565b606082471015610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d90610c13565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161067f9190610af6565b60006040518083038185875af1925050503d80600081146106bc576040519150601f19603f3d011682016040523d82523d6000602084013e6106c1565b606091505b50915091506106d2878383876106de565b92505050949350505050565b6060831561074157600083511415610739576106f985610754565b610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f90610c33565b60405180910390fd5b5b82905061074c565b61074b8383610777565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561078a5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be9190610bf1565b60405180910390fd5b6000813590506107d681610f07565b92915050565b6000815190506107eb81610f1e565b92915050565b60008135905061080081610f35565b92915050565b60008083601f84011261081c5761081b610df2565b5b8235905067ffffffffffffffff81111561083957610838610ded565b5b60208301915083600182028301111561085557610854610df7565b5b9250929050565b60008135905061086b81610f4c565b92915050565b60008060006060848603121561088a57610889610e01565b5b6000610898868287016107c7565b93505060206108a98682870161085c565b92505060406108ba868287016107f1565b9150509250925092565b6000806000806000608086880312156108e0576108df610e01565b5b60006108ee888289016107c7565b95505060206108ff8882890161085c565b945050604086013567ffffffffffffffff8111156109205761091f610dfc565b5b61092c88828901610806565b9350935050606061093f888289016107f1565b9150509295509295909350565b60006020828403121561096257610961610e01565b5b6000610970848285016107dc565b91505092915050565b60006020828403121561098f5761098e610e01565b5b600061099d8482850161085c565b91505092915050565b6109af81610d23565b82525050565b60006109c18385610cf6565b93506109ce838584610dab565b6109d783610e06565b840190509392505050565b60006109ed82610ce0565b6109f78185610d07565b9350610a07818560208601610dba565b80840191505092915050565b610a1c81610d75565b82525050565b6000610a2d82610ceb565b610a378185610d12565b9350610a47818560208601610dba565b610a5081610e06565b840191505092915050565b6000610a68602683610d12565b9150610a7382610e17565b604082019050919050565b6000610a8b601d83610d12565b9150610a9682610e66565b602082019050919050565b6000610aae602a83610d12565b9150610ab982610e8f565b604082019050919050565b6000610ad1601f83610d12565b9150610adc82610ede565b602082019050919050565b610af081610d6b565b82525050565b6000610b0282846109e2565b915081905092915050565b6000602082019050610b2260008301846109a6565b92915050565b6000606082019050610b3d60008301866109a6565b610b4a60208301856109a6565b610b576040830184610ae7565b949350505050565b6000608082019050610b7460008301886109a6565b610b8160208301876109a6565b610b8e6040830186610ae7565b8181036060830152610ba18184866109b5565b90509695505050505050565b6000604082019050610bc260008301856109a6565b610bcf6020830184610ae7565b9392505050565b6000602082019050610beb6000830184610a13565b92915050565b60006020820190508181036000830152610c0b8184610a22565b905092915050565b60006020820190508181036000830152610c2c81610a5b565b9050919050565b60006020820190508181036000830152610c4c81610a7e565b9050919050565b60006020820190508181036000830152610c6c81610aa1565b9050919050565b60006020820190508181036000830152610c8c81610ac4565b9050919050565b6000602082019050610ca86000830184610ae7565b92915050565b6000604082019050610cc36000830186610ae7565b8181036020830152610cd68184866109b5565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610d2e82610d4b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610d8082610d87565b9050919050565b6000610d9282610d99565b9050919050565b6000610da482610d4b565b9050919050565b82818337600083830152505050565b60005b83811015610dd8578082015181840152602081019050610dbd565b83811115610de7576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610f1081610d23565b8114610f1b57600080fd5b50565b610f2781610d35565b8114610f3257600080fd5b50565b610f3e81610d41565b8114610f4957600080fd5b50565b610f5581610d6b565b8114610f6057600080fd5b5056fea2646970667358221220803b1b61d9a48929331d7fb799447a2bd4fe5cf7344a4df486f14b980d6769f964736f6c63430008070033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c06040523480156200001157600080fd5b50604051620013b3380380620013b3833981810160405281019062000037919062000170565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a95750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506200020a565b6000815190506200016a81620001f0565b92915050565b600080604083850312156200018a5762000189620001eb565b5b60006200019a8582860162000159565b9250506020620001ad8582860162000159565b9150509250929050565b6000620001c482620001cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001fb81620001b7565b81146200020757600080fd5b50565b60805160601c60a05160601c6111376200027c60003960008181610142015281816101c4015281816102a90152818161036e015281816103bf01528181610441015261051f015260008181610120015281816101880152818161034a0152818161039d015261040501526111376000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c9190610a62565b610113565b005b61009d60048036038101906100989190610a0f565b61029a565b005b6100a7610348565b6040516100b49190610d74565b60405180910390f35b6100c561036c565b6040516100d29190610cab565b60405180910390f35b6100f560048036038101906100f09190610a62565b610390565b005b610111600480360381019061010c9190610b17565b610517565b005b61011b610567565b6101867f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610207959493929190610cfd565b600060405180830381600087803b15801561022157600080fd5b505af1158015610235573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161028393929190610e4c565b60405180910390a261029361063d565b5050505050565b6102a2610567565b6102ed83837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103339190610e31565b60405180910390a261034361063d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610398610567565b6104037f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610484959493929190610cfd565b600060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced85858560405161050093929190610e4c565b60405180910390a261051061063d565b5050505050565b6105643330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610647909392919063ffffffff16565b50565b600260005414156105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490610e11565b60405180910390fd5b6002600081905550565b6106388363a9059cbb60e01b84846040516024016105d6929190610d4b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b505050565b6001600081905550565b6106ca846323b872dd60e01b85858560405160240161066893929190610cc6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b50505050565b6000610732826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107979092919063ffffffff16565b905060008151111561079257808060200190518101906107529190610aea565b610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078890610df1565b60405180910390fd5b5b505050565b60606107a684846000856107af565b90509392505050565b6060824710156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90610db1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161081d9190610c94565b60006040518083038185875af1925050503d806000811461085a576040519150601f19603f3d011682016040523d82523d6000602084013e61085f565b606091505b50915091506108708783838761087c565b92505050949350505050565b606083156108df576000835114156108d757610897856108f2565b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90610dd1565b60405180910390fd5b5b8290506108ea565b6108e98383610915565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156109285781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c9190610d8f565b60405180910390fd5b600081359050610974816110a5565b92915050565b600081519050610989816110bc565b92915050565b60008135905061099e816110d3565b92915050565b60008083601f8401126109ba576109b9610f90565b5b8235905067ffffffffffffffff8111156109d7576109d6610f8b565b5b6020830191508360018202830111156109f3576109f2610f95565b5b9250929050565b600081359050610a09816110ea565b92915050565b600080600060608486031215610a2857610a27610f9f565b5b6000610a3686828701610965565b9350506020610a47868287016109fa565b9250506040610a588682870161098f565b9150509250925092565b600080600080600060808688031215610a7e57610a7d610f9f565b5b6000610a8c88828901610965565b9550506020610a9d888289016109fa565b945050604086013567ffffffffffffffff811115610abe57610abd610f9a565b5b610aca888289016109a4565b93509350506060610add8882890161098f565b9150509295509295909350565b600060208284031215610b0057610aff610f9f565b5b6000610b0e8482850161097a565b91505092915050565b600060208284031215610b2d57610b2c610f9f565b5b6000610b3b848285016109fa565b91505092915050565b610b4d81610ec1565b82525050565b6000610b5f8385610e94565b9350610b6c838584610f49565b610b7583610fa4565b840190509392505050565b6000610b8b82610e7e565b610b958185610ea5565b9350610ba5818560208601610f58565b80840191505092915050565b610bba81610f13565b82525050565b6000610bcb82610e89565b610bd58185610eb0565b9350610be5818560208601610f58565b610bee81610fa4565b840191505092915050565b6000610c06602683610eb0565b9150610c1182610fb5565b604082019050919050565b6000610c29601d83610eb0565b9150610c3482611004565b602082019050919050565b6000610c4c602a83610eb0565b9150610c578261102d565b604082019050919050565b6000610c6f601f83610eb0565b9150610c7a8261107c565b602082019050919050565b610c8e81610f09565b82525050565b6000610ca08284610b80565b915081905092915050565b6000602082019050610cc06000830184610b44565b92915050565b6000606082019050610cdb6000830186610b44565b610ce86020830185610b44565b610cf56040830184610c85565b949350505050565b6000608082019050610d126000830188610b44565b610d1f6020830187610b44565b610d2c6040830186610c85565b8181036060830152610d3f818486610b53565b90509695505050505050565b6000604082019050610d606000830185610b44565b610d6d6020830184610c85565b9392505050565b6000602082019050610d896000830184610bb1565b92915050565b60006020820190508181036000830152610da98184610bc0565b905092915050565b60006020820190508181036000830152610dca81610bf9565b9050919050565b60006020820190508181036000830152610dea81610c1c565b9050919050565b60006020820190508181036000830152610e0a81610c3f565b9050919050565b60006020820190508181036000830152610e2a81610c62565b9050919050565b6000602082019050610e466000830184610c85565b92915050565b6000604082019050610e616000830186610c85565b8181036020830152610e74818486610b53565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610ecc82610ee9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610f1e82610f25565b9050919050565b6000610f3082610f37565b9050919050565b6000610f4282610ee9565b9050919050565b82818337600083830152505050565b60005b83811015610f76578082015181840152602081019050610f5b565b83811115610f85576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6110ae81610ec1565b81146110b957600080fd5b50565b6110c581610ed3565b81146110d057600080fd5b50565b6110dc81610edf565b81146110e757600080fd5b50565b6110f381610f09565b81146110fe57600080fd5b5056fea26469706673582212200e9dddf368c3ba5db7f48f5e58ca49b68962f70e56e54ab42ef1145f5ce62e6164736f6c63430008070033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -327,6 +327,27 @@ func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndCal return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash) } +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNative.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.WithdrawAndRevert(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.WithdrawAndRevert(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash) +} + // ZetaConnectorNativeWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ZetaConnectorNative contract. type ZetaConnectorNativeWithdrawIterator struct { Event *ZetaConnectorNativeWithdraw // Event containing the contract specifics and raw log @@ -617,3 +638,149 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseWithdrawAndCall(lo event.Raw = log return event, nil } + +// ZetaConnectorNativeWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the ZetaConnectorNative contract. +type ZetaConnectorNativeWithdrawAndRevertIterator struct { + Event *ZetaConnectorNativeWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZetaConnectorNativeWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZetaConnectorNativeWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZetaConnectorNativeWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZetaConnectorNativeWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNativeWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNativeWithdrawAndRevert represents a WithdrawAndRevert event raised by the ZetaConnectorNative contract. +type ZetaConnectorNativeWithdrawAndRevert struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeWithdrawAndRevertIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNative.contract.FilterLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNativeWithdrawAndRevertIterator{contract: _ZetaConnectorNative.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeWithdrawAndRevert, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNative.contract.WatchLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZetaConnectorNativeWithdrawAndRevert) + if err := _ZetaConnectorNative.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseWithdrawAndRevert(log types.Log) (*ZetaConnectorNativeWithdrawAndRevert, error) { + event := new(ZetaConnectorNativeWithdrawAndRevert) + if err := _ZetaConnectorNative.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go b/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go index e9fea6d63..5fe23ae9a 100644 --- a/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go +++ b/pkg/contracts/prototypes/evm/zetaconnectornewbase.sol/zetaconnectornewbase.go @@ -31,7 +31,7 @@ var ( // ZetaConnectorNewBaseMetaData contains all meta data concerning the ZetaConnectorNewBase contract. var ZetaConnectorNewBaseMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ZetaConnectorNewBaseABI is the input ABI used to generate the binding from. @@ -305,6 +305,27 @@ func (_ZetaConnectorNewBase *ZetaConnectorNewBaseTransactorSession) WithdrawAndC return _ZetaConnectorNewBase.Contract.WithdrawAndCall(&_ZetaConnectorNewBase.TransactOpts, to, amount, data, internalSendHash) } +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNewBase.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNewBase.Contract.WithdrawAndRevert(&_ZetaConnectorNewBase.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNewBase.Contract.WithdrawAndRevert(&_ZetaConnectorNewBase.TransactOpts, to, amount, data, internalSendHash) +} + // ZetaConnectorNewBaseWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ZetaConnectorNewBase contract. type ZetaConnectorNewBaseWithdrawIterator struct { Event *ZetaConnectorNewBaseWithdraw // Event containing the contract specifics and raw log @@ -595,3 +616,149 @@ func (_ZetaConnectorNewBase *ZetaConnectorNewBaseFilterer) ParseWithdrawAndCall( event.Raw = log return event, nil } + +// ZetaConnectorNewBaseWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the ZetaConnectorNewBase contract. +type ZetaConnectorNewBaseWithdrawAndRevertIterator struct { + Event *ZetaConnectorNewBaseWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZetaConnectorNewBaseWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZetaConnectorNewBaseWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZetaConnectorNewBaseWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZetaConnectorNewBaseWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNewBaseWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNewBaseWithdrawAndRevert represents a WithdrawAndRevert event raised by the ZetaConnectorNewBase contract. +type ZetaConnectorNewBaseWithdrawAndRevert struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNewBaseWithdrawAndRevertIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNewBase.contract.FilterLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNewBaseWithdrawAndRevertIterator{contract: _ZetaConnectorNewBase.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNewBaseWithdrawAndRevert, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNewBase.contract.WatchLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZetaConnectorNewBaseWithdrawAndRevert) + if err := _ZetaConnectorNewBase.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNewBase *ZetaConnectorNewBaseFilterer) ParseWithdrawAndRevert(log types.Log) (*ZetaConnectorNewBaseWithdrawAndRevert, error) { + event := new(ZetaConnectorNewBaseWithdrawAndRevert) + if err := _ZetaConnectorNewBase.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go b/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go index 661358431..4ca39e053 100644 --- a/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/pkg/contracts/prototypes/evm/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -31,8 +31,8 @@ var ( // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c060405234801561001057600080fd5b50604051610c18380380610c1883398181016040528101906100329190610166565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806100a35750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156100da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506101f4565b600081519050610160816101dd565b92915050565b6000806040838503121561017d5761017c6101d8565b5b600061018b85828601610151565b925050602061019c85828601610151565b9150509250929050565b60006101b1826101b8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101e6816101a6565b81146101f157600080fd5b50565b60805160601c60a05160601c6109d06102486000396000818160f601528181610204015281816102300152818161031b01526103f30152600081816101e00152818161026c01526102df01526109d06000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063106e62901461005c578063116191b61461007857806321e093b1146100965780635e3e9fef146100b4578063743e0c9b146100d0575b600080fd5b61007660048036038101906100719190610570565b6100ec565b005b6100806101de565b60405161008d91906107cd565b60405180910390f35b61009e610202565b6040516100ab9190610704565b60405180910390f35b6100ce60048036038101906100c991906105c3565b610226565b005b6100ea60048036038101906100e5919061064b565b6103f1565b005b6100f4610481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161015193929190610796565b600060405180830381600087803b15801561016b57600080fd5b505af115801561017f573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516101c99190610808565b60405180910390a26101d96104d1565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61022e610481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b81526004016102ab93929190610796565b600060405180830381600087803b1580156102c557600080fd5b505af11580156102d9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161035e95949392919061071f565b600060405180830381600087803b15801561037857600080fd5b505af115801561038c573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516103da93929190610823565b60405180910390a26103ea6104d1565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161044c92919061076d565b600060405180830381600087803b15801561046657600080fd5b505af115801561047a573d6000803e3d6000fd5b5050505050565b600260005414156104c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104be906107e8565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506104ea81610955565b92915050565b6000813590506104ff8161096c565b92915050565b60008083601f84011261051b5761051a610907565b5b8235905067ffffffffffffffff81111561053857610537610902565b5b6020830191508360018202830111156105545761055361090c565b5b9250929050565b60008135905061056a81610983565b92915050565b60008060006060848603121561058957610588610916565b5b6000610597868287016104db565b93505060206105a88682870161055b565b92505060406105b9868287016104f0565b9150509250925092565b6000806000806000608086880312156105df576105de610916565b5b60006105ed888289016104db565b95505060206105fe8882890161055b565b945050604086013567ffffffffffffffff81111561061f5761061e610911565b5b61062b88828901610505565b9350935050606061063e888289016104f0565b9150509295509295909350565b60006020828403121561066157610660610916565b5b600061066f8482850161055b565b91505092915050565b61068181610877565b82525050565b61069081610889565b82525050565b60006106a28385610855565b93506106af8385846108f3565b6106b88361091b565b840190509392505050565b6106cc816108bd565b82525050565b60006106df601f83610866565b91506106ea8261092c565b602082019050919050565b6106fe816108b3565b82525050565b60006020820190506107196000830184610678565b92915050565b60006080820190506107346000830188610678565b6107416020830187610678565b61074e60408301866106f5565b8181036060830152610761818486610696565b90509695505050505050565b60006040820190506107826000830185610678565b61078f60208301846106f5565b9392505050565b60006060820190506107ab6000830186610678565b6107b860208301856106f5565b6107c56040830184610687565b949350505050565b60006020820190506107e260008301846106c3565b92915050565b60006020820190508181036000830152610801816106d2565b9050919050565b600060208201905061081d60008301846106f5565b92915050565b600060408201905061083860008301866106f5565b818103602083015261084b818486610696565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b600061088282610893565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006108c8826108cf565b9050919050565b60006108da826108e1565b9050919050565b60006108ec82610893565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61095e81610877565b811461096957600080fd5b50565b61097581610889565b811461098057600080fd5b50565b61098c816108b3565b811461099757600080fd5b5056fea2646970667358221220e6b6811341e6810863fc582bbf0b3edb30dec963e5ec7c90c02891757d26385764736f6c63430008070033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"WithdrawAndRevert\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"contractIGatewayEVM\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"internalSendHash\",\"type\":\"bytes32\"}],\"name\":\"withdrawAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60c060405234801561001057600080fd5b5060405162000e2a38038062000e2a83398181016040528101906100349190610168565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806100a55750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156100dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506101f6565b600081519050610162816101df565b92915050565b6000806040838503121561017f5761017e6101da565b5b600061018d85828601610153565b925050602061019e85828601610153565b9150509250929050565b60006101b3826101ba565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101e8816101a8565b81146101f357600080fd5b50565b60805160601c60a05160601c610bc2620002686000396000818161011d01528181610208015281816102e8015281816103f6015281816104220152818161050d01526105e5015260008181610159015281816101cc015281816103d20152818161045e01526104d10152610bc26000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c91906107b5565b610113565b005b61009d60048036038101906100989190610762565b6102de565b005b6100a76103d0565b6040516100b491906109bf565b60405180910390f35b6100c56103f4565b6040516100d291906108f6565b60405180910390f35b6100f560048036038101906100f091906107b5565b610418565b005b610111600480360381019061010c919061083d565b6105e3565b005b61011b610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161019893929190610988565b600060405180830381600087803b1580156101b257600080fd5b505af11580156101c6573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161024b959493929190610911565b600060405180830381600087803b15801561026557600080fd5b505af1158015610279573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8585856040516102c793929190610a15565b60405180910390a26102d76106c3565b5050505050565b6102e6610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161034393929190610988565b600060405180830381600087803b15801561035d57600080fd5b505af1158015610371573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103bb91906109fa565b60405180910390a26103cb6106c3565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610420610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161049d93929190610988565b600060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610550959493929190610911565b600060405180830381600087803b15801561056a57600080fd5b505af115801561057e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516105cc93929190610a15565b60405180910390a26105dc6106c3565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161063e92919061095f565b600060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b5050505050565b600260005414156106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b0906109da565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506106dc81610b47565b92915050565b6000813590506106f181610b5e565b92915050565b60008083601f84011261070d5761070c610af9565b5b8235905067ffffffffffffffff81111561072a57610729610af4565b5b60208301915083600182028301111561074657610745610afe565b5b9250929050565b60008135905061075c81610b75565b92915050565b60008060006060848603121561077b5761077a610b08565b5b6000610789868287016106cd565b935050602061079a8682870161074d565b92505060406107ab868287016106e2565b9150509250925092565b6000806000806000608086880312156107d1576107d0610b08565b5b60006107df888289016106cd565b95505060206107f08882890161074d565b945050604086013567ffffffffffffffff81111561081157610810610b03565b5b61081d888289016106f7565b93509350506060610830888289016106e2565b9150509295509295909350565b60006020828403121561085357610852610b08565b5b60006108618482850161074d565b91505092915050565b61087381610a69565b82525050565b61088281610a7b565b82525050565b60006108948385610a47565b93506108a1838584610ae5565b6108aa83610b0d565b840190509392505050565b6108be81610aaf565b82525050565b60006108d1601f83610a58565b91506108dc82610b1e565b602082019050919050565b6108f081610aa5565b82525050565b600060208201905061090b600083018461086a565b92915050565b6000608082019050610926600083018861086a565b610933602083018761086a565b61094060408301866108e7565b8181036060830152610953818486610888565b90509695505050505050565b6000604082019050610974600083018561086a565b61098160208301846108e7565b9392505050565b600060608201905061099d600083018661086a565b6109aa60208301856108e7565b6109b76040830184610879565b949350505050565b60006020820190506109d460008301846108b5565b92915050565b600060208201905081810360008301526109f3816108c4565b9050919050565b6000602082019050610a0f60008301846108e7565b92915050565b6000604082019050610a2a60008301866108e7565b8181036020830152610a3d818486610888565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610a7482610a85565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610aba82610ac1565b9050919050565b6000610acc82610ad3565b9050919050565b6000610ade82610a85565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610b5081610a69565b8114610b5b57600080fd5b50565b610b6781610a7b565b8114610b7257600080fd5b50565b610b7e81610aa5565b8114610b8957600080fd5b5056fea26469706673582212207419360613ac73b5058589625b8f7b6c4071be5eb2e75aa5b04480ab384dc33b64736f6c63430008070033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -327,6 +327,27 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) Withdraw return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) } +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.WithdrawAndRevert(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) +} + +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x02d5c899. +// +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.WithdrawAndRevert(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) +} + // ZetaConnectorNonNativeWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the ZetaConnectorNonNative contract. type ZetaConnectorNonNativeWithdrawIterator struct { Event *ZetaConnectorNonNativeWithdraw // Event containing the contract specifics and raw log @@ -617,3 +638,149 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseWithdrawAndC event.Raw = log return event, nil } + +// ZetaConnectorNonNativeWithdrawAndRevertIterator is returned from FilterWithdrawAndRevert and is used to iterate over the raw logs and unpacked data for WithdrawAndRevert events raised by the ZetaConnectorNonNative contract. +type ZetaConnectorNonNativeWithdrawAndRevertIterator struct { + Event *ZetaConnectorNonNativeWithdrawAndRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZetaConnectorNonNativeWithdrawAndRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZetaConnectorNonNativeWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZetaConnectorNonNativeWithdrawAndRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZetaConnectorNonNativeWithdrawAndRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZetaConnectorNonNativeWithdrawAndRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZetaConnectorNonNativeWithdrawAndRevert represents a WithdrawAndRevert event raised by the ZetaConnectorNonNative contract. +type ZetaConnectorNonNativeWithdrawAndRevert struct { + To common.Address + Amount *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawAndRevert is a free log retrieval operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterWithdrawAndRevert(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeWithdrawAndRevertIterator, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNative.contract.FilterLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return &ZetaConnectorNonNativeWithdrawAndRevertIterator{contract: _ZetaConnectorNonNative.contract, event: "WithdrawAndRevert", logs: logs, sub: sub}, nil +} + +// WatchWithdrawAndRevert is a free log subscription operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchWithdrawAndRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeWithdrawAndRevert, to []common.Address) (event.Subscription, error) { + + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ZetaConnectorNonNative.contract.WatchLogs(opts, "WithdrawAndRevert", toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZetaConnectorNonNativeWithdrawAndRevert) + if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawAndRevert is a log parse operation binding the contract event 0xba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe. +// +// Solidity: event WithdrawAndRevert(address indexed to, uint256 amount, bytes data) +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseWithdrawAndRevert(log types.Log) (*ZetaConnectorNonNativeWithdrawAndRevert, error) { + event := new(ZetaConnectorNonNativeWithdrawAndRevert) + if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "WithdrawAndRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go b/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go index 94955f860..9b9c795cd 100644 --- a/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go +++ b/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go @@ -45,8 +45,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613d4b6200024360003960008181610a0801528181610a9701528181610ba901528181610c380152610ce80152613d4b6000f3fe60806040526004361061011f5760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610374578063c39aca371461039d578063c4d66de8146103c6578063f2fde38b146103ef578063f45346dc146104185761011f565b806352d1902d146102b55780635af65967146102e0578063715018a6146103095780637993c1e0146103205780638da5cb5b146103495761011f565b80632e1a7d4d116100e75780632e1a7d4d146101f3578063309f50041461021c5780633659cfe6146102455780633ce4a5bc1461026e5780634f1ef286146102995761011f565b80630ac7c44c14610124578063135390f91461014d57806321501a951461017657806321e093b11461019f578063267e75a0146101ca575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190612891565b610441565b005b34801561015957600080fd5b50610174600480360381019061016f919061290d565b6104a8565b005b34801561018257600080fd5b5061019d60048036038101906101989190612b8c565b61059f565b005b3480156101ab57600080fd5b506101b461076e565b6040516101c1919061316c565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612c8a565b610794565b005b3480156101ff57600080fd5b5061021a60048036038101906102159190612c30565b610856565b005b34801561022857600080fd5b50610243600480360381019061023e9190612a20565b610912565b005b34801561025157600080fd5b5061026c6004803603810190610267919061271b565b610a06565b005b34801561027a57600080fd5b50610283610b8f565b604051610290919061316c565b60405180910390f35b6102b360048036038101906102ae9190612748565b610ba7565b005b3480156102c157600080fd5b506102ca610ce4565b6040516102d791906133a3565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612a20565b610d9d565b005b34801561031557600080fd5b5061031e610fcf565b005b34801561032c57600080fd5b506103476004803603810190610342919061297c565b610fe3565b005b34801561035557600080fd5b5061035e6110e0565b60405161036b919061316c565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612ad6565b61110a565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612ad6565b6111fe565b005b3480156103d257600080fd5b506103ed60048036038101906103e8919061271b565b611430565b005b3480156103fb57600080fd5b506104166004803603810190610411919061271b565b611627565b005b34801561042457600080fd5b5061043f600480360381019061043a91906127e4565b6116ab565b005b610449611867565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610493939291906133be565b60405180910390a26104a36118b7565b505050565b6104b0611867565b60006104bc83836118c1565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561054057600080fd5b505afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190612c5d565b60405161058995949392919061330d565b60405180910390a25061059a6118b7565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610618576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061069157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156106c8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d28484611bb1565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b8152600401610735959493929190613609565b600060405180830381600087803b15801561074f57600080fd5b505af1158015610763573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61079c611867565b6107ba8373735b14bb79463307aacbed86daf3322b1e6226ab611bb1565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108199190613125565b60405160208183030381529060405286600080888860405161084197969594939291906131be565b60405180910390a26108516118b7565b505050565b61085e611867565b61087c8173735b14bb79463307aacbed86daf3322b1e6226ab611bb1565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108db9190613125565b604051602081830303815290604052846000806040516108ff95949392919061322f565b60405180910390a261090f6118b7565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016109cc9594939291906135b4565b600060405180830381600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90613454565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ad4611dcd565b73ffffffffffffffffffffffffffffffffffffffff1614610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190613474565b60405180910390fd5b610b3381611e24565b610b8c81600067ffffffffffffffff811115610b5257610b516138ce565b5b6040519080825280601f01601f191660200182016040528015610b845781602001600182028036833780820191505090505b506000611e2f565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d90613454565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c75611dcd565b73ffffffffffffffffffffffffffffffffffffffff1614610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290613474565b60405180910390fd5b610cd482611e24565b610ce082826001611e2f565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613494565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e8f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610ec6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610f0192919061337a565b602060405180830381600087803b158015610f1b57600080fd5b505af1158015610f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f539190612837565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610f959594939291906135b4565b600060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b50505050505050505050565b610fd7611fac565b610fe1600061202a565b565b610feb611867565b6000610ff785856118c1565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561107b57600080fd5b505afa15801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190612c5d565b89896040516110c8979695949392919061329c565b60405180910390a2506110d96118b7565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611183576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016111c4959493929190613609565b600060405180830381600087803b1580156111de57600080fd5b505af11580156111f2573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611277576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806112f057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611327576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161136292919061337a565b602060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b49190612837565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016113f6959493929190613609565b600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156114615750600160008054906101000a900460ff1660ff16105b8061148e5750611470306120f0565b15801561148d5750600160008054906101000a900460ff1660ff16145b5b6114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c4906134d4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561150a576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611579612113565b61158161216c565b6115896121bd565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156116235760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161161a91906133f7565b60405180910390a15b5050565b61162f611fac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690613434565b60405180910390fd5b6116a88161202a565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611724576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061179d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156117d4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161180f92919061337a565b602060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190612837565b50505050565b600260c95414156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490613594565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b15801561190b57600080fd5b505afa15801561191f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194391906127a4565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b815260040161199893929190613187565b602060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ea9190612837565b611a20576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611a5d93929190613187565b602060405180830381600087803b158015611a7757600080fd5b505af1158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf9190612837565b611ae5576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611b1e919061365e565b602060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b709190612837565b611ba6576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611c1093929190613187565b602060405180830381600087803b158015611c2a57600080fd5b505af1158015611c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c629190612837565b611c98576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611cf3919061365e565b600060405180830381600087803b158015611d0d57600080fd5b505af1158015611d21573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611d4b90613157565b60006040518083038185875af1925050503d8060008114611d88576040519150601f19603f3d011682016040523d82523d6000602084013e611d8d565b606091505b5050905080611dc8576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611dfb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612216565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e2c611fac565b50565b611e5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612220565b60000160009054906101000a900460ff1615611e7f57611e7a8361222a565b611fa7565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec557600080fd5b505afa925050508015611ef657506040513d601f19601f82011682018060405250810190611ef39190612864565b60015b611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c906134f4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f91906134b4565b60405180910390fd5b50611fa68383836122e3565b5b505050565b611fb461230f565b73ffffffffffffffffffffffffffffffffffffffff16611fd26110e0565b73ffffffffffffffffffffffffffffffffffffffff1614612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90613534565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990613574565b60405180910390fd5b61216a612317565b565b600060019054906101000a900460ff166121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613574565b60405180910390fd5b565b600060019054906101000a900460ff1661220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613574565b60405180910390fd5b612214612378565b565b6000819050919050565b6000819050919050565b612233816120f0565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990613514565b60405180910390fd5b8061229f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612216565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122ec836123d1565b6000825111806122f95750805b1561230a576123088383612420565b505b505050565b600033905090565b600060019054906101000a900460ff16612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90613574565b60405180910390fd5b61237661237161230f565b61202a565b565b600060019054906101000a900460ff166123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90613574565b60405180910390fd5b600160c981905550565b6123da8161222a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606124458383604051806060016040528060278152602001613cef6027913961244d565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516124779190613140565b600060405180830381855af49150503d80600081146124b2576040519150601f19603f3d011682016040523d82523d6000602084013e6124b7565b606091505b50915091506124c8868383876124d3565b925050509392505050565b606083156125365760008351141561252e576124ee856120f0565b61252d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252490613554565b60405180910390fd5b5b829050612541565b6125408383612549565b5b949350505050565b60008251111561255c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125909190613412565b60405180910390fd5b60006125ac6125a78461369e565b613679565b9050828152602081018484840111156125c8576125c761391b565b5b6125d3848285613837565b509392505050565b6000813590506125ea81613c92565b92915050565b6000815190506125ff81613c92565b92915050565b60008151905061261481613ca9565b92915050565b60008151905061262981613cc0565b92915050565b60008083601f84011261264557612644613907565b5b8235905067ffffffffffffffff81111561266257612661613902565b5b60208301915083600182028301111561267e5761267d613916565b5b9250929050565b600082601f83011261269a57612699613907565b5b81356126aa848260208601612599565b91505092915050565b6000606082840312156126c9576126c861390c565b5b81905092915050565b6000606082840312156126e8576126e761390c565b5b81905092915050565b60008135905061270081613cd7565b92915050565b60008151905061271581613cd7565b92915050565b6000602082840312156127315761273061392a565b5b600061273f848285016125db565b91505092915050565b6000806040838503121561275f5761275e61392a565b5b600061276d858286016125db565b925050602083013567ffffffffffffffff81111561278e5761278d613920565b5b61279a85828601612685565b9150509250929050565b600080604083850312156127bb576127ba61392a565b5b60006127c9858286016125f0565b92505060206127da85828601612706565b9150509250929050565b6000806000606084860312156127fd576127fc61392a565b5b600061280b868287016125db565b935050602061281c868287016126f1565b925050604061282d868287016125db565b9150509250925092565b60006020828403121561284d5761284c61392a565b5b600061285b84828501612605565b91505092915050565b60006020828403121561287a5761287961392a565b5b60006128888482850161261a565b91505092915050565b6000806000604084860312156128aa576128a961392a565b5b600084013567ffffffffffffffff8111156128c8576128c7613920565b5b6128d486828701612685565b935050602084013567ffffffffffffffff8111156128f5576128f4613920565b5b6129018682870161262f565b92509250509250925092565b6000806000606084860312156129265761292561392a565b5b600084013567ffffffffffffffff81111561294457612943613920565b5b61295086828701612685565b9350506020612961868287016126f1565b9250506040612972868287016125db565b9150509250925092565b6000806000806000608086880312156129985761299761392a565b5b600086013567ffffffffffffffff8111156129b6576129b5613920565b5b6129c288828901612685565b95505060206129d3888289016126f1565b94505060406129e4888289016125db565b935050606086013567ffffffffffffffff811115612a0557612a04613920565b5b612a118882890161262f565b92509250509295509295909350565b60008060008060008060a08789031215612a3d57612a3c61392a565b5b600087013567ffffffffffffffff811115612a5b57612a5a613920565b5b612a6789828a016126b3565b9650506020612a7889828a016125db565b9550506040612a8989828a016126f1565b9450506060612a9a89828a016125db565b935050608087013567ffffffffffffffff811115612abb57612aba613920565b5b612ac789828a0161262f565b92509250509295509295509295565b60008060008060008060a08789031215612af357612af261392a565b5b600087013567ffffffffffffffff811115612b1157612b10613920565b5b612b1d89828a016126d2565b9650506020612b2e89828a016125db565b9550506040612b3f89828a016126f1565b9450506060612b5089828a016125db565b935050608087013567ffffffffffffffff811115612b7157612b70613920565b5b612b7d89828a0161262f565b92509250509295509295509295565b600080600080600060808688031215612ba857612ba761392a565b5b600086013567ffffffffffffffff811115612bc657612bc5613920565b5b612bd2888289016126d2565b9550506020612be3888289016126f1565b9450506040612bf4888289016125db565b935050606086013567ffffffffffffffff811115612c1557612c14613920565b5b612c218882890161262f565b92509250509295509295909350565b600060208284031215612c4657612c4561392a565b5b6000612c54848285016126f1565b91505092915050565b600060208284031215612c7357612c7261392a565b5b6000612c8184828501612706565b91505092915050565b600080600060408486031215612ca357612ca261392a565b5b6000612cb1868287016126f1565b935050602084013567ffffffffffffffff811115612cd257612cd1613920565b5b612cde8682870161262f565b92509250509250925092565b612cf3816137b4565b82525050565b612d02816137b4565b82525050565b612d19612d14826137b4565b6138aa565b82525050565b612d28816137d2565b82525050565b6000612d3a83856136e5565b9350612d47838584613837565b612d508361392f565b840190509392505050565b6000612d6783856136f6565b9350612d74838584613837565b612d7d8361392f565b840190509392505050565b6000612d93826136cf565b612d9d81856136f6565b9350612dad818560208601613846565b612db68161392f565b840191505092915050565b6000612dcc826136cf565b612dd68185613707565b9350612de6818560208601613846565b80840191505092915050565b612dfb81613813565b82525050565b612e0a81613825565b82525050565b6000612e1b826136da565b612e258185613712565b9350612e35818560208601613846565b612e3e8161392f565b840191505092915050565b6000612e56602683613712565b9150612e618261394d565b604082019050919050565b6000612e79602c83613712565b9150612e848261399c565b604082019050919050565b6000612e9c602c83613712565b9150612ea7826139eb565b604082019050919050565b6000612ebf603883613712565b9150612eca82613a3a565b604082019050919050565b6000612ee2602983613712565b9150612eed82613a89565b604082019050919050565b6000612f05602e83613712565b9150612f1082613ad8565b604082019050919050565b6000612f28602e83613712565b9150612f3382613b27565b604082019050919050565b6000612f4b602d83613712565b9150612f5682613b76565b604082019050919050565b6000612f6e602083613712565b9150612f7982613bc5565b602082019050919050565b6000612f916000836136f6565b9150612f9c82613bee565b600082019050919050565b6000612fb4600083613707565b9150612fbf82613bee565b600082019050919050565b6000612fd7601d83613712565b9150612fe282613bf1565b602082019050919050565b6000612ffa602b83613712565b915061300582613c1a565b604082019050919050565b600061301d601f83613712565b915061302882613c69565b602082019050919050565b600060608301613046600084018461373a565b8583036000870152613059838284612d2e565b9250505061306a6020840184613723565b6130776020860182612cea565b50613085604084018461379d565b6130926040860182613107565b508091505092915050565b6000606083016130b0600084018461373a565b85830360008701526130c3838284612d2e565b925050506130d46020840184613723565b6130e16020860182612cea565b506130ef604084018461379d565b6130fc6040860182613107565b508091505092915050565b613110816137fc565b82525050565b61311f816137fc565b82525050565b60006131318284612d08565b60148201915081905092915050565b600061314c8284612dc1565b915081905092915050565b600061316282612fa7565b9150819050919050565b60006020820190506131816000830184612cf9565b92915050565b600060608201905061319c6000830186612cf9565b6131a96020830185612cf9565b6131b66040830184613116565b949350505050565b600060c0820190506131d3600083018a612cf9565b81810360208301526131e58189612d88565b90506131f46040830188613116565b6132016060830187612df2565b61320e6080830186612df2565b81810360a0830152613221818486612d5b565b905098975050505050505050565b600060c0820190506132446000830188612cf9565b81810360208301526132568187612d88565b90506132656040830186613116565b6132726060830185612df2565b61327f6080830184612df2565b81810360a083015261329081612f84565b90509695505050505050565b600060c0820190506132b1600083018a612cf9565b81810360208301526132c38189612d88565b90506132d26040830188613116565b6132df6060830187613116565b6132ec6080830186613116565b81810360a08301526132ff818486612d5b565b905098975050505050505050565b600060c0820190506133226000830188612cf9565b81810360208301526133348187612d88565b90506133436040830186613116565b6133506060830185613116565b61335d6080830184613116565b81810360a083015261336e81612f84565b90509695505050505050565b600060408201905061338f6000830185612cf9565b61339c6020830184613116565b9392505050565b60006020820190506133b86000830184612d1f565b92915050565b600060408201905081810360008301526133d88186612d88565b905081810360208301526133ed818486612d5b565b9050949350505050565b600060208201905061340c6000830184612e01565b92915050565b6000602082019050818103600083015261342c8184612e10565b905092915050565b6000602082019050818103600083015261344d81612e49565b9050919050565b6000602082019050818103600083015261346d81612e6c565b9050919050565b6000602082019050818103600083015261348d81612e8f565b9050919050565b600060208201905081810360008301526134ad81612eb2565b9050919050565b600060208201905081810360008301526134cd81612ed5565b9050919050565b600060208201905081810360008301526134ed81612ef8565b9050919050565b6000602082019050818103600083015261350d81612f1b565b9050919050565b6000602082019050818103600083015261352d81612f3e565b9050919050565b6000602082019050818103600083015261354d81612f61565b9050919050565b6000602082019050818103600083015261356d81612fca565b9050919050565b6000602082019050818103600083015261358d81612fed565b9050919050565b600060208201905081810360008301526135ad81613010565b9050919050565b600060808201905081810360008301526135ce8188613033565b90506135dd6020830187612cf9565b6135ea6040830186613116565b81810360608301526135fd818486612d5b565b90509695505050505050565b60006080820190508181036000830152613623818861309d565b90506136326020830187612cf9565b61363f6040830186613116565b8181036060830152613652818486612d5b565b90509695505050505050565b60006020820190506136736000830184613116565b92915050565b6000613683613694565b905061368f8282613879565b919050565b6000604051905090565b600067ffffffffffffffff8211156136b9576136b86138ce565b5b6136c28261392f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061373260208401846125db565b905092915050565b6000808335600160200384360303811261375757613756613925565b5b83810192508235915060208301925067ffffffffffffffff82111561377f5761377e6138fd565b5b60018202360384131561379557613794613911565b5b509250929050565b60006137ac60208401846126f1565b905092915050565b60006137bf826137dc565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061381e826137fc565b9050919050565b600061383082613806565b9050919050565b82818337600083830152505050565b60005b83811015613864578082015181840152602081019050613849565b83811115613873576000848401525b50505050565b6138828261392f565b810181811067ffffffffffffffff821117156138a1576138a06138ce565b5b80604052505050565b60006138b5826138bc565b9050919050565b60006138c782613940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613c9b816137b4565b8114613ca657600080fd5b50565b613cb2816137c6565b8114613cbd57600080fd5b50565b613cc9816137d2565b8114613cd457600080fd5b50565b613ce0816137fc565b8114613ceb57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f66452d96b0f29cb642f932d3b97697f48dd681a5f7d2af932bf5658decdb88364736f6c63430008070033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWZETAOrFungible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"executeRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_zetaToken\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613e6d6200024360003960008181610b2a01528181610bb901528181610ccb01528181610d5a0152610e0a0152613e6d6000f3fe6080604052600436106101235760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610454578063c39aca371461047d578063c4d66de8146104a6578063f2fde38b146104cf578063f45346dc146104f8576101ff565b806352d1902d146103955780635af65967146103c0578063715018a6146103e95780637993c1e0146104005780638da5cb5b14610429576101ff565b80632e1a7d4d116100e75780632e1a7d4d146102d3578063309f5004146102fc5780633659cfe6146103255780633ce4a5bc1461034e5780634f1ef28614610379576101ff565b80630ac7c44c14610204578063135390f91461022d57806321501a951461025657806321e093b11461027f578063267e75a0146102aa576101ff565b366101ff5760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156101c6575073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156101fd576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561021057600080fd5b5061022b600480360381019061022691906129b3565b610521565b005b34801561023957600080fd5b50610254600480360381019061024f9190612a2f565b610588565b005b34801561026257600080fd5b5061027d60048036038101906102789190612cae565b61067f565b005b34801561028b57600080fd5b5061029461084e565b6040516102a1919061328e565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612dac565b610874565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612d52565b610957565b005b34801561030857600080fd5b50610323600480360381019061031e9190612b42565b610a34565b005b34801561033157600080fd5b5061034c6004803603810190610347919061283d565b610b28565b005b34801561035a57600080fd5b50610363610cb1565b604051610370919061328e565b60405180910390f35b610393600480360381019061038e919061286a565b610cc9565b005b3480156103a157600080fd5b506103aa610e06565b6040516103b791906134c5565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612b42565b610ebf565b005b3480156103f557600080fd5b506103fe6110f1565b005b34801561040c57600080fd5b5061042760048036038101906104229190612a9e565b611105565b005b34801561043557600080fd5b5061043e611202565b60405161044b919061328e565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612bf8565b61122c565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612bf8565b611320565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061283d565b611552565b005b3480156104db57600080fd5b506104f660048036038101906104f1919061283d565b611749565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612906565b6117cd565b005b610529611989565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610573939291906134e0565b60405180910390a26105836119d9565b505050565b610590611989565b600061059c83836119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190612d7f565b60405161066995949392919061342f565b60405180910390a25061067a6119d9565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061077157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156107a8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b28484611cd3565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b815260040161081595949392919061372b565b600060405180830381600087803b15801561082f57600080fd5b505af1158015610843573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087c611989565b61089a8373735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab60405160200161091a9190613247565b60405160208183030381529060405286600080888860405161094297969594939291906132e0565b60405180910390a26109526119d9565b505050565b61095f611989565b61097d8173735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab6040516020016109fd9190613247565b60405160208183030381529060405284600080604051610a21959493929190613351565b60405180910390a2610a316119d9565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610aee9594939291906136d6565b600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bf6611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613596565b60405180910390fd5b610c5581611f46565b610cae81600067ffffffffffffffff811115610c7457610c736139f0565b5b6040519080825280601f01601f191660200182016040528015610ca65781602001600182028036833780820191505090505b506000611f51565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613596565b60405180910390fd5b610df682611f46565b610e0282826001611f51565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906135b6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610fe8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161102392919061349c565b602060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612959565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016110b79594939291906136d6565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b50505050505050505050565b6110f96120ce565b611103600061214c565b565b61110d611989565b600061111985856119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119d57600080fd5b505afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d59190612d7f565b89896040516111ea97969594939291906133be565b60405180910390a2506111fb6119d9565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016112e695949392919061372b565b600060405180830381600087803b15801561130057600080fd5b505af1158015611314573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611399576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061141257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161148492919061349c565b602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d69190612959565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b815260040161151895949392919061372b565b600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156115835750600160008054906101000a900460ff1660ff16105b806115b0575061159230612212565b1580156115af5750600160008054906101000a900460ff1660ff16145b5b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906135f6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561162c576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611693576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169b612235565b6116a361228e565b6116ab6122df565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117455760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161173c9190613519565b60405180910390a15b5050565b6117516120ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613556565b60405180910390fd5b6117ca8161214c565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611846576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118bf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156118f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161193192919061349c565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190612959565b50505050565b600260c95414156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906136b6565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6591906128c6565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b8152600401611aba939291906132a9565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190612959565b611b42576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611b7f939291906132a9565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612959565b611c07576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611c409190613780565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190612959565b611cc8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611d32939291906132a9565b602060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d849190612959565b611dba576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611e159190613780565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611e6d90613279565b60006040518083038185875af1925050503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5050905080611eea576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611f1d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f4e6120ce565b50565b611f7d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612342565b60000160009054906101000a900460ff1615611fa157611f9c8361234c565b6120c9565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe757600080fd5b505afa92505050801561201857506040513d601f19601f820116820180604052508101906120159190612986565b60015b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613616565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906135d6565b60405180910390fd5b506120c8838383612405565b5b505050565b6120d6612431565b73ffffffffffffffffffffffffffffffffffffffff166120f4611202565b73ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613656565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613696565b60405180910390fd5b61228c612439565b565b600060019054906101000a900460ff166122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490613696565b60405180910390fd5b565b600060019054906101000a900460ff1661232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613696565b60405180910390fd5b61233661249a565b565b6000819050919050565b6000819050919050565b61235581612212565b612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90613636565b60405180910390fd5b806123c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240e836124f3565b60008251118061241b5750805b1561242c5761242a8383612542565b505b505050565b600033905090565b600060019054906101000a900460ff16612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613696565b60405180910390fd5b612498612493612431565b61214c565b565b600060019054906101000a900460ff166124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613696565b60405180910390fd5b600160c981905550565b6124fc8161234c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606125678383604051806060016040528060278152602001613e116027913961256f565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516125999190613262565b600060405180830381855af49150503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b50915091506125ea868383876125f5565b925050509392505050565b60608315612658576000835114156126505761261085612212565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613676565b60405180910390fd5b5b829050612663565b612662838361266b565b5b949350505050565b60008251111561267e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190613534565b60405180910390fd5b60006126ce6126c9846137c0565b61379b565b9050828152602081018484840111156126ea576126e9613a3d565b5b6126f5848285613959565b509392505050565b60008135905061270c81613db4565b92915050565b60008151905061272181613db4565b92915050565b60008151905061273681613dcb565b92915050565b60008151905061274b81613de2565b92915050565b60008083601f84011261276757612766613a29565b5b8235905067ffffffffffffffff81111561278457612783613a24565b5b6020830191508360018202830111156127a05761279f613a38565b5b9250929050565b600082601f8301126127bc576127bb613a29565b5b81356127cc8482602086016126bb565b91505092915050565b6000606082840312156127eb576127ea613a2e565b5b81905092915050565b60006060828403121561280a57612809613a2e565b5b81905092915050565b60008135905061282281613df9565b92915050565b60008151905061283781613df9565b92915050565b60006020828403121561285357612852613a4c565b5b6000612861848285016126fd565b91505092915050565b6000806040838503121561288157612880613a4c565b5b600061288f858286016126fd565b925050602083013567ffffffffffffffff8111156128b0576128af613a42565b5b6128bc858286016127a7565b9150509250929050565b600080604083850312156128dd576128dc613a4c565b5b60006128eb85828601612712565b92505060206128fc85828601612828565b9150509250929050565b60008060006060848603121561291f5761291e613a4c565b5b600061292d868287016126fd565b935050602061293e86828701612813565b925050604061294f868287016126fd565b9150509250925092565b60006020828403121561296f5761296e613a4c565b5b600061297d84828501612727565b91505092915050565b60006020828403121561299c5761299b613a4c565b5b60006129aa8482850161273c565b91505092915050565b6000806000604084860312156129cc576129cb613a4c565b5b600084013567ffffffffffffffff8111156129ea576129e9613a42565b5b6129f6868287016127a7565b935050602084013567ffffffffffffffff811115612a1757612a16613a42565b5b612a2386828701612751565b92509250509250925092565b600080600060608486031215612a4857612a47613a4c565b5b600084013567ffffffffffffffff811115612a6657612a65613a42565b5b612a72868287016127a7565b9350506020612a8386828701612813565b9250506040612a94868287016126fd565b9150509250925092565b600080600080600060808688031215612aba57612ab9613a4c565b5b600086013567ffffffffffffffff811115612ad857612ad7613a42565b5b612ae4888289016127a7565b9550506020612af588828901612813565b9450506040612b06888289016126fd565b935050606086013567ffffffffffffffff811115612b2757612b26613a42565b5b612b3388828901612751565b92509250509295509295909350565b60008060008060008060a08789031215612b5f57612b5e613a4c565b5b600087013567ffffffffffffffff811115612b7d57612b7c613a42565b5b612b8989828a016127d5565b9650506020612b9a89828a016126fd565b9550506040612bab89828a01612813565b9450506060612bbc89828a016126fd565b935050608087013567ffffffffffffffff811115612bdd57612bdc613a42565b5b612be989828a01612751565b92509250509295509295509295565b60008060008060008060a08789031215612c1557612c14613a4c565b5b600087013567ffffffffffffffff811115612c3357612c32613a42565b5b612c3f89828a016127f4565b9650506020612c5089828a016126fd565b9550506040612c6189828a01612813565b9450506060612c7289828a016126fd565b935050608087013567ffffffffffffffff811115612c9357612c92613a42565b5b612c9f89828a01612751565b92509250509295509295509295565b600080600080600060808688031215612cca57612cc9613a4c565b5b600086013567ffffffffffffffff811115612ce857612ce7613a42565b5b612cf4888289016127f4565b9550506020612d0588828901612813565b9450506040612d16888289016126fd565b935050606086013567ffffffffffffffff811115612d3757612d36613a42565b5b612d4388828901612751565b92509250509295509295909350565b600060208284031215612d6857612d67613a4c565b5b6000612d7684828501612813565b91505092915050565b600060208284031215612d9557612d94613a4c565b5b6000612da384828501612828565b91505092915050565b600080600060408486031215612dc557612dc4613a4c565b5b6000612dd386828701612813565b935050602084013567ffffffffffffffff811115612df457612df3613a42565b5b612e0086828701612751565b92509250509250925092565b612e15816138d6565b82525050565b612e24816138d6565b82525050565b612e3b612e36826138d6565b6139cc565b82525050565b612e4a816138f4565b82525050565b6000612e5c8385613807565b9350612e69838584613959565b612e7283613a51565b840190509392505050565b6000612e898385613818565b9350612e96838584613959565b612e9f83613a51565b840190509392505050565b6000612eb5826137f1565b612ebf8185613818565b9350612ecf818560208601613968565b612ed881613a51565b840191505092915050565b6000612eee826137f1565b612ef88185613829565b9350612f08818560208601613968565b80840191505092915050565b612f1d81613935565b82525050565b612f2c81613947565b82525050565b6000612f3d826137fc565b612f478185613834565b9350612f57818560208601613968565b612f6081613a51565b840191505092915050565b6000612f78602683613834565b9150612f8382613a6f565b604082019050919050565b6000612f9b602c83613834565b9150612fa682613abe565b604082019050919050565b6000612fbe602c83613834565b9150612fc982613b0d565b604082019050919050565b6000612fe1603883613834565b9150612fec82613b5c565b604082019050919050565b6000613004602983613834565b915061300f82613bab565b604082019050919050565b6000613027602e83613834565b915061303282613bfa565b604082019050919050565b600061304a602e83613834565b915061305582613c49565b604082019050919050565b600061306d602d83613834565b915061307882613c98565b604082019050919050565b6000613090602083613834565b915061309b82613ce7565b602082019050919050565b60006130b3600083613818565b91506130be82613d10565b600082019050919050565b60006130d6600083613829565b91506130e182613d10565b600082019050919050565b60006130f9601d83613834565b915061310482613d13565b602082019050919050565b600061311c602b83613834565b915061312782613d3c565b604082019050919050565b600061313f601f83613834565b915061314a82613d8b565b602082019050919050565b600060608301613168600084018461385c565b858303600087015261317b838284612e50565b9250505061318c6020840184613845565b6131996020860182612e0c565b506131a760408401846138bf565b6131b46040860182613229565b508091505092915050565b6000606083016131d2600084018461385c565b85830360008701526131e5838284612e50565b925050506131f66020840184613845565b6132036020860182612e0c565b5061321160408401846138bf565b61321e6040860182613229565b508091505092915050565b6132328161391e565b82525050565b6132418161391e565b82525050565b60006132538284612e2a565b60148201915081905092915050565b600061326e8284612ee3565b915081905092915050565b6000613284826130c9565b9150819050919050565b60006020820190506132a36000830184612e1b565b92915050565b60006060820190506132be6000830186612e1b565b6132cb6020830185612e1b565b6132d86040830184613238565b949350505050565b600060c0820190506132f5600083018a612e1b565b81810360208301526133078189612eaa565b90506133166040830188613238565b6133236060830187612f14565b6133306080830186612f14565b81810360a0830152613343818486612e7d565b905098975050505050505050565b600060c0820190506133666000830188612e1b565b81810360208301526133788187612eaa565b90506133876040830186613238565b6133946060830185612f14565b6133a16080830184612f14565b81810360a08301526133b2816130a6565b90509695505050505050565b600060c0820190506133d3600083018a612e1b565b81810360208301526133e58189612eaa565b90506133f46040830188613238565b6134016060830187613238565b61340e6080830186613238565b81810360a0830152613421818486612e7d565b905098975050505050505050565b600060c0820190506134446000830188612e1b565b81810360208301526134568187612eaa565b90506134656040830186613238565b6134726060830185613238565b61347f6080830184613238565b81810360a0830152613490816130a6565b90509695505050505050565b60006040820190506134b16000830185612e1b565b6134be6020830184613238565b9392505050565b60006020820190506134da6000830184612e41565b92915050565b600060408201905081810360008301526134fa8186612eaa565b9050818103602083015261350f818486612e7d565b9050949350505050565b600060208201905061352e6000830184612f23565b92915050565b6000602082019050818103600083015261354e8184612f32565b905092915050565b6000602082019050818103600083015261356f81612f6b565b9050919050565b6000602082019050818103600083015261358f81612f8e565b9050919050565b600060208201905081810360008301526135af81612fb1565b9050919050565b600060208201905081810360008301526135cf81612fd4565b9050919050565b600060208201905081810360008301526135ef81612ff7565b9050919050565b6000602082019050818103600083015261360f8161301a565b9050919050565b6000602082019050818103600083015261362f8161303d565b9050919050565b6000602082019050818103600083015261364f81613060565b9050919050565b6000602082019050818103600083015261366f81613083565b9050919050565b6000602082019050818103600083015261368f816130ec565b9050919050565b600060208201905081810360008301526136af8161310f565b9050919050565b600060208201905081810360008301526136cf81613132565b9050919050565b600060808201905081810360008301526136f08188613155565b90506136ff6020830187612e1b565b61370c6040830186613238565b818103606083015261371f818486612e7d565b90509695505050505050565b6000608082019050818103600083015261374581886131bf565b90506137546020830187612e1b565b6137616040830186613238565b8181036060830152613774818486612e7d565b90509695505050505050565b60006020820190506137956000830184613238565b92915050565b60006137a56137b6565b90506137b1828261399b565b919050565b6000604051905090565b600067ffffffffffffffff8211156137db576137da6139f0565b5b6137e482613a51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061385460208401846126fd565b905092915050565b6000808335600160200384360303811261387957613878613a47565b5b83810192508235915060208301925067ffffffffffffffff8211156138a1576138a0613a1f565b5b6001820236038413156138b7576138b6613a33565b5b509250929050565b60006138ce6020840184612813565b905092915050565b60006138e1826138fe565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139408261391e565b9050919050565b600061395282613928565b9050919050565b82818337600083830152505050565b60005b8381101561398657808201518184015260208101905061396b565b83811115613995576000848401525b50505050565b6139a482613a51565b810181811067ffffffffffffffff821117156139c3576139c26139f0565b5b80604052505050565b60006139d7826139de565b9050919050565b60006139e982613a62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613dbd816138d6565b8114613dc857600080fd5b50565b613dd4816138e8565b8114613ddf57600080fd5b50565b613deb816138f4565b8114613df657600080fd5b50565b613e028161391e565b8114613e0d57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e282ad47b588d26949a07fb7fc6ba46fa9721e07254d668e544a8f2413001c5064736f6c63430008070033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -676,6 +676,27 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall0(receiver []by return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20, message) } +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GatewayZEVM *GatewayZEVMTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayZEVM.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GatewayZEVM *GatewayZEVMSession) Receive() (*types.Transaction, error) { + return _GatewayZEVM.Contract.Receive(&_GatewayZEVM.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) Receive() (*types.Transaction, error) { + return _GatewayZEVM.Contract.Receive(&_GatewayZEVM.TransactOpts) +} + // GatewayZEVMAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the GatewayZEVM contract. type GatewayZEVMAdminChangedIterator struct { Event *GatewayZEVMAdminChanged // Event containing the contract specifics and raw log diff --git a/pkg/contracts/prototypes/zevm/igatewayzevm.sol/igatewayzevmerrors.go b/pkg/contracts/prototypes/zevm/igatewayzevm.sol/igatewayzevmerrors.go index 37bf41093..0e4b71763 100644 --- a/pkg/contracts/prototypes/zevm/igatewayzevm.sol/igatewayzevmerrors.go +++ b/pkg/contracts/prototypes/zevm/igatewayzevm.sol/igatewayzevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayZEVMErrorsMetaData contains all meta data concerning the IGatewayZEVMErrors contract. var IGatewayZEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"}]", + ABI: "[{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWZETAOrFungible\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"}]", } // IGatewayZEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go b/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go index 1eab6500a..c008d1e3a 100644 --- a/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go +++ b/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"callReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"withdrawAndCallReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea2646970667358221220fd57bf78c5d65dbfce97aa7f4d7757321c1b53a122e7c588ff9fce739d2ac95664736f6c63430008070033", + Bin: "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea264697066735822122041c2abc6b3a41841b90c67bd1f0fcea62676455ba61882c22a78070a8128a5b164736f6c63430008070033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/zevm/testzcontract.sol/testzcontract.go b/pkg/contracts/prototypes/zevm/testzcontract.sol/testzcontract.go index 36b72b202..812c10235 100644 --- a/pkg/contracts/prototypes/zevm/testzcontract.sol/testzcontract.go +++ b/pkg/contracts/prototypes/zevm/testzcontract.sol/testzcontract.go @@ -45,8 +45,8 @@ type ZContext struct { // TestZContractMetaData contains all meta data concerning the TestZContract contract. var TestZContractMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ContextData\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"onCrossChainCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"onRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506107cb806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806369582bee1461003b578063de43156e14610057575b600080fd5b61005560048036038101906100509190610331565b610073565b005b610071600480360381019061006c91906103d5565b610100565b005b6060600083839050111561009357828281019061009091906102e8565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e8680600001906100c49190610560565b8860200160208101906100d791906102bb565b896040013533866040516100f0969594939291906104fd565b60405180910390a1505050505050565b6060600083839050111561012057828281019061011d91906102e8565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e8680600001906101519190610560565b88602001602081019061016491906102bb565b8960400135338660405161017d969594939291906104fd565b60405180910390a1505050505050565b60006101a061019b846105e8565b6105c3565b9050828152602081018484840111156101bc576101bb610747565b5b6101c7848285610682565b509392505050565b6000813590506101de81610767565b92915050565b60008083601f8401126101fa576101f9610729565b5b8235905067ffffffffffffffff81111561021757610216610724565b5b6020830191508360018202830111156102335761023261073d565b5b9250929050565b600082601f83011261024f5761024e610729565b5b813561025f84826020860161018d565b91505092915050565b60006060828403121561027e5761027d610733565b5b81905092915050565b60006060828403121561029d5761029c610733565b5b81905092915050565b6000813590506102b58161077e565b92915050565b6000602082840312156102d1576102d0610751565b5b60006102df848285016101cf565b91505092915050565b6000602082840312156102fe576102fd610751565b5b600082013567ffffffffffffffff81111561031c5761031b61074c565b5b6103288482850161023a565b91505092915050565b60008060008060006080868803121561034d5761034c610751565b5b600086013567ffffffffffffffff81111561036b5761036a61074c565b5b61037788828901610268565b9550506020610388888289016101cf565b9450506040610399888289016102a6565b935050606086013567ffffffffffffffff8111156103ba576103b961074c565b5b6103c6888289016101e4565b92509250509295509295909350565b6000806000806000608086880312156103f1576103f0610751565b5b600086013567ffffffffffffffff81111561040f5761040e61074c565b5b61041b88828901610287565b955050602061042c888289016101cf565b945050604061043d888289016102a6565b935050606086013567ffffffffffffffff81111561045e5761045d61074c565b5b61046a888289016101e4565b92509250509295509295909350565b61048281610646565b82525050565b60006104948385610624565b93506104a1838584610682565b6104aa83610756565b840190509392505050565b60006104c082610619565b6104ca8185610635565b93506104da818560208601610691565b6104e381610756565b840191505092915050565b6104f781610678565b82525050565b600060a082019050818103600083015261051881888a610488565b90506105276020830187610479565b61053460408301866104ee565b6105416060830185610479565b818103608083015261055381846104b5565b9050979650505050505050565b6000808335600160200384360303811261057d5761057c610738565b5b80840192508235915067ffffffffffffffff82111561059f5761059e61072e565b5b6020830192506001820236038313156105bb576105ba610742565b5b509250929050565b60006105cd6105de565b90506105d982826106c4565b919050565b6000604051905090565b600067ffffffffffffffff821115610603576106026106f5565b5b61060c82610756565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061065182610658565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156106af578082015181840152602081019050610694565b838111156106be576000848401525b50505050565b6106cd82610756565b810181811067ffffffffffffffff821117156106ec576106eb6106f5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61077081610646565b811461077b57600080fd5b50565b61078781610678565b811461079257600080fd5b5056fea2646970667358221220996d3660341a1bd04005b32d62cd8d770a9af1acdfbed4e5684f1a111d225cde64736f6c63430008070033", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ContextData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"ContextDataRevert\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"onCrossChainCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structrevertContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"onRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b506107e0806100206000396000f3fe60806040526004361061002d5760003560e01c806369582bee14610036578063de43156e1461005f57610034565b3661003457005b005b34801561004257600080fd5b5061005d60048036038101906100589190610346565b610088565b005b34801561006b57600080fd5b50610086600480360381019061008191906103ea565b610115565b005b606060008383905011156100a85782828101906100a591906102fd565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999488680600001906100d99190610575565b8860200160208101906100ec91906102d0565b8960400135338660405161010596959493929190610512565b60405180910390a1505050505050565b6060600083839050111561013557828281019061013291906102fd565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e8680600001906101669190610575565b88602001602081019061017991906102d0565b8960400135338660405161019296959493929190610512565b60405180910390a1505050505050565b60006101b56101b0846105fd565b6105d8565b9050828152602081018484840111156101d1576101d061075c565b5b6101dc848285610697565b509392505050565b6000813590506101f38161077c565b92915050565b60008083601f84011261020f5761020e61073e565b5b8235905067ffffffffffffffff81111561022c5761022b610739565b5b60208301915083600182028301111561024857610247610752565b5b9250929050565b600082601f8301126102645761026361073e565b5b81356102748482602086016101a2565b91505092915050565b60006060828403121561029357610292610748565b5b81905092915050565b6000606082840312156102b2576102b1610748565b5b81905092915050565b6000813590506102ca81610793565b92915050565b6000602082840312156102e6576102e5610766565b5b60006102f4848285016101e4565b91505092915050565b60006020828403121561031357610312610766565b5b600082013567ffffffffffffffff81111561033157610330610761565b5b61033d8482850161024f565b91505092915050565b60008060008060006080868803121561036257610361610766565b5b600086013567ffffffffffffffff8111156103805761037f610761565b5b61038c8882890161027d565b955050602061039d888289016101e4565b94505060406103ae888289016102bb565b935050606086013567ffffffffffffffff8111156103cf576103ce610761565b5b6103db888289016101f9565b92509250509295509295909350565b60008060008060006080868803121561040657610405610766565b5b600086013567ffffffffffffffff81111561042457610423610761565b5b6104308882890161029c565b9550506020610441888289016101e4565b9450506040610452888289016102bb565b935050606086013567ffffffffffffffff81111561047357610472610761565b5b61047f888289016101f9565b92509250509295509295909350565b6104978161065b565b82525050565b60006104a98385610639565b93506104b6838584610697565b6104bf8361076b565b840190509392505050565b60006104d58261062e565b6104df818561064a565b93506104ef8185602086016106a6565b6104f88161076b565b840191505092915050565b61050c8161068d565b82525050565b600060a082019050818103600083015261052d81888a61049d565b905061053c602083018761048e565b6105496040830186610503565b610556606083018561048e565b818103608083015261056881846104ca565b9050979650505050505050565b600080833560016020038436030381126105925761059161074d565b5b80840192508235915067ffffffffffffffff8211156105b4576105b3610743565b5b6020830192506001820236038313156105d0576105cf610757565b5b509250929050565b60006105e26105f3565b90506105ee82826106d9565b919050565b6000604051905090565b600067ffffffffffffffff8211156106185761061761070a565b5b6106218261076b565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006106668261066d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156106c45780820151818401526020810190506106a9565b838111156106d3576000848401525b50505050565b6106e28261076b565b810181811067ffffffffffffffff821117156107015761070061070a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6107858161065b565b811461079057600080fd5b50565b61079c8161068d565b81146107a757600080fd5b5056fea2646970667358221220d8ae51f378c28fdd3372175a2a0c40cf07b2f206830500b75e6335c89a39193164736f6c63430008070033", } // TestZContractABI is the input ABI used to generate the binding from. @@ -258,6 +258,48 @@ func (_TestZContract *TestZContractTransactorSession) OnRevert(context RevertCon return _TestZContract.Contract.OnRevert(&_TestZContract.TransactOpts, context, zrc20, amount, message) } +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_TestZContract *TestZContractTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _TestZContract.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_TestZContract *TestZContractSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _TestZContract.Contract.Fallback(&_TestZContract.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_TestZContract *TestZContractTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _TestZContract.Contract.Fallback(&_TestZContract.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_TestZContract *TestZContractTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TestZContract.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_TestZContract *TestZContractSession) Receive() (*types.Transaction, error) { + return _TestZContract.Contract.Receive(&_TestZContract.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_TestZContract *TestZContractTransactorSession) Receive() (*types.Transaction, error) { + return _TestZContract.Contract.Receive(&_TestZContract.TransactOpts) +} + // TestZContractContextDataIterator is returned from FilterContextData and is used to iterate over the raw logs and unpacked data for ContextData events raised by the TestZContract contract. type TestZContractContextDataIterator struct { Event *TestZContractContextData // Event containing the contract specifics and raw log @@ -395,3 +437,141 @@ func (_TestZContract *TestZContractFilterer) ParseContextData(log types.Log) (*T event.Raw = log return event, nil } + +// TestZContractContextDataRevertIterator is returned from FilterContextDataRevert and is used to iterate over the raw logs and unpacked data for ContextDataRevert events raised by the TestZContract contract. +type TestZContractContextDataRevertIterator struct { + Event *TestZContractContextDataRevert // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TestZContractContextDataRevertIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TestZContractContextDataRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TestZContractContextDataRevert) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TestZContractContextDataRevertIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TestZContractContextDataRevertIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TestZContractContextDataRevert represents a ContextDataRevert event raised by the TestZContract contract. +type TestZContractContextDataRevert struct { + Origin []byte + Sender common.Address + ChainID *big.Int + MsgSender common.Address + Message string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterContextDataRevert is a free log retrieval operation binding the contract event 0xfdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948. +// +// Solidity: event ContextDataRevert(bytes origin, address sender, uint256 chainID, address msgSender, string message) +func (_TestZContract *TestZContractFilterer) FilterContextDataRevert(opts *bind.FilterOpts) (*TestZContractContextDataRevertIterator, error) { + + logs, sub, err := _TestZContract.contract.FilterLogs(opts, "ContextDataRevert") + if err != nil { + return nil, err + } + return &TestZContractContextDataRevertIterator{contract: _TestZContract.contract, event: "ContextDataRevert", logs: logs, sub: sub}, nil +} + +// WatchContextDataRevert is a free log subscription operation binding the contract event 0xfdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948. +// +// Solidity: event ContextDataRevert(bytes origin, address sender, uint256 chainID, address msgSender, string message) +func (_TestZContract *TestZContractFilterer) WatchContextDataRevert(opts *bind.WatchOpts, sink chan<- *TestZContractContextDataRevert) (event.Subscription, error) { + + logs, sub, err := _TestZContract.contract.WatchLogs(opts, "ContextDataRevert") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TestZContractContextDataRevert) + if err := _TestZContract.contract.UnpackLog(event, "ContextDataRevert", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseContextDataRevert is a log parse operation binding the contract event 0xfdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e99948. +// +// Solidity: event ContextDataRevert(bytes origin, address sender, uint256 chainID, address msgSender, string message) +func (_TestZContract *TestZContractFilterer) ParseContextDataRevert(log types.Log) (*TestZContractContextDataRevert, error) { + event := new(TestZContractContextDataRevert) + if err := _TestZContract.contract.UnpackLog(event, "ContextDataRevert", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/contracts/zevm/wzeta.sol/weth9.go b/pkg/contracts/zevm/wzeta.sol/weth9.go index bce542f17..162a6c508 100644 --- a/pkg/contracts/zevm/wzeta.sol/weth9.go +++ b/pkg/contracts/zevm/wzeta.sol/weth9.go @@ -31,8 +31,8 @@ var ( // WETH9MetaData contains all meta data concerning the WETH9 contract. var WETH9MetaData = &bind.MetaData{ - ABI: "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"guy\",\"type\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"src\",\"type\":\"address\"},{\"name\":\"dst\",\"type\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"dst\",\"type\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"}]", - Bin: "0x60606040526040805190810160405280600c81526020017f57726170706564205a65746100000000000000000000000000000000000000008152506000908051906020019061004f9291906100c8565b506040805190810160405280600581526020017f575a4554410000000000000000000000000000000000000000000000000000008152506001908051906020019061009b9291906100c8565b506012600260006101000a81548160ff021916908360ff16021790555034156100c357600080fd5b61016d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010957805160ff1916838001178555610137565b82800160010185558215610137579182015b8281111561013657825182559160200191906001019061011b565b5b5090506101449190610148565b5090565b61016a91905b8082111561016657600081600090555060010161014e565b5090565b90565b610c348061017c6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208e8d099f48a4e7a73b2709a09da4e0704fd1cb7ce15b8cdf4a7552b81095bc530029", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040526040518060400160405280600d81526020017f57726170706564204574686572000000000000000000000000000000000000008152506000908051906020019062000051929190620000d0565b506040518060400160405280600481526020017f5745544800000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f929190620000d0565b506012600260006101000a81548160ff021916908360ff160217905550348015620000c957600080fd5b50620001e5565b828054620000de9062000180565b90600052602060002090601f0160209004810192826200010257600085556200014e565b82601f106200011d57805160ff19168380011785556200014e565b828001600101855582156200014e579182015b828111156200014d57825182559160200191906001019062000130565b5b5090506200015d919062000161565b5090565b5b808211156200017c57600081600090555060010162000162565b5090565b600060028204905060018216806200019957607f821691505b60208210811415620001b057620001af620001b6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610fd380620001f56000396000f3fe6080604052600436106100a05760003560e01c8063313ce56711610064578063313ce567146101ad57806370a08231146101d857806395d89b4114610215578063a9059cbb14610240578063d0e30db01461027d578063dd62ed3e14610287576100af565b806306fdde03146100b4578063095ea7b3146100df57806318160ddd1461011c57806323b872dd146101475780632e1a7d4d14610184576100af565b366100af576100ad6102c4565b005b600080fd5b3480156100c057600080fd5b506100c961036a565b6040516100d69190610d20565b60405180910390f35b3480156100eb57600080fd5b5061010660048036038101906101019190610c0f565b6103f8565b6040516101139190610d05565b60405180910390f35b34801561012857600080fd5b506101316104ea565b60405161013e9190610d62565b60405180910390f35b34801561015357600080fd5b5061016e60048036038101906101699190610bbc565b6104f2565b60405161017b9190610d05565b60405180910390f35b34801561019057600080fd5b506101ab60048036038101906101a69190610c4f565b6108c2565b005b3480156101b957600080fd5b506101c2610a32565b6040516101cf9190610d7d565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190610b4f565b610a45565b60405161020c9190610d62565b60405180910390f35b34801561022157600080fd5b5061022a610a5d565b6040516102379190610d20565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190610c0f565b610aeb565b6040516102749190610d05565b60405180910390f35b6102856102c4565b005b34801561029357600080fd5b506102ae60048036038101906102a99190610b7c565b610b00565b6040516102bb9190610d62565b60405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546103139190610db4565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516103609190610d62565b60405180910390a2565b6000805461037790610ec6565b80601f01602080910402602001604051908101604052809291908181526020018280546103a390610ec6565b80156103f05780601f106103c5576101008083540402835291602001916103f0565b820191906000526020600020905b8154815290600101906020018083116103d357829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104d89190610d62565b60405180910390a36001905092915050565b600047905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90610d42565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561064e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156107a65781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990610d42565b60405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079e9190610e0a565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107f59190610e0a565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461084b9190610db4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108af9190610d62565b60405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90610d42565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109939190610e0a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109e0573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610a279190610d62565b60405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054610a6a90610ec6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690610ec6565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b505050505081565b6000610af83384846104f2565b905092915050565b6004602052816000526040600020602052806000526040600020600091509150505481565b600081359050610b3481610f6f565b92915050565b600081359050610b4981610f86565b92915050565b600060208284031215610b6557610b64610f56565b5b6000610b7384828501610b25565b91505092915050565b60008060408385031215610b9357610b92610f56565b5b6000610ba185828601610b25565b9250506020610bb285828601610b25565b9150509250929050565b600080600060608486031215610bd557610bd4610f56565b5b6000610be386828701610b25565b9350506020610bf486828701610b25565b9250506040610c0586828701610b3a565b9150509250925092565b60008060408385031215610c2657610c25610f56565b5b6000610c3485828601610b25565b9250506020610c4585828601610b3a565b9150509250929050565b600060208284031215610c6557610c64610f56565b5b6000610c7384828501610b3a565b91505092915050565b610c8581610e50565b82525050565b6000610c9682610d98565b610ca08185610da3565b9350610cb0818560208601610e93565b610cb981610f5b565b840191505092915050565b6000610cd1600083610da3565b9150610cdc82610f6c565b600082019050919050565b610cf081610e7c565b82525050565b610cff81610e86565b82525050565b6000602082019050610d1a6000830184610c7c565b92915050565b60006020820190508181036000830152610d3a8184610c8b565b905092915050565b60006020820190508181036000830152610d5b81610cc4565b9050919050565b6000602082019050610d776000830184610ce7565b92915050565b6000602082019050610d926000830184610cf6565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610dbf82610e7c565b9150610dca83610e7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610dff57610dfe610ef8565b5b828201905092915050565b6000610e1582610e7c565b9150610e2083610e7c565b925082821015610e3357610e32610ef8565b5b828203905092915050565b6000610e4982610e5c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610eb1578082015181840152602081019050610e96565b83811115610ec0576000848401525b50505050565b60006002820490506001821680610ede57607f821691505b60208210811415610ef257610ef1610f27565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b50565b610f7881610e3e565b8114610f8357600080fd5b50565b610f8f81610e7c565b8114610f9a57600080fd5b5056fea2646970667358221220ed2297470e8d6c8e387b5cdc1c81dd38decdf0b011f3c15df9f52f6da3dcc17664736f6c63430008070033", } // WETH9ABI is the input ABI used to generate the binding from. @@ -493,25 +493,25 @@ func (_WETH9 *WETH9TransactorSession) Withdraw(wad *big.Int) (*types.Transaction return _WETH9.Contract.Withdraw(&_WETH9.TransactOpts, wad) } -// Fallback is a paid mutator transaction binding the contract fallback function. +// Receive is a paid mutator transaction binding the contract receive function. // -// Solidity: fallback() payable returns() -func (_WETH9 *WETH9Transactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _WETH9.contract.RawTransact(opts, calldata) +// Solidity: receive() payable returns() +func (_WETH9 *WETH9Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.contract.RawTransact(opts, nil) // calldata is disallowed for receive function } -// Fallback is a paid mutator transaction binding the contract fallback function. +// Receive is a paid mutator transaction binding the contract receive function. // -// Solidity: fallback() payable returns() -func (_WETH9 *WETH9Session) Fallback(calldata []byte) (*types.Transaction, error) { - return _WETH9.Contract.Fallback(&_WETH9.TransactOpts, calldata) +// Solidity: receive() payable returns() +func (_WETH9 *WETH9Session) Receive() (*types.Transaction, error) { + return _WETH9.Contract.Receive(&_WETH9.TransactOpts) } -// Fallback is a paid mutator transaction binding the contract fallback function. +// Receive is a paid mutator transaction binding the contract receive function. // -// Solidity: fallback() payable returns() -func (_WETH9 *WETH9TransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _WETH9.Contract.Fallback(&_WETH9.TransactOpts, calldata) +// Solidity: receive() payable returns() +func (_WETH9 *WETH9TransactorSession) Receive() (*types.Transaction, error) { + return _WETH9.Contract.Receive(&_WETH9.TransactOpts) } // WETH9ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the WETH9 contract. diff --git a/testFoundry/GatewayEVM.t.sol b/testFoundry/GatewayEVM.t.sol index c807db09d..7da72e391 100644 --- a/testFoundry/GatewayEVM.t.sol +++ b/testFoundry/GatewayEVM.t.sol @@ -32,6 +32,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver event Withdraw(address indexed token, address indexed to, uint256 amount); event WithdrawAndCall(address indexed token, address indexed to, uint256 amount, bytes data); + event WithdrawAndRevert(address indexed token, address indexed to, uint256 amount, bytes data); function setUp() public { owner = address(this); @@ -57,23 +58,6 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver token.transfer(address(custody), 500000); } - function testForwardCallToReceivePayable() public { - string memory str = "Hello, Foundry!"; - uint256 num = 42; - bool flag = true; - uint256 value = 1 ether; - - bytes memory data = abi.encodeWithSignature("receivePayable(string,uint256,bool)", str, num, flag); - - vm.expectCall(address(receiver), value, data); - vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedPayable(address(gateway), value, str, num, flag); - vm.expectEmit(true, true, true, true, address(gateway)); - emit Executed(address(receiver), value, data); - - gateway.execute{value: value}(address(receiver), data); - } - function testForwardCallToReceiveNonPayable() public { string[] memory str = new string[](1); str[0] = "Hello, Foundry!"; @@ -92,6 +76,26 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver gateway.execute(address(receiver), data); } + function testForwardCallToReceivePayable() public { + string memory str = "Hello, Foundry!"; + uint256 num = 42; + bool flag = true; + uint256 value = 1 ether; + assertEq(0, address(receiver).balance); + + bytes memory data = abi.encodeWithSignature("receivePayable(string,uint256,bool)", str, num, flag); + + vm.expectCall(address(receiver), 1 ether, data); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedPayable(address(gateway), value, str, num, flag); + vm.expectEmit(true, true, true, true, address(gateway)); + emit Executed(address(receiver), 1 ether, data); + + gateway.execute{value: value}(address(receiver), data); + + assertEq(value, address(receiver).balance); + } + function testForwardCallToReceiveNoParams() public { bytes memory data = abi.encodeWithSignature("receiveNoParams()"); @@ -111,6 +115,8 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceBefore, 0); uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); vm.expectEmit(true, true, true, true, address(receiver)); emit ReceivedERC20(address(gateway), amount, address(token), destination); vm.expectEmit(true, true, true, true, address(custody)); @@ -128,8 +134,59 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver // Verify that the approval was reset uint256 allowance = token.allowance(address(gateway), address(receiver)); assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); } + function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() public { + uint256 amount = 0; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(token), destination); + vm.expectRevert(InsufficientERC20Amount.selector); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + + function testForwardCallToReceiveERC20PartialThroughCustody() public { + uint256 amount = 100000; + bytes memory data = abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount / 2, address(token), destination); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndCall(address(token), address(receiver), amount, data); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, amount / 2); + + // Verify that the remaining tokens were refunded to the Custody contract + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount / 2); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() public { + uint256 amount = 0; + bytes memory data = abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(token), destination); + vm.expectRevert(InsufficientERC20Amount.selector); + custody.withdrawAndCall(address(token), address(receiver), amount, data); + } + + function testForwardCallToReceiveNoParamsThroughCustody() public { uint256 amount = 100000; bytes memory data = abi.encodeWithSignature("receiveNoParams()"); @@ -137,10 +194,12 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceBefore, 0); uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); vm.expectEmit(true, true, true, true, address(receiver)); emit ReceivedNoParams(address(gateway)); - // vm.expectEmit(true, true, true, true, address(custody)); - // emit WithdrawAndCall(address(token), address(receiver), amount, data); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndCall(address(token), address(receiver), amount, data); custody.withdrawAndCall(address(token), address(receiver), amount, data); // Verify that the tokens were not transferred to the destination address @@ -154,6 +213,10 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver // Verify that the approval was reset uint256 allowance = token.allowance(address(gateway), address(receiver)); assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); } function testWithdrawThroughCustody() public { @@ -162,6 +225,8 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver assertEq(balanceBefore, 0); uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(destination), amount); + vm.expectCall(address(token), 0, transferData); vm.expectEmit(true, true, true, true, address(custody)); emit Withdraw(address(token), destination, amount); custody.withdraw(address(token), destination, amount); @@ -173,6 +238,72 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver // Verify that the tokens were substracted from custody uint256 balanceAfterCustody = token.balanceOf(address(custody)); assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndRevertThroughCustody() public { + uint256 amount = 100000; + bytes memory data = abi.encodePacked("hello"); + uint256 balanceBefore = token.balanceOf(address(receiver)); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(token), 0, transferData); + // Verify that onRevert callback was called + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedRevert(address(gateway), data); + vm.expectEmit(true, true, true, true, address(gateway)); + emit RevertedWithERC20(address(token), address(receiver), amount, data); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawAndRevert(address(token), address(receiver), amount, data); + custody.withdrawAndRevert(address(token), address(receiver), amount, data); + + // Verify that the tokens were transferred to the receiver address + uint256 balanceAfter = token.balanceOf(address(receiver)); + assertEq(balanceAfter, amount); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody - amount); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + + function testWithdrawAndRevertThroughCustodyFailsIfAmountIs0() public { + uint256 amount = 0; + bytes memory data = abi.encodePacked("hello"); + + vm.expectRevert(InsufficientERC20Amount.selector); + custody.withdrawAndRevert(address(token), address(receiver), amount, data); + } + + function testExecuteRevert() public { + uint256 value = 1 ether; + bytes memory data = abi.encodePacked("hello"); + uint256 balanceBefore = address(receiver).balance; + assertEq(balanceBefore, 0); + + // Verify that onRevert callback was called + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedRevert(address(gateway), data); + vm.expectEmit(true, true, true, true, address(gateway)); + emit Reverted(address(receiver), 1 ether, data); + gateway.executeRevert{value: value}(address(receiver), data); + + // Verify that the tokens were transferred to the receiver address + uint256 balanceAfter = address(receiver).balance; + assertEq(balanceAfter, 1 ether); } } diff --git a/testFoundry/GatewayEVMZEVM.t.sol b/testFoundry/GatewayEVMZEVM.t.sol index 25dcaa0d7..0fe21f092 100644 --- a/testFoundry/GatewayEVMZEVM.t.sol +++ b/testFoundry/GatewayEVMZEVM.t.sol @@ -40,7 +40,7 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate address tssAddress; // zevm - address proxyZEVM; + address payable proxyZEVM; GatewayZEVM gatewayZEVM; SenderZEVM senderZEVM; SystemContractMock systemContract; @@ -74,10 +74,10 @@ contract GatewayEVMZEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IGate receiverEVM = new ReceiverEVM(); // zevm - proxyZEVM = address(new ERC1967Proxy( + proxyZEVM = payable(address(new ERC1967Proxy( address(new GatewayZEVM()), abi.encodeWithSelector(GatewayZEVM.initialize.selector, "") - )); + ))); gatewayZEVM = GatewayZEVM(proxyZEVM); senderZEVM = new SenderZEVM(address(gatewayZEVM)); address fungibleModuleAddress = address(0x735b14BB79463307AAcBED86DAf3322B1e6226aB); diff --git a/testFoundry/GatewayZEVM.t.sol b/testFoundry/GatewayZEVM.t.sol index 95640dc0d..4ea854867 100644 --- a/testFoundry/GatewayZEVM.t.sol +++ b/testFoundry/GatewayZEVM.t.sol @@ -10,64 +10,194 @@ import "contracts/zevm/SystemContract.sol"; import "contracts/zevm/interfaces/IZRC20.sol"; import "contracts/prototypes/zevm/TestZContract.sol"; import "contracts/prototypes/zevm/IGatewayZEVM.sol"; +import "contracts/zevm/WZETA.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; +import "forge-std/console.sol"; contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors { - address proxy; + address payable proxy; GatewayZEVM gateway; ZRC20New zrc20; + WETH9 zetaToken; SystemContract systemContract; TestZContract testZContract; address owner; address addr1; + address fungibleModule; function setUp() public { owner = address(this); addr1 = address(0x1234); - proxy = address(new ERC1967Proxy( + zetaToken = new WETH9(); + + proxy = payable(address(new ERC1967Proxy( address(new GatewayZEVM()), - abi.encodeWithSelector(GatewayZEVM.initialize.selector, "") - )); + abi.encodeWithSelector(GatewayZEVM.initialize.selector, address(zetaToken)) + ))); gateway = GatewayZEVM(proxy); + fungibleModule = gateway.FUNGIBLE_MODULE_ADDRESS(); testZContract = new TestZContract(); - vm.startPrank(gateway.FUNGIBLE_MODULE_ADDRESS()); + vm.startPrank(fungibleModule); systemContract = new SystemContract(address(0), address(0), address(0)); zrc20 = new ZRC20New("TOKEN", "TKN", 18, 1, CoinType.Gas, 0, address(systemContract), address(gateway)); systemContract.setGasCoinZRC20(1, address(zrc20)); systemContract.setGasPrice(1, 1); - - vm.deal(gateway.FUNGIBLE_MODULE_ADDRESS(), 1000000000); + vm.deal(fungibleModule, 1000000000); + zetaToken.deposit{value: 10}(); + zetaToken.approve(address(gateway), 10); zrc20.deposit(owner, 100000); vm.stopPrank(); - vm.prank(owner); + vm.startPrank(owner); zrc20.approve(address(gateway), 100000); + zetaToken.deposit{value: 10}(); + zetaToken.approve(address(gateway), 10); + vm.stopPrank(); } function testWithdrawZRC20() public { + uint256 amount = 1; uint256 ownerBalanceBefore = zrc20.balanceOf(owner); vm.expectEmit(true, true, true, true, address(gateway)); - emit Withdrawal(owner, address(zrc20), abi.encodePacked(addr1), 1, 0, zrc20.PROTOCOL_FLAT_FEE(), ""); + emit Withdrawal(owner, address(zrc20), abi.encodePacked(addr1), amount, 0, zrc20.PROTOCOL_FLAT_FEE(), ""); gateway.withdraw(abi.encodePacked(addr1), 1, address(zrc20)); uint256 ownerBalanceAfter = zrc20.balanceOf(owner); - assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); + assertEq(ownerBalanceBefore - amount, ownerBalanceAfter); + } + + function testWithdrawZRC20FailsIfNoAllowance() public { + uint256 amount = 1; + uint256 ownerBalanceBefore = zrc20.balanceOf(owner); + // Remove allowance for gateway + vm.prank(owner); + zrc20.approve(address(gateway), 0); + + vm.expectRevert(); + gateway.withdraw(abi.encodePacked(addr1), amount, address(zrc20)); + + // Check that balance didn't change + uint256 ownerBalanceAfter = zrc20.balanceOf(owner); + assertEq(ownerBalanceBefore, ownerBalanceAfter); + } + + function testWithdrawZRC20WithMessageFailsIfNoAllowance() public { + uint256 amount = 1; + uint256 ownerBalanceBefore = zrc20.balanceOf(owner); + // Remove allowance for gateway + vm.prank(owner); + zrc20.approve(address(gateway), 0); + + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + vm.expectRevert(); + gateway.withdrawAndCall(abi.encodePacked(addr1), amount, address(zrc20), message); + + // Check that balance didn't change + uint256 ownerBalanceAfter = zrc20.balanceOf(owner); + assertEq(ownerBalanceBefore, ownerBalanceAfter); } function testWithdrawZRC20WithMessage() public { + uint256 amount = 1; uint256 ownerBalanceBefore = zrc20.balanceOf(owner); bytes memory message = abi.encodeWithSignature("hello(address)", addr1); vm.expectEmit(true, true, true, true, address(gateway)); - emit Withdrawal(owner, address(zrc20), abi.encodePacked(addr1), 1, 0, zrc20.PROTOCOL_FLAT_FEE(), message); - gateway.withdrawAndCall(abi.encodePacked(addr1), 1, address(zrc20), message); + emit Withdrawal(owner, address(zrc20), abi.encodePacked(addr1), amount, 0, zrc20.PROTOCOL_FLAT_FEE(), message); + gateway.withdrawAndCall(abi.encodePacked(addr1), amount, address(zrc20), message); uint256 ownerBalanceAfter = zrc20.balanceOf(owner); + assertEq(ownerBalanceBefore - amount, ownerBalanceAfter); + } + + function testWithdrawZETA() public { + uint256 amount = 1; + uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 fungibleModuleBalanceBefore = fungibleModule.balance; + + vm.expectEmit(true, true, true, true, address(gateway)); + emit Withdrawal(owner, address(zetaToken), abi.encodePacked(fungibleModule), amount, 0, 0, ""); + gateway.withdraw(amount); + + uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); + + uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + // Verify amount is transfered to fungible module + assertEq(fungibleModuleBalanceBefore + 1, fungibleModule.balance); + } + + function testWithdrawZETAFailsIfNoAllowance() public { + uint256 amount = 1; + uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 fungibleModuleBalanceBefore = fungibleModule.balance; + // Remove allowance for gateway + vm.prank(owner); + zetaToken.approve(address(gateway), 0); + + vm.expectRevert(); + gateway.withdraw(amount); + + // Verify balances not changed + uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); + assertEq(ownerBalanceBefore, ownerBalanceAfter); + + uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + assertEq(fungibleModuleBalanceBefore, fungibleModule.balance); + } + + function testWithdrawZETAWithMessage() public { + uint256 amount = 1; + uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 fungibleModuleBalanceBefore = fungibleModule.balance; + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + + vm.expectEmit(true, true, true, true, address(gateway)); + emit Withdrawal(owner, address(zetaToken), abi.encodePacked(fungibleModule), amount, 0, 0, message); + gateway.withdrawAndCall(amount, message); + + uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); + assertEq(ownerBalanceBefore - 1, ownerBalanceAfter); + + uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + // Verify amount is transfered to fungible module + assertEq(fungibleModuleBalanceBefore + 1, fungibleModule.balance); + } + + function testWithdrawZETAWithMessageFailsIfNoAllowance() public { + uint256 amount = 1; + uint256 ownerBalanceBefore = zetaToken.balanceOf(owner); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 fungibleModuleBalanceBefore = fungibleModule.balance; + bytes memory message = abi.encodeWithSignature("hello(address)", addr1); + // Remove allowance for gateway + vm.prank(owner); + zetaToken.approve(address(gateway), 0); + + vm.expectRevert(); + gateway.withdrawAndCall(amount, message); + + // Verify balances not changed + uint256 ownerBalanceAfter = zetaToken.balanceOf(owner); + assertEq(ownerBalanceBefore, ownerBalanceAfter); + + uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + assertEq(fungibleModuleBalanceBefore, fungibleModule.balance); } function testCall() public { @@ -79,77 +209,330 @@ contract GatewayZEVMInboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors } contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors { + address payable proxy; GatewayZEVM gateway; ZRC20New zrc20; + WETH9 zetaToken; SystemContract systemContract; TestZContract testZContract; address owner; address addr1; + address fungibleModule; + event ContextData(bytes origin, address sender, uint256 chainID, address msgSender, string message); + event ContextDataRevert(bytes origin, address sender, uint256 chainID, address msgSender, string message); function setUp() public { owner = address(this); addr1 = address(0x1234); - gateway = new GatewayZEVM(); + zetaToken = new WETH9(); + + proxy = payable(address(new ERC1967Proxy( + address(new GatewayZEVM()), + abi.encodeWithSelector(GatewayZEVM.initialize.selector, address(zetaToken)) + ))); + gateway = GatewayZEVM(proxy); + fungibleModule = gateway.FUNGIBLE_MODULE_ADDRESS(); + testZContract = new TestZContract(); - vm.startPrank(gateway.FUNGIBLE_MODULE_ADDRESS()); + vm.startPrank(fungibleModule); systemContract = new SystemContract(address(0), address(0), address(0)); zrc20 = new ZRC20New("TOKEN", "TKN", 18, 1, CoinType.Gas, 0, address(systemContract), address(gateway)); systemContract.setGasCoinZRC20(1, address(zrc20)); systemContract.setGasPrice(1, 1); - - vm.deal(gateway.FUNGIBLE_MODULE_ADDRESS(), 1000000000); + vm.deal(fungibleModule, 1000000000); + zetaToken.deposit{value: 10}(); + zetaToken.approve(address(gateway), 10); zrc20.deposit(owner, 100000); vm.stopPrank(); - vm.prank(owner); + vm.startPrank(owner); zrc20.approve(address(gateway), 100000); + zetaToken.deposit{value: 10}(); + zetaToken.approve(address(gateway), 10); + vm.stopPrank(); } function testDeposit() public { + uint256 amount = 1; uint256 balanceBefore = zrc20.balanceOf(addr1); assertEq(0, balanceBefore); - vm.prank(gateway.FUNGIBLE_MODULE_ADDRESS()); - gateway.deposit(address(zrc20), 1, addr1); + vm.prank(fungibleModule); + gateway.deposit(address(zrc20), amount, addr1); uint256 balanceAfter = zrc20.balanceOf(addr1); - assertEq(1, balanceAfter); + assertEq(amount, balanceAfter); + } + + function testDepositFailsIfSenderNotFungibleModule() public { + uint256 amount = 1; + uint256 balanceBefore = zrc20.balanceOf(addr1); + assertEq(0, balanceBefore); + + vm.prank(owner); + vm.expectRevert(CallerIsNotFungibleModule.selector); + gateway.deposit(address(zrc20), amount, addr1); + + uint256 balanceAfter = zrc20.balanceOf(addr1); + assertEq(0, balanceAfter); + } + + function testDepositFailsIfTargetIsGateway() public { + uint256 amount = 1; + + vm.prank(fungibleModule); + vm.expectRevert(InvalidTarget.selector); + gateway.deposit(address(zrc20), amount, address(gateway)); + } + + function testDepositFailsIfTargetIsFungibleModule() public { + uint256 amount = 1; + vm.prank(fungibleModule); + vm.expectRevert(InvalidTarget.selector); + gateway.deposit(address(zrc20), amount, fungibleModule); } function testExecuteZContract() public { bytes memory message = abi.encode("hello"); zContext memory context = zContext({ origin: abi.encodePacked(address(gateway)), - sender: gateway.FUNGIBLE_MODULE_ADDRESS(), + sender: fungibleModule, chainID: 1 }); vm.expectEmit(true, true, true, true, address(testZContract)); - emit ContextData(abi.encodePacked(gateway), gateway.FUNGIBLE_MODULE_ADDRESS(), 1, address(gateway), "hello"); - vm.prank(gateway.FUNGIBLE_MODULE_ADDRESS()); + emit ContextData(abi.encodePacked(gateway), fungibleModule, 1, address(gateway), "hello"); + vm.prank(fungibleModule); + gateway.execute(context, address(zrc20), 1, address(testZContract), message); + } + + function testExecuteZContractFailsIfSenderIsNotFungibleModule() public { + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(CallerIsNotFungibleModule.selector); + vm.prank(owner); gateway.execute(context, address(zrc20), 1, address(testZContract), message); } + + function testExecuteRevertZContract() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = revertContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectEmit(true, true, true, true, address(testZContract)); + emit ContextDataRevert(abi.encodePacked(gateway), fungibleModule, 1, address(gateway), "hello"); + vm.prank(fungibleModule); + gateway.executeRevert(context, address(zrc20), 1, address(testZContract), message); + } + + function testExecuteRevertZContractIfSenderIsNotFungibleModule() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = revertContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(CallerIsNotFungibleModule.selector); + vm.prank(owner); + gateway.executeRevert(context, address(zrc20), 1, address(testZContract), message); + } - function testDepositAndCallZContract() public { + function testDepositZRC20AndCallZContract() public { uint256 balanceBefore = zrc20.balanceOf(address(testZContract)); assertEq(0, balanceBefore); bytes memory message = abi.encode("hello"); zContext memory context = zContext({ origin: abi.encodePacked(address(gateway)), - sender: gateway.FUNGIBLE_MODULE_ADDRESS(), + sender: fungibleModule, chainID: 1 }); vm.expectEmit(true, true, true, true, address(testZContract)); - emit ContextData(abi.encodePacked(gateway), gateway.FUNGIBLE_MODULE_ADDRESS(), 1, address(gateway), "hello"); - vm.prank(gateway.FUNGIBLE_MODULE_ADDRESS()); + emit ContextData(abi.encodePacked(gateway), fungibleModule, 1, address(gateway), "hello"); + vm.prank(fungibleModule); gateway.depositAndCall(context, address(zrc20), 1, address(testZContract), message); uint256 balanceAfter = zrc20.balanceOf(address(testZContract)); assertEq(1, balanceAfter); } + + function testDepositZRC20AndCallZContractFailsIfSenderIsNotFungibleModule() public { + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(CallerIsNotFungibleModule.selector); + vm.prank(owner); + gateway.depositAndCall(context, address(zrc20), 1, address(testZContract), message); + } + + function testDepositZRC20AndCallZContractIfTargetIsFungibleModule() public { + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndCall(context, address(zrc20), 1, fungibleModule, message); + } + + function testDepositZRC20AndCallZContractIfTargetIsGateway() public { + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndCall(context, address(zrc20), 1, address(gateway), message); + } + + function testDepositAndRevertZRC20AndCallZContract() public { + uint256 balanceBefore = zrc20.balanceOf(address(testZContract)); + assertEq(0, balanceBefore); + + bytes memory message = abi.encode("hello"); + revertContext memory context = revertContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectEmit(true, true, true, true, address(testZContract)); + emit ContextDataRevert(abi.encodePacked(gateway), fungibleModule, 1, address(gateway), "hello"); + vm.prank(fungibleModule); + gateway.depositAndRevert(context, address(zrc20), 1, address(testZContract), message); + + uint256 balanceAfter = zrc20.balanceOf(address(testZContract)); + assertEq(1, balanceAfter); + } + + function testDepositAndRevertZRC20AndCallZContractFailsIfSenderIsNotFungibleModule() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = revertContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(CallerIsNotFungibleModule.selector); + vm.prank(owner); + gateway.depositAndRevert(context, address(zrc20), 1, address(testZContract), message); + } + + function testDepositAndRevertZRC20AndCallZContractFailsITargetIsFungibleModule() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = revertContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndRevert(context, address(zrc20), 1, fungibleModule, message); + } + + function testDepositAndRevertZRC20AndCallZContractFailsITargetIsGateway() public { + bytes memory message = abi.encode("hello"); + revertContext memory context = revertContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndRevert(context, address(zrc20), 1, address(gateway), message); + } + + function testDepositZETAAndCallZContract() public { + uint256 amount = 1; + uint256 fungibleBalanceBefore = zetaToken.balanceOf(fungibleModule); + uint256 gatewayBalanceBefore = zetaToken.balanceOf(address(gateway)); + uint256 destinationBalanceBefore = address(testZContract).balance; + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectEmit(true, true, true, true, address(testZContract)); + emit ContextData(abi.encodePacked(gateway), fungibleModule, amount, address(gateway), "hello"); + vm.prank(fungibleModule); + gateway.depositAndCall(context, amount, address(testZContract), message); + + uint256 fungibleBalanceAfter = zetaToken.balanceOf(fungibleModule); + assertEq(fungibleBalanceBefore - amount, fungibleBalanceAfter); + + uint256 gatewayBalanceAfter = zetaToken.balanceOf(address(gateway)); + assertEq(gatewayBalanceBefore, gatewayBalanceAfter); + + // Verify amount is transfered to destination + assertEq(destinationBalanceBefore + amount, address(testZContract).balance); + } + + function testDepositZETAAndCallZContractFailsIfSenderIsNotFungibleModule() public { + uint256 amount = 1; + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(CallerIsNotFungibleModule.selector); + vm.prank(owner); + gateway.depositAndCall(context, amount, address(testZContract), message); + } + + function testDepositZETAAndCallZContractFailsIfTargetIsFungibleModule() public { + uint256 amount = 1; + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndCall(context, amount, fungibleModule, message); + } + + function testDepositZETAAndCallZContractFailsIfTargetIsGateway() public { + uint256 amount = 1; + bytes memory message = abi.encode("hello"); + zContext memory context = zContext({ + origin: abi.encodePacked(address(gateway)), + sender: fungibleModule, + chainID: 1 + }); + + vm.expectRevert(InvalidTarget.selector); + vm.prank(fungibleModule); + gateway.depositAndCall(context, amount, address(gateway), message); + } } \ No newline at end of file diff --git a/testFoundry/ZetaConnectorNative.t.sol b/testFoundry/ZetaConnectorNative.t.sol new file mode 100644 index 000000000..a91408048 --- /dev/null +++ b/testFoundry/ZetaConnectorNative.t.sol @@ -0,0 +1,208 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "forge-std/Test.sol"; +import "forge-std/Vm.sol"; + +import "contracts/prototypes/evm/GatewayEVM.sol"; +import "contracts/prototypes/evm/ReceiverEVM.sol"; +import "contracts/prototypes/evm/ERC20CustodyNew.sol"; +import "contracts/prototypes/evm/ZetaConnectorNative.sol"; +import "contracts/prototypes/evm/TestERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import "contracts/prototypes/evm/IGatewayEVM.sol"; +import "contracts/prototypes/evm/IReceiverEVM.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; + +contract ZetaConnectorNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { + using SafeERC20 for IERC20; + + address proxy; + GatewayEVM gateway; + ReceiverEVM receiver; + ERC20CustodyNew custody; + ZetaConnectorNative zetaConnector; + TestERC20 zetaToken; + address owner; + address destination; + address tssAddress; + + event Withdraw(address indexed to, uint256 amount); + event WithdrawAndCall(address indexed to, uint256 amount, bytes data); + event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); + + function setUp() public { + owner = address(this); + destination = address(0x1234); + tssAddress = address(0x5678); + + zetaToken = new TestERC20("zeta", "ZETA"); + + proxy = address(new ERC1967Proxy( + address(new GatewayEVM()), + abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zetaToken)) + )); + gateway = GatewayEVM(proxy); + custody = new ERC20CustodyNew(address(gateway)); + zetaConnector = new ZetaConnectorNative(address(gateway), address(zetaToken)); + + receiver = new ReceiverEVM(); + + gateway.setCustody(address(custody)); + gateway.setConnector(address(zetaConnector)); + + zetaToken.mint(address(zetaConnector), 5000000); + } + + function testWithdraw() public { + uint256 amount = 100000; + uint256 balanceBefore = zetaToken.balanceOf(destination); + bytes32 internalSendHash = ""; + assertEq(balanceBefore, 0); + + bytes memory data = abi.encodeWithSignature("transfer(address,uint256)", destination, amount); + vm.expectCall(address(zetaToken), 0, data); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit Withdraw(destination, amount); + zetaConnector.withdraw(destination, amount, internalSendHash); + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + } + + function testWithdrawAndCallReceiveERC20() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(zetaToken), destination); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(zetaToken), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount, address(zetaToken), destination); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndCall(address(receiver), amount, data); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveNoParams() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(zetaToken), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedNoParams(address(gateway)); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndCall(address(receiver), amount, data); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the no tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveERC20Partial() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(zetaToken), 0, transferData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndCall(address(receiver), amount, data); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount / 2); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount / 2); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndRevert() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodePacked("hello"); + uint256 balanceBefore = zetaToken.balanceOf(address(receiver)); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory transferData = abi.encodeWithSignature("transfer(address,uint256)", address(gateway), amount); + vm.expectCall(address(zetaToken), 0, transferData); + // Verify that onRevert callback was called + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedRevert(address(gateway), data); + vm.expectEmit(true, true, true, true, address(gateway)); + emit RevertedWithERC20(address(zetaToken), address(receiver), amount, data); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndRevert(address(receiver), amount, data); + zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the receiver address + uint256 balanceAfter = zetaToken.balanceOf(address(receiver)); + assertEq(balanceAfter, amount); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector - amount); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } +} \ No newline at end of file diff --git a/testFoundry/ZetaConnectorNonNative.t.sol b/testFoundry/ZetaConnectorNonNative.t.sol new file mode 100644 index 000000000..e425fa559 --- /dev/null +++ b/testFoundry/ZetaConnectorNonNative.t.sol @@ -0,0 +1,213 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "forge-std/Test.sol"; +import "forge-std/Vm.sol"; + +import "contracts/prototypes/evm/GatewayEVM.sol"; +import "contracts/prototypes/evm/ReceiverEVM.sol"; +import "contracts/prototypes/evm/ERC20CustodyNew.sol"; +import "contracts/prototypes/evm/ZetaConnectorNonNative.sol"; +import "contracts/prototypes/evm/TestERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import "contracts/prototypes/evm/IGatewayEVM.sol"; +import "contracts/prototypes/evm/IReceiverEVM.sol"; +import "contracts/evm/Zeta.non-eth.sol"; +import {Upgrades} from "openzeppelin-foundry-upgrades/LegacyUpgrades.sol"; + +contract ZetaConnectorNonNativeTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiverEVMEvents { + using SafeERC20 for IERC20; + + address proxy; + GatewayEVM gateway; + ReceiverEVM receiver; + ERC20CustodyNew custody; + ZetaConnectorNonNative zetaConnector; + ZetaNonEth zetaToken; + address owner; + address destination; + address tssAddress; + + event Withdraw(address indexed to, uint256 amount); + event WithdrawAndCall(address indexed to, uint256 amount, bytes data); + event WithdrawAndRevert(address indexed to, uint256 amount, bytes data); + + function setUp() public { + owner = address(this); + destination = address(0x1234); + tssAddress = address(0x5678); + + zetaToken = new ZetaNonEth(tssAddress, tssAddress); + + proxy = address(new ERC1967Proxy( + address(new GatewayEVM()), + abi.encodeWithSelector(GatewayEVM.initialize.selector, tssAddress, address(zetaToken)) + )); + gateway = GatewayEVM(proxy); + custody = new ERC20CustodyNew(address(gateway)); + zetaConnector = new ZetaConnectorNonNative(address(gateway), address(zetaToken)); + + vm.prank(tssAddress); + zetaToken.updateTssAndConnectorAddresses(tssAddress, address(zetaConnector)); + + receiver = new ReceiverEVM(); + + gateway.setCustody(address(custody)); + gateway.setConnector(address(zetaConnector)); + } + + function testWithdraw() public { + uint256 amount = 100000; + uint256 balanceBefore = zetaToken.balanceOf(destination); + bytes32 internalSendHash = ""; + assertEq(balanceBefore, 0); + + bytes memory data = abi.encodeWithSignature("mint(address,uint256,bytes32)", destination, amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, data); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit Withdraw(destination, amount); + zetaConnector.withdraw(destination, amount, internalSendHash); + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + } + + function testWithdrawAndCallReceiveERC20() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveERC20(uint256,address,address)", amount, address(zetaToken), destination); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceBeforeZetaConnector, 0); + + bytes memory mintData = abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, mintData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount, address(zetaToken), destination); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndCall(address(receiver), amount, data); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount); + + // Verify that zeta connector doesn't hold any tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, 0); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveNoParams() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveNoParams()"); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceBeforeZetaConnector, 0); + + bytes memory mintData = abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, mintData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedNoParams(address(gateway)); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndCall(address(receiver), amount, data); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the no tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that zeta connector doesn't hold any tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, 0); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveERC20Partial() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodeWithSignature("receiveERC20Partial(uint256,address,address)", amount, address(zetaToken), destination); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceBeforeZetaConnector, 0); + + bytes memory mintData = abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, mintData); + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedERC20(address(gateway), amount / 2, address(zetaToken), destination); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndCall(address(receiver), amount, data); + zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, amount / 2); + + // Verify that zeta connector doesn't hold any tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, 0); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndRevert() public { + uint256 amount = 100000; + bytes32 internalSendHash = ""; + bytes memory data = abi.encodePacked("hello"); + uint256 balanceBefore = zetaToken.balanceOf(address(receiver)); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + bytes memory mintData = abi.encodeWithSignature("mint(address,uint256,bytes32)", address(gateway), amount, internalSendHash); + vm.expectCall(address(zetaToken), 0, mintData); + // Verify that onRevert callback was called + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedRevert(address(gateway), data); + vm.expectEmit(true, true, true, true, address(gateway)); + emit RevertedWithERC20(address(zetaToken), address(receiver), amount, data); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawAndRevert(address(receiver), amount, data); + zetaConnector.withdrawAndRevert(address(receiver), amount, data, internalSendHash); + + // Verify that the tokens were transferred to the receiver address + uint256 balanceAfter = zetaToken.balanceOf(address(receiver)); + assertEq(balanceAfter, amount); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } +} \ No newline at end of file diff --git a/typechain-types/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents.ts b/typechain-types/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents.ts index b29196dcd..071b4afdb 100644 --- a/typechain-types/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents.ts +++ b/typechain-types/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents.ts @@ -20,12 +20,14 @@ export interface IReceiverEVMEventsInterface extends utils.Interface { "ReceivedNoParams(address)": EventFragment; "ReceivedNonPayable(address,string[],uint256[],bool)": EventFragment; "ReceivedPayable(address,uint256,string,uint256,bool)": EventFragment; + "ReceivedRevert(address,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "ReceivedERC20"): EventFragment; getEvent(nameOrSignatureOrTopic: "ReceivedNoParams"): EventFragment; getEvent(nameOrSignatureOrTopic: "ReceivedNonPayable"): EventFragment; getEvent(nameOrSignatureOrTopic: "ReceivedPayable"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ReceivedRevert"): EventFragment; } export interface ReceivedERC20EventObject { @@ -80,6 +82,17 @@ export type ReceivedPayableEvent = TypedEvent< export type ReceivedPayableEventFilter = TypedEventFilter; +export interface ReceivedRevertEventObject { + sender: string; + data: string; +} +export type ReceivedRevertEvent = TypedEvent< + [string, string], + ReceivedRevertEventObject +>; + +export type ReceivedRevertEventFilter = TypedEventFilter; + export interface IReceiverEVMEvents extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -154,6 +167,12 @@ export interface IReceiverEVMEvents extends BaseContract { num?: null, flag?: null ): ReceivedPayableEventFilter; + + "ReceivedRevert(address,bytes)"( + sender?: null, + data?: null + ): ReceivedRevertEventFilter; + ReceivedRevert(sender?: null, data?: null): ReceivedRevertEventFilter; }; estimateGas: {}; diff --git a/typechain-types/contracts/prototypes/evm/ReceiverEVM.ts b/typechain-types/contracts/prototypes/evm/ReceiverEVM.ts index 1608a7a78..b7b1ca456 100644 --- a/typechain-types/contracts/prototypes/evm/ReceiverEVM.ts +++ b/typechain-types/contracts/prototypes/evm/ReceiverEVM.ts @@ -30,7 +30,9 @@ import type { export interface ReceiverEVMInterface extends utils.Interface { functions: { + "onRevert(bytes)": FunctionFragment; "receiveERC20(uint256,address,address)": FunctionFragment; + "receiveERC20Partial(uint256,address,address)": FunctionFragment; "receiveNoParams()": FunctionFragment; "receiveNonPayable(string[],uint256[],bool)": FunctionFragment; "receivePayable(string,uint256,bool)": FunctionFragment; @@ -38,12 +40,18 @@ export interface ReceiverEVMInterface extends utils.Interface { getFunction( nameOrSignatureOrTopic: + | "onRevert" | "receiveERC20" + | "receiveERC20Partial" | "receiveNoParams" | "receiveNonPayable" | "receivePayable" ): FunctionFragment; + encodeFunctionData( + functionFragment: "onRevert", + values: [PromiseOrValue] + ): string; encodeFunctionData( functionFragment: "receiveERC20", values: [ @@ -52,6 +60,14 @@ export interface ReceiverEVMInterface extends utils.Interface { PromiseOrValue ] ): string; + encodeFunctionData( + functionFragment: "receiveERC20Partial", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; encodeFunctionData( functionFragment: "receiveNoParams", values?: undefined @@ -73,10 +89,15 @@ export interface ReceiverEVMInterface extends utils.Interface { ] ): string; + decodeFunctionResult(functionFragment: "onRevert", data: BytesLike): Result; decodeFunctionResult( functionFragment: "receiveERC20", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "receiveERC20Partial", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "receiveNoParams", data: BytesLike @@ -95,12 +116,14 @@ export interface ReceiverEVMInterface extends utils.Interface { "ReceivedNoParams(address)": EventFragment; "ReceivedNonPayable(address,string[],uint256[],bool)": EventFragment; "ReceivedPayable(address,uint256,string,uint256,bool)": EventFragment; + "ReceivedRevert(address,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "ReceivedERC20"): EventFragment; getEvent(nameOrSignatureOrTopic: "ReceivedNoParams"): EventFragment; getEvent(nameOrSignatureOrTopic: "ReceivedNonPayable"): EventFragment; getEvent(nameOrSignatureOrTopic: "ReceivedPayable"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ReceivedRevert"): EventFragment; } export interface ReceivedERC20EventObject { @@ -155,6 +178,17 @@ export type ReceivedPayableEvent = TypedEvent< export type ReceivedPayableEventFilter = TypedEventFilter; +export interface ReceivedRevertEventObject { + sender: string; + data: string; +} +export type ReceivedRevertEvent = TypedEvent< + [string, string], + ReceivedRevertEventObject +>; + +export type ReceivedRevertEventFilter = TypedEventFilter; + export interface ReceiverEVM extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -182,6 +216,11 @@ export interface ReceiverEVM extends BaseContract { removeListener: OnEvent; functions: { + onRevert( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveERC20( amount: PromiseOrValue, token: PromiseOrValue, @@ -189,6 +228,13 @@ export interface ReceiverEVM extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + receiveERC20Partial( + amount: PromiseOrValue, + token: PromiseOrValue, + destination: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveNoParams( overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -208,6 +254,11 @@ export interface ReceiverEVM extends BaseContract { ): Promise; }; + onRevert( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveERC20( amount: PromiseOrValue, token: PromiseOrValue, @@ -215,6 +266,13 @@ export interface ReceiverEVM extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + receiveERC20Partial( + amount: PromiseOrValue, + token: PromiseOrValue, + destination: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveNoParams( overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -234,6 +292,11 @@ export interface ReceiverEVM extends BaseContract { ): Promise; callStatic: { + onRevert( + data: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + receiveERC20( amount: PromiseOrValue, token: PromiseOrValue, @@ -241,6 +304,13 @@ export interface ReceiverEVM extends BaseContract { overrides?: CallOverrides ): Promise; + receiveERC20Partial( + amount: PromiseOrValue, + token: PromiseOrValue, + destination: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + receiveNoParams(overrides?: CallOverrides): Promise; receiveNonPayable( @@ -302,9 +372,20 @@ export interface ReceiverEVM extends BaseContract { num?: null, flag?: null ): ReceivedPayableEventFilter; + + "ReceivedRevert(address,bytes)"( + sender?: null, + data?: null + ): ReceivedRevertEventFilter; + ReceivedRevert(sender?: null, data?: null): ReceivedRevertEventFilter; }; estimateGas: { + onRevert( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveERC20( amount: PromiseOrValue, token: PromiseOrValue, @@ -312,6 +393,13 @@ export interface ReceiverEVM extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + receiveERC20Partial( + amount: PromiseOrValue, + token: PromiseOrValue, + destination: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveNoParams( overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -332,6 +420,11 @@ export interface ReceiverEVM extends BaseContract { }; populateTransaction: { + onRevert( + data: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveERC20( amount: PromiseOrValue, token: PromiseOrValue, @@ -339,6 +432,13 @@ export interface ReceiverEVM extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + receiveERC20Partial( + amount: PromiseOrValue, + token: PromiseOrValue, + destination: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + receiveNoParams( overrides?: Overrides & { from?: PromiseOrValue } ): Promise; diff --git a/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts b/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts index afe99d1d0..bd4541023 100644 --- a/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts +++ b/typechain-types/contracts/prototypes/evm/ZetaConnectorNative.ts @@ -33,6 +33,7 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { "receiveTokens(uint256)": FunctionFragment; "withdraw(address,uint256,bytes32)": FunctionFragment; "withdrawAndCall(address,uint256,bytes,bytes32)": FunctionFragment; + "withdrawAndRevert(address,uint256,bytes,bytes32)": FunctionFragment; "zetaToken()": FunctionFragment; }; @@ -42,6 +43,7 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { | "receiveTokens" | "withdraw" | "withdrawAndCall" + | "withdrawAndRevert" | "zetaToken" ): FunctionFragment; @@ -67,6 +69,15 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { PromiseOrValue ] ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; @@ -79,15 +90,21 @@ export interface ZetaConnectorNativeInterface extends utils.Interface { functionFragment: "withdrawAndCall", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; events: { "Withdraw(address,uint256)": EventFragment; "WithdrawAndCall(address,uint256,bytes)": EventFragment; + "WithdrawAndRevert(address,uint256,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; getEvent(nameOrSignatureOrTopic: "WithdrawAndCall"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndRevert"): EventFragment; } export interface WithdrawEventObject { @@ -113,6 +130,19 @@ export type WithdrawAndCallEvent = TypedEvent< export type WithdrawAndCallEventFilter = TypedEventFilter; +export interface WithdrawAndRevertEventObject { + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndRevertEvent = TypedEvent< + [string, BigNumber, string], + WithdrawAndRevertEventObject +>; + +export type WithdrawAndRevertEventFilter = + TypedEventFilter; + export interface ZetaConnectorNative extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -162,6 +192,14 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise<[string]>; }; @@ -187,6 +225,14 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; callStatic: { @@ -212,6 +258,14 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: CallOverrides ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; @@ -235,6 +289,17 @@ export interface ZetaConnectorNative extends BaseContract { amount?: null, data?: null ): WithdrawAndCallEventFilter; + + "WithdrawAndRevert(address,uint256,bytes)"( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + WithdrawAndRevert( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; }; estimateGas: { @@ -260,6 +325,14 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; @@ -286,6 +359,14 @@ export interface ZetaConnectorNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; } diff --git a/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts b/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts index e51de8e33..f2d9ae459 100644 --- a/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts +++ b/typechain-types/contracts/prototypes/evm/ZetaConnectorNewBase.ts @@ -33,6 +33,7 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { "receiveTokens(uint256)": FunctionFragment; "withdraw(address,uint256,bytes32)": FunctionFragment; "withdrawAndCall(address,uint256,bytes,bytes32)": FunctionFragment; + "withdrawAndRevert(address,uint256,bytes,bytes32)": FunctionFragment; "zetaToken()": FunctionFragment; }; @@ -42,6 +43,7 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { | "receiveTokens" | "withdraw" | "withdrawAndCall" + | "withdrawAndRevert" | "zetaToken" ): FunctionFragment; @@ -67,6 +69,15 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { PromiseOrValue ] ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; @@ -79,15 +90,21 @@ export interface ZetaConnectorNewBaseInterface extends utils.Interface { functionFragment: "withdrawAndCall", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; events: { "Withdraw(address,uint256)": EventFragment; "WithdrawAndCall(address,uint256,bytes)": EventFragment; + "WithdrawAndRevert(address,uint256,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; getEvent(nameOrSignatureOrTopic: "WithdrawAndCall"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndRevert"): EventFragment; } export interface WithdrawEventObject { @@ -113,6 +130,19 @@ export type WithdrawAndCallEvent = TypedEvent< export type WithdrawAndCallEventFilter = TypedEventFilter; +export interface WithdrawAndRevertEventObject { + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndRevertEvent = TypedEvent< + [string, BigNumber, string], + WithdrawAndRevertEventObject +>; + +export type WithdrawAndRevertEventFilter = + TypedEventFilter; + export interface ZetaConnectorNewBase extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -162,6 +192,14 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise<[string]>; }; @@ -187,6 +225,14 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; callStatic: { @@ -212,6 +258,14 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: CallOverrides ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; @@ -235,6 +289,17 @@ export interface ZetaConnectorNewBase extends BaseContract { amount?: null, data?: null ): WithdrawAndCallEventFilter; + + "WithdrawAndRevert(address,uint256,bytes)"( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + WithdrawAndRevert( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; }; estimateGas: { @@ -260,6 +325,14 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; @@ -286,6 +359,14 @@ export interface ZetaConnectorNewBase extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; } diff --git a/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts b/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts index 426bfefe6..60cceb56c 100644 --- a/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts +++ b/typechain-types/contracts/prototypes/evm/ZetaConnectorNonNative.ts @@ -33,6 +33,7 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { "receiveTokens(uint256)": FunctionFragment; "withdraw(address,uint256,bytes32)": FunctionFragment; "withdrawAndCall(address,uint256,bytes,bytes32)": FunctionFragment; + "withdrawAndRevert(address,uint256,bytes,bytes32)": FunctionFragment; "zetaToken()": FunctionFragment; }; @@ -42,6 +43,7 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { | "receiveTokens" | "withdraw" | "withdrawAndCall" + | "withdrawAndRevert" | "zetaToken" ): FunctionFragment; @@ -67,6 +69,15 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { PromiseOrValue ] ): string; + encodeFunctionData( + functionFragment: "withdrawAndRevert", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; encodeFunctionData(functionFragment: "zetaToken", values?: undefined): string; decodeFunctionResult(functionFragment: "gateway", data: BytesLike): Result; @@ -79,15 +90,21 @@ export interface ZetaConnectorNonNativeInterface extends utils.Interface { functionFragment: "withdrawAndCall", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndRevert", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "zetaToken", data: BytesLike): Result; events: { "Withdraw(address,uint256)": EventFragment; "WithdrawAndCall(address,uint256,bytes)": EventFragment; + "WithdrawAndRevert(address,uint256,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Withdraw"): EventFragment; getEvent(nameOrSignatureOrTopic: "WithdrawAndCall"): EventFragment; + getEvent(nameOrSignatureOrTopic: "WithdrawAndRevert"): EventFragment; } export interface WithdrawEventObject { @@ -113,6 +130,19 @@ export type WithdrawAndCallEvent = TypedEvent< export type WithdrawAndCallEventFilter = TypedEventFilter; +export interface WithdrawAndRevertEventObject { + to: string; + amount: BigNumber; + data: string; +} +export type WithdrawAndRevertEvent = TypedEvent< + [string, BigNumber, string], + WithdrawAndRevertEventObject +>; + +export type WithdrawAndRevertEventFilter = + TypedEventFilter; + export interface ZetaConnectorNonNative extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -162,6 +192,14 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise<[string]>; }; @@ -187,6 +225,14 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; callStatic: { @@ -212,6 +258,14 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: CallOverrides ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; @@ -235,6 +289,17 @@ export interface ZetaConnectorNonNative extends BaseContract { amount?: null, data?: null ): WithdrawAndCallEventFilter; + + "WithdrawAndRevert(address,uint256,bytes)"( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; + WithdrawAndRevert( + to?: PromiseOrValue | null, + amount?: null, + data?: null + ): WithdrawAndRevertEventFilter; }; estimateGas: { @@ -260,6 +325,14 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; @@ -286,6 +359,14 @@ export interface ZetaConnectorNonNative extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + withdrawAndRevert( + to: PromiseOrValue, + amount: PromiseOrValue, + data: PromiseOrValue, + internalSendHash: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + zetaToken(overrides?: CallOverrides): Promise; }; } diff --git a/typechain-types/contracts/prototypes/zevm/TestZContract.ts b/typechain-types/contracts/prototypes/zevm/TestZContract.ts index 89fc8331f..52795556d 100644 --- a/typechain-types/contracts/prototypes/zevm/TestZContract.ts +++ b/typechain-types/contracts/prototypes/zevm/TestZContract.ts @@ -88,9 +88,11 @@ export interface TestZContractInterface extends utils.Interface { events: { "ContextData(bytes,address,uint256,address,string)": EventFragment; + "ContextDataRevert(bytes,address,uint256,address,string)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "ContextData"): EventFragment; + getEvent(nameOrSignatureOrTopic: "ContextDataRevert"): EventFragment; } export interface ContextDataEventObject { @@ -107,6 +109,21 @@ export type ContextDataEvent = TypedEvent< export type ContextDataEventFilter = TypedEventFilter; +export interface ContextDataRevertEventObject { + origin: string; + sender: string; + chainID: BigNumber; + msgSender: string; + message: string; +} +export type ContextDataRevertEvent = TypedEvent< + [string, string, BigNumber, string, string], + ContextDataRevertEventObject +>; + +export type ContextDataRevertEventFilter = + TypedEventFilter; + export interface TestZContract extends BaseContract { connect(signerOrProvider: Signer | Provider | string): this; attach(addressOrName: string): this; @@ -200,6 +217,21 @@ export interface TestZContract extends BaseContract { msgSender?: null, message?: null ): ContextDataEventFilter; + + "ContextDataRevert(bytes,address,uint256,address,string)"( + origin?: null, + sender?: null, + chainID?: null, + msgSender?: null, + message?: null + ): ContextDataRevertEventFilter; + ContextDataRevert( + origin?: null, + sender?: null, + chainID?: null, + msgSender?: null, + message?: null + ): ContextDataRevertEventFilter; }; estimateGas: { diff --git a/typechain-types/contracts/zevm/WZETA.sol/WETH9.ts b/typechain-types/contracts/zevm/WZETA.sol/WETH9.ts index 910291ae4..5bbb26eee 100644 --- a/typechain-types/contracts/zevm/WZETA.sol/WETH9.ts +++ b/typechain-types/contracts/zevm/WZETA.sol/WETH9.ts @@ -30,43 +30,58 @@ import type { export interface WETH9Interface extends utils.Interface { functions: { - "name()": FunctionFragment; + "allowance(address,address)": FunctionFragment; "approve(address,uint256)": FunctionFragment; - "totalSupply()": FunctionFragment; - "transferFrom(address,address,uint256)": FunctionFragment; - "withdraw(uint256)": FunctionFragment; - "decimals()": FunctionFragment; "balanceOf(address)": FunctionFragment; + "decimals()": FunctionFragment; + "deposit()": FunctionFragment; + "name()": FunctionFragment; "symbol()": FunctionFragment; + "totalSupply()": FunctionFragment; "transfer(address,uint256)": FunctionFragment; - "deposit()": FunctionFragment; - "allowance(address,address)": FunctionFragment; + "transferFrom(address,address,uint256)": FunctionFragment; + "withdraw(uint256)": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: - | "name" + | "allowance" | "approve" - | "totalSupply" - | "transferFrom" - | "withdraw" - | "decimals" | "balanceOf" + | "decimals" + | "deposit" + | "name" | "symbol" + | "totalSupply" | "transfer" - | "deposit" - | "allowance" + | "transferFrom" + | "withdraw" ): FunctionFragment; - encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData( + functionFragment: "allowance", + values: [PromiseOrValue, PromiseOrValue] + ): string; encodeFunctionData( functionFragment: "approve", values: [PromiseOrValue, PromiseOrValue] ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "decimals", values?: undefined): string; + encodeFunctionData(functionFragment: "deposit", values?: undefined): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; encodeFunctionData( functionFragment: "totalSupply", values?: undefined ): string; + encodeFunctionData( + functionFragment: "transfer", + values: [PromiseOrValue, PromiseOrValue] + ): string; encodeFunctionData( functionFragment: "transferFrom", values: [ @@ -79,50 +94,35 @@ export interface WETH9Interface extends utils.Interface { functionFragment: "withdraw", values: [PromiseOrValue] ): string; - encodeFunctionData(functionFragment: "decimals", values?: undefined): string; - encodeFunctionData( - functionFragment: "balanceOf", - values: [PromiseOrValue] - ): string; - encodeFunctionData(functionFragment: "symbol", values?: undefined): string; - encodeFunctionData( - functionFragment: "transfer", - values: [PromiseOrValue, PromiseOrValue] - ): string; - encodeFunctionData(functionFragment: "deposit", values?: undefined): string; - encodeFunctionData( - functionFragment: "allowance", - values: [PromiseOrValue, PromiseOrValue] - ): string; - decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; decodeFunctionResult( functionFragment: "totalSupply", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; decodeFunctionResult( functionFragment: "transferFrom", data: BytesLike ): Result; decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result; events: { "Approval(address,address,uint256)": EventFragment; - "Transfer(address,address,uint256)": EventFragment; "Deposit(address,uint256)": EventFragment; + "Transfer(address,address,uint256)": EventFragment; "Withdrawal(address,uint256)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; - getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; getEvent(nameOrSignatureOrTopic: "Deposit"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; getEvent(nameOrSignatureOrTopic: "Withdrawal"): EventFragment; } @@ -138,6 +138,14 @@ export type ApprovalEvent = TypedEvent< export type ApprovalEventFilter = TypedEventFilter; +export interface DepositEventObject { + dst: string; + wad: BigNumber; +} +export type DepositEvent = TypedEvent<[string, BigNumber], DepositEventObject>; + +export type DepositEventFilter = TypedEventFilter; + export interface TransferEventObject { src: string; dst: string; @@ -150,14 +158,6 @@ export type TransferEvent = TypedEvent< export type TransferEventFilter = TypedEventFilter; -export interface DepositEventObject { - dst: string; - wad: BigNumber; -} -export type DepositEvent = TypedEvent<[string, BigNumber], DepositEventObject>; - -export type DepositEventFilter = TypedEventFilter; - export interface WithdrawalEventObject { src: string; wad: BigNumber; @@ -196,7 +196,11 @@ export interface WETH9 extends BaseContract { removeListener: OnEvent; functions: { - name(overrides?: CallOverrides): Promise<[string]>; + allowance( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[BigNumber]>; approve( guy: PromiseOrValue, @@ -204,47 +208,47 @@ export interface WETH9 extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; - - transferFrom( - src: PromiseOrValue, - dst: PromiseOrValue, - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - decimals(overrides?: CallOverrides): Promise<[number]>; - balanceOf( arg0: PromiseOrValue, overrides?: CallOverrides ): Promise<[BigNumber]>; + decimals(overrides?: CallOverrides): Promise<[number]>; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise<[string]>; + symbol(overrides?: CallOverrides): Promise<[string]>; + totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>; + transfer( dst: PromiseOrValue, wad: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - deposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } + transferFrom( + src: PromiseOrValue, + dst: PromiseOrValue, + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - allowance( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise<[BigNumber]>; + withdraw( + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; }; - name(overrides?: CallOverrides): Promise; + allowance( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; approve( guy: PromiseOrValue, @@ -252,47 +256,47 @@ export interface WETH9 extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - src: PromiseOrValue, - dst: PromiseOrValue, - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - balanceOf( arg0: PromiseOrValue, overrides?: CallOverrides ): Promise; + decimals(overrides?: CallOverrides): Promise; + + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer( dst: PromiseOrValue, wad: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - deposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } + transferFrom( + src: PromiseOrValue, + dst: PromiseOrValue, + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - allowance( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides - ): Promise; + withdraw( + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; callStatic: { - name(overrides?: CallOverrides): Promise; + allowance( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; approve( guy: PromiseOrValue, @@ -300,42 +304,38 @@ export interface WETH9 extends BaseContract { overrides?: CallOverrides ): Promise; - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - src: PromiseOrValue, - dst: PromiseOrValue, - wad: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - withdraw( - wad: PromiseOrValue, - overrides?: CallOverrides - ): Promise; - - decimals(overrides?: CallOverrides): Promise; - balanceOf( arg0: PromiseOrValue, overrides?: CallOverrides ): Promise; + decimals(overrides?: CallOverrides): Promise; + + deposit(overrides?: CallOverrides): Promise; + + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer( dst: PromiseOrValue, wad: PromiseOrValue, overrides?: CallOverrides ): Promise; - deposit(overrides?: CallOverrides): Promise; + transferFrom( + src: PromiseOrValue, + dst: PromiseOrValue, + wad: PromiseOrValue, + overrides?: CallOverrides + ): Promise; - allowance( - arg0: PromiseOrValue, - arg1: PromiseOrValue, + withdraw( + wad: PromiseOrValue, overrides?: CallOverrides - ): Promise; + ): Promise; }; filters: { @@ -350,6 +350,15 @@ export interface WETH9 extends BaseContract { wad?: null ): ApprovalEventFilter; + "Deposit(address,uint256)"( + dst?: PromiseOrValue | null, + wad?: null + ): DepositEventFilter; + Deposit( + dst?: PromiseOrValue | null, + wad?: null + ): DepositEventFilter; + "Transfer(address,address,uint256)"( src?: PromiseOrValue | null, dst?: PromiseOrValue | null, @@ -361,15 +370,6 @@ export interface WETH9 extends BaseContract { wad?: null ): TransferEventFilter; - "Deposit(address,uint256)"( - dst?: PromiseOrValue | null, - wad?: null - ): DepositEventFilter; - Deposit( - dst?: PromiseOrValue | null, - wad?: null - ): DepositEventFilter; - "Withdrawal(address,uint256)"( src?: PromiseOrValue | null, wad?: null @@ -381,7 +381,11 @@ export interface WETH9 extends BaseContract { }; estimateGas: { - name(overrides?: CallOverrides): Promise; + allowance( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; approve( guy: PromiseOrValue, @@ -389,48 +393,48 @@ export interface WETH9 extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - src: PromiseOrValue, - dst: PromiseOrValue, - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + balanceOf( + arg0: PromiseOrValue, + overrides?: CallOverrides ): Promise; decimals(overrides?: CallOverrides): Promise; - balanceOf( - arg0: PromiseOrValue, - overrides?: CallOverrides + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer( dst: PromiseOrValue, wad: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - deposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } + transferFrom( + src: PromiseOrValue, + dst: PromiseOrValue, + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - allowance( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides + withdraw( + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; populateTransaction: { - name(overrides?: CallOverrides): Promise; + allowance( + arg0: PromiseOrValue, + arg1: PromiseOrValue, + overrides?: CallOverrides + ): Promise; approve( guy: PromiseOrValue, @@ -438,43 +442,39 @@ export interface WETH9 extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - totalSupply(overrides?: CallOverrides): Promise; - - transferFrom( - src: PromiseOrValue, - dst: PromiseOrValue, - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } - ): Promise; - - withdraw( - wad: PromiseOrValue, - overrides?: Overrides & { from?: PromiseOrValue } + balanceOf( + arg0: PromiseOrValue, + overrides?: CallOverrides ): Promise; decimals(overrides?: CallOverrides): Promise; - balanceOf( - arg0: PromiseOrValue, - overrides?: CallOverrides + deposit( + overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; + name(overrides?: CallOverrides): Promise; + symbol(overrides?: CallOverrides): Promise; + totalSupply(overrides?: CallOverrides): Promise; + transfer( dst: PromiseOrValue, wad: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - deposit( - overrides?: PayableOverrides & { from?: PromiseOrValue } + transferFrom( + src: PromiseOrValue, + dst: PromiseOrValue, + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - allowance( - arg0: PromiseOrValue, - arg1: PromiseOrValue, - overrides?: CallOverrides + withdraw( + wad: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } ): Promise; }; } diff --git a/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts b/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts index 5929138bf..3c367941c 100644 --- a/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/GatewayEVMUpgradeTest__factory.ts @@ -700,7 +700,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220532e37c63a109f68316d1edcf713668fa374caec4a6df094fdf3d791e725c6d464736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c613c44610081600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854634868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207a620a8f5e1407bdf259d6a98d79803d9d2c249529f99712b2a74e1bc0a940a664736f6c63430008070033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts b/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts index baa4a41e4..9b9151fff 100644 --- a/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/GatewayEVM__factory.ts @@ -675,7 +675,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613c4462000243600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108786611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122084f923c76738030742931af51a40f0c0a7a6020c4d94ff93e54b3d756ce2e8b864736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613c4462000243600039600081816109a701528181610a3601528181610da001528181610e2f015261118f0152613c446000f3fe6080604052600436106101355760003560e01c806357bec62f116100ab578063ae7a3a6f1161006f578063ae7a3a6f146103a2578063b8969bd4146103cb578063dda79b75146103f4578063f2fde38b1461041f578063f340fa0114610448578063f45346dc1461046457610135565b806357bec62f146102e15780635b1125911461030c578063715018a6146103375780638c6f037f1461034e5780638da5cb5b1461037757610135565b806335c018db116100fd57806335c018db146102035780633659cfe61461021f578063485cc955146102485780634f1ef286146102715780635131ab591461028d57806352d1902d146102b657610135565b806310188aef1461013a5780631b8b921d146101635780631cff79cd1461018c57806321e093b1146101bc57806329c59b5d146101e7575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612b28565b61048d565b005b34801561016f57600080fd5b5061018a60048036038101906101859190612c1d565b6105c0565b005b6101a660048036038101906101a19190612c1d565b61062c565b6040516101b391906132d3565b60405180910390f35b3480156101c857600080fd5b506101d161069a565b6040516101de91906131f0565b60405180910390f35b61020160048036038101906101fc9190612c1d565b6106c0565b005b61021d60048036038101906102189190612c1d565b61083a565b005b34801561022b57600080fd5b5061024660048036038101906102419190612b28565b6109a5565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b55565b610b2e565b005b61028b60048036038101906102869190612c7d565b610d9e565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b95565b610edb565b005b3480156102c257600080fd5b506102cb61118b565b6040516102d89190613294565b60405180910390f35b3480156102ed57600080fd5b506102f6611244565b60405161030391906131f0565b60405180910390f35b34801561031857600080fd5b5061032161126a565b60405161032e91906131f0565b60405180910390f35b34801561034357600080fd5b5061034c611290565b005b34801561035a57600080fd5b5061037560048036038101906103709190612d2c565b6112a4565b005b34801561038357600080fd5b5061038c61135c565b60405161039991906131f0565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c49190612b28565b611386565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190612b95565b6114b9565b005b34801561040057600080fd5b5061040961160c565b60405161041691906131f0565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612b28565b611632565b005b610462600480360381019061045d9190612b28565b6116b6565b005b34801561047057600080fd5b5061048b60048036038101906104869190612cd9565b61182a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610515576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561057c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde3848460405161061f9291906132af565b60405180910390a3505050565b6060600061063b8585856118dc565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34868660405161068793929190613589565b60405180910390a2809150509392505050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003414156106fb576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610743906131db565b60006040518083038185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b505090506000151581151514156107c8576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4346000878760405161082c949392919061350d565b60405180910390a350505050565b6000808473ffffffffffffffffffffffffffffffffffffffff1634604051610861906131db565b60006040518083038185875af1925050503d806000811461089e576040519150601f19603f3d011682016040523d82523d6000602084013e6108a3565b606091505b5091509150816108df576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16638fcaa0b585856040518363ffffffff1660e01b815260040161091a9291906132af565b600060405180830381600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fd5d7616b1678354a0dea9d7e57e6a090bff5babe9f8d6381fdbad16e89ba311c34868660405161099693929190613589565b60405180910390a25050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a73611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090613372565b60405180910390fd5b610ad2816119ea565b610b2b81600067ffffffffffffffff811115610af157610af061374a565b5b6040519080825280601f01601f191660200182016040528015610b235781602001600182028036833780820191505090505b5060006119f5565b50565b60008060019054906101000a900460ff16159050808015610b5f5750600160008054906101000a900460ff1660ff16105b80610b8c5750610b6e30611b72565b158015610b8b5750600160008054906101000a900460ff1660ff16145b5b610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906133f2565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610c08576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c6f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ca6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cae611b95565b610cb6611bee565b610cbe611c3f565b8260fc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160fe60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610d995760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610d9091906132f5565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613352565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e6c611993565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990613372565b60405180910390fd5b610ecb826119ea565b610ed7828260016119f5565b5050565b610ee3611c98565b6000831415610f1e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f288585611ce8565b610f5e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663095ea7b385856040518363ffffffff1660e01b8152600401610f9992919061326b565b602060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190612db4565b611021576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061102e8584846118dc565b905061103a8686611ce8565b611070576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ab91906131f0565b60206040518083038186803b1580156110c357600080fd5b505afa1580156110d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fb9190612e0e565b90506000811115611111576111108782611d80565b5b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161117293929190613589565b60405180910390a35050611184611f6a565b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461121b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611212906133b2565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611298611f74565b6112a26000611ff2565b565b60008414156112df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ea3384866120b8565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48686868660405161134d949392919061350d565b60405180910390a35050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461140e576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611475576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c1611c98565b60008314156114fc576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152784848773ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff16638fcaa0b583836040518363ffffffff1660e01b81526004016115629291906132af565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f723fc7be2448075379e4fdf1e6bf5fead954d2668d2da05dcb44ccfec4beeda78585856040516115f593929190613589565b60405180910390a3611605611f6a565b5050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61163a611f74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613332565b60405180910390fd5b6116b381611ff2565b50565b60003414156116f1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060fc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051611739906131db565b60006040518083038185875af1925050503d8060008114611776576040519150601f19603f3d011682016040523d82523d6000602084013e61177b565b606091505b505090506000151581151514156117be576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161181e92919061354d565b60405180910390a35050565b6000821415611865576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118703382846120b8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a484846040516118cf92919061354d565b60405180910390a3505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff163486866040516119099291906131ab565b60006040518083038185875af1925050503d8060008114611946576040519150601f19603f3d011682016040523d82523d6000602084013e61194b565b606091505b509150915081611987576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006119c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119f2611f74565b50565b611a217f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612362565b60000160009054906101000a900460ff1615611a4557611a408361236c565b611b6d565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8b57600080fd5b505afa925050508015611abc57506040513d601f19601f82011682018060405250810190611ab99190612de1565b60015b611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af290613412565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b57906133d2565b60405180910390fd5b50611b6c838383612425565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90613492565b60405180910390fd5b611bec612451565b565b600060019054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613492565b60405180910390fd5b565b600060019054906101000a900460ff16611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613492565b60405180910390fd5b611c966124b2565b565b600260c9541415611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd5906134d2565b60405180910390fd5b600260c981905550565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611d26929190613242565b602060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190612db4565b905092915050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f18578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611e3392919061326b565b602060405180830381600087803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b8152600401611ee191906134f2565b600060405180830381600087803b158015611efb57600080fd5b505af1158015611f0f573d6000803e3d6000fd5b50505050611f66565b611f6560fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166122d29092919063ffffffff16565b5b5050565b600160c981905550565b611f7c61250b565b73ffffffffffffffffffffffffffffffffffffffff16611f9a61135c565b73ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613452565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60fe60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561227d5761213b8330838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b360fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161219892919061326b565b602060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612db4565b5060fd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663743e0c9b826040518263ffffffff1660e01b815260040161224691906134f2565b600060405180830381600087803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b505050506122cd565b6122cc8360fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838573ffffffffffffffffffffffffffffffffffffffff16612513909392919063ffffffff16565b5b505050565b6123538363a9059cbb60e01b84846040516024016122f192919061326b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b505050565b6000819050919050565b6000819050919050565b61237581611b72565b6123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab90613432565b60405180910390fd5b806123e17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612358565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61242e83612663565b60008251118061243b5750805b1561244c5761244a83836126b2565b505b505050565b600060019054906101000a900460ff166124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249790613492565b60405180910390fd5b6124b06124ab61250b565b611ff2565b565b600060019054906101000a900460ff16612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f890613492565b60405180910390fd5b600160c981905550565b600033905090565b612596846323b872dd60e01b8585856040516024016125349392919061320b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061259c565b50505050565b60006125fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126df9092919063ffffffff16565b905060008151111561265e578080602001905181019061261e9190612db4565b61265d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612654906134b2565b60405180910390fd5b5b505050565b61266c8161236c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606126d78383604051806060016040528060278152602001613be8602791396126f7565b905092915050565b60606126ee848460008561277d565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff168560405161272191906131c4565b600060405180830381855af49150503d806000811461275c576040519150601f19603f3d011682016040523d82523d6000602084013e612761565b606091505b50915091506127728683838761284a565b925050509392505050565b6060824710156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990613392565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127eb91906131c4565b60006040518083038185875af1925050503d8060008114612828576040519150601f19603f3d011682016040523d82523d6000602084013e61282d565b606091505b509150915061283e878383876128c0565b92505050949350505050565b606083156128ad576000835114156128a55761286585611b72565b6128a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289b90613472565b60405180910390fd5b5b8290506128b8565b6128b78383612936565b5b949350505050565b606083156129235760008351141561291b576128db85612986565b61291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190613472565b60405180910390fd5b5b82905061292e565b61292d83836129a9565b5b949350505050565b6000825111156129495781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297d9190613310565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129bc5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f09190613310565b60405180910390fd5b6000612a0c612a07846135e0565b6135bb565b905082815260208101848484011115612a2857612a27613788565b5b612a338482856136d7565b509392505050565b600081359050612a4a81613b8b565b92915050565b600081519050612a5f81613ba2565b92915050565b600081519050612a7481613bb9565b92915050565b60008083601f840112612a9057612a8f61377e565b5b8235905067ffffffffffffffff811115612aad57612aac613779565b5b602083019150836001820283011115612ac957612ac8613783565b5b9250929050565b600082601f830112612ae557612ae461377e565b5b8135612af58482602086016129f9565b91505092915050565b600081359050612b0d81613bd0565b92915050565b600081519050612b2281613bd0565b92915050565b600060208284031215612b3e57612b3d613792565b5b6000612b4c84828501612a3b565b91505092915050565b60008060408385031215612b6c57612b6b613792565b5b6000612b7a85828601612a3b565b9250506020612b8b85828601612a3b565b9150509250929050565b600080600080600060808688031215612bb157612bb0613792565b5b6000612bbf88828901612a3b565b9550506020612bd088828901612a3b565b9450506040612be188828901612afe565b935050606086013567ffffffffffffffff811115612c0257612c0161378d565b5b612c0e88828901612a7a565b92509250509295509295909350565b600080600060408486031215612c3657612c35613792565b5b6000612c4486828701612a3b565b935050602084013567ffffffffffffffff811115612c6557612c6461378d565b5b612c7186828701612a7a565b92509250509250925092565b60008060408385031215612c9457612c93613792565b5b6000612ca285828601612a3b565b925050602083013567ffffffffffffffff811115612cc357612cc261378d565b5b612ccf85828601612ad0565b9150509250929050565b600080600060608486031215612cf257612cf1613792565b5b6000612d0086828701612a3b565b9350506020612d1186828701612afe565b9250506040612d2286828701612a3b565b9150509250925092565b600080600080600060808688031215612d4857612d47613792565b5b6000612d5688828901612a3b565b9550506020612d6788828901612afe565b9450506040612d7888828901612a3b565b935050606086013567ffffffffffffffff811115612d9957612d9861378d565b5b612da588828901612a7a565b92509250509295509295909350565b600060208284031215612dca57612dc9613792565b5b6000612dd884828501612a50565b91505092915050565b600060208284031215612df757612df6613792565b5b6000612e0584828501612a65565b91505092915050565b600060208284031215612e2457612e23613792565b5b6000612e3284828501612b13565b91505092915050565b612e4481613654565b82525050565b612e5381613672565b82525050565b6000612e658385613627565b9350612e728385846136d7565b612e7b83613797565b840190509392505050565b6000612e928385613638565b9350612e9f8385846136d7565b82840190509392505050565b6000612eb682613611565b612ec08185613627565b9350612ed08185602086016136e6565b612ed981613797565b840191505092915050565b6000612eef82613611565b612ef98185613638565b9350612f098185602086016136e6565b80840191505092915050565b612f1e816136b3565b82525050565b612f2d816136c5565b82525050565b6000612f3e8261361c565b612f488185613643565b9350612f588185602086016136e6565b612f6181613797565b840191505092915050565b6000612f79602683613643565b9150612f84826137a8565b604082019050919050565b6000612f9c602c83613643565b9150612fa7826137f7565b604082019050919050565b6000612fbf602c83613643565b9150612fca82613846565b604082019050919050565b6000612fe2602683613643565b9150612fed82613895565b604082019050919050565b6000613005603883613643565b9150613010826138e4565b604082019050919050565b6000613028602983613643565b915061303382613933565b604082019050919050565b600061304b602e83613643565b915061305682613982565b604082019050919050565b600061306e602e83613643565b9150613079826139d1565b604082019050919050565b6000613091602d83613643565b915061309c82613a20565b604082019050919050565b60006130b4602083613643565b91506130bf82613a6f565b602082019050919050565b60006130d7600083613627565b91506130e282613a98565b600082019050919050565b60006130fa600083613638565b915061310582613a98565b600082019050919050565b600061311d601d83613643565b915061312882613a9b565b602082019050919050565b6000613140602b83613643565b915061314b82613ac4565b604082019050919050565b6000613163602a83613643565b915061316e82613b13565b604082019050919050565b6000613186601f83613643565b915061319182613b62565b602082019050919050565b6131a58161369c565b82525050565b60006131b8828486612e86565b91508190509392505050565b60006131d08284612ee4565b915081905092915050565b60006131e6826130ed565b9150819050919050565b60006020820190506132056000830184612e3b565b92915050565b60006060820190506132206000830186612e3b565b61322d6020830185612e3b565b61323a604083018461319c565b949350505050565b60006040820190506132576000830185612e3b565b6132646020830184612f15565b9392505050565b60006040820190506132806000830185612e3b565b61328d602083018461319c565b9392505050565b60006020820190506132a96000830184612e4a565b92915050565b600060208201905081810360008301526132ca818486612e59565b90509392505050565b600060208201905081810360008301526132ed8184612eab565b905092915050565b600060208201905061330a6000830184612f24565b92915050565b6000602082019050818103600083015261332a8184612f33565b905092915050565b6000602082019050818103600083015261334b81612f6c565b9050919050565b6000602082019050818103600083015261336b81612f8f565b9050919050565b6000602082019050818103600083015261338b81612fb2565b9050919050565b600060208201905081810360008301526133ab81612fd5565b9050919050565b600060208201905081810360008301526133cb81612ff8565b9050919050565b600060208201905081810360008301526133eb8161301b565b9050919050565b6000602082019050818103600083015261340b8161303e565b9050919050565b6000602082019050818103600083015261342b81613061565b9050919050565b6000602082019050818103600083015261344b81613084565b9050919050565b6000602082019050818103600083015261346b816130a7565b9050919050565b6000602082019050818103600083015261348b81613110565b9050919050565b600060208201905081810360008301526134ab81613133565b9050919050565b600060208201905081810360008301526134cb81613156565b9050919050565b600060208201905081810360008301526134eb81613179565b9050919050565b6000602082019050613507600083018461319c565b92915050565b6000606082019050613522600083018761319c565b61352f6020830186612e3b565b8181036040830152613542818486612e59565b905095945050505050565b6000606082019050613562600083018561319c565b61356f6020830184612e3b565b8181036040830152613580816130ca565b90509392505050565b600060408201905061359e600083018661319c565b81810360208301526135b1818486612e59565b9050949350505050565b60006135c56135d6565b90506135d18282613719565b919050565b6000604051905090565b600067ffffffffffffffff8211156135fb576135fa61374a565b5b61360482613797565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061365f8261367c565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006136be8261369c565b9050919050565b60006136d0826136a6565b9050919050565b82818337600083830152505050565b60005b838110156137045780820151818401526020810190506136e9565b83811115613713576000848401525b50505050565b61372282613797565b810181811067ffffffffffffffff821117156137415761374061374a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613b9481613654565b8114613b9f57600080fd5b50565b613bab81613666565b8114613bb657600080fd5b50565b613bc281613672565b8114613bcd57600080fd5b50565b613bd98161369c565b8114613be457600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220062def546691dc60b8b2347c044e9cea9bd00dadb4eab14ae756bd185359a69964736f6c63430008070033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts b/typechain-types/factories/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts index f92fb1eb4..58b48916a 100644 --- a/typechain-types/factories/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts @@ -122,6 +122,25 @@ const _abi = [ name: "ReceivedPayable", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "ReceivedRevert", + type: "event", + }, ] as const; export class IReceiverEVMEvents__factory { diff --git a/typechain-types/factories/contracts/prototypes/evm/ReceiverEVM__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ReceiverEVM__factory.ts index a5587719a..b964a1fe3 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ReceiverEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ReceiverEVM__factory.ts @@ -10,6 +10,11 @@ import type { } from "../../../../contracts/prototypes/evm/ReceiverEVM"; const _abi = [ + { + inputs: [], + name: "ZeroAmount", + type: "error", + }, { anonymous: false, inputs: [ @@ -122,6 +127,42 @@ const _abi = [ name: "ReceivedPayable", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "ReceivedRevert", + type: "event", + }, + { + stateMutability: "payable", + type: "fallback", + }, + { + inputs: [ + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "onRevert", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ { @@ -145,6 +186,29 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "address", + name: "token", + type: "address", + }, + { + internalType: "address", + name: "destination", + type: "address", + }, + ], + name: "receiveERC20Partial", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "receiveNoParams", @@ -198,10 +262,14 @@ const _abi = [ stateMutability: "payable", type: "function", }, + { + stateMutability: "payable", + type: "receive", + }, ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b5061108a806100206000396000f3fe60806040526004361061003f5760003560e01c8063357fc5a2146100445780636ed701691461006d578063e04d4f9714610084578063f05b6abf146100a0575b600080fd5b34801561005057600080fd5b5061006b6004803603810190610066919061085a565b6100c9565b005b34801561007957600080fd5b50610082610138565b005b61009e600480360381019061009991906107eb565b610171565b005b3480156100ac57600080fd5b506100c760048036038101906100c29190610733565b6101b5565b005b6100f63382858573ffffffffffffffffffffffffffffffffffffffff166101f7909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af603384848460405161012b9493929190610bb0565b60405180910390a1505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101679190610b0b565b60405180910390a1565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516101a8959493929190610bf5565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516101ea9493929190610b5d565b60405180910390a1505050565b61027a846323b872dd60e01b85858560405160240161021893929190610b26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610280565b50505050565b60006102e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103479092919063ffffffff16565b9050600081511115610342578080602001905181019061030291906107be565b610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033890610cb1565b60405180910390fd5b5b505050565b6060610356848460008561035f565b90509392505050565b6060824710156103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610c71565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516103cd9190610af4565b60006040518083038185875af1925050503d806000811461040a576040519150601f19603f3d011682016040523d82523d6000602084013e61040f565b606091505b50915091506104208783838761042c565b92505050949350505050565b6060831561048f5760008351141561048757610447856104a2565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047d90610c91565b60405180910390fd5b5b82905061049a565b61049983836104c5565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156104d85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c9190610c4f565b60405180910390fd5b600061052861052384610cf6565b610cd1565b9050808382526020820190508285602086028201111561054b5761054a610f23565b5b60005b8581101561059957813567ffffffffffffffff81111561057157610570610f1e565b5b80860161057e89826106f0565b8552602085019450602084019350505060018101905061054e565b5050509392505050565b60006105b66105b184610d22565b610cd1565b905080838252602082019050828560208602820111156105d9576105d8610f23565b5b60005b8581101561060957816105ef888261071e565b8452602084019350602083019250506001810190506105dc565b5050509392505050565b600061062661062184610d4e565b610cd1565b90508281526020810184848401111561064257610641610f28565b5b61064d848285610e7c565b509392505050565b6000813590506106648161100f565b92915050565b600082601f83011261067f5761067e610f1e565b5b813561068f848260208601610515565b91505092915050565b600082601f8301126106ad576106ac610f1e565b5b81356106bd8482602086016105a3565b91505092915050565b6000813590506106d581611026565b92915050565b6000815190506106ea81611026565b92915050565b600082601f83011261070557610704610f1e565b5b8135610715848260208601610613565b91505092915050565b60008135905061072d8161103d565b92915050565b60008060006060848603121561074c5761074b610f32565b5b600084013567ffffffffffffffff81111561076a57610769610f2d565b5b6107768682870161066a565b935050602084013567ffffffffffffffff81111561079757610796610f2d565b5b6107a386828701610698565b92505060406107b4868287016106c6565b9150509250925092565b6000602082840312156107d4576107d3610f32565b5b60006107e2848285016106db565b91505092915050565b60008060006060848603121561080457610803610f32565b5b600084013567ffffffffffffffff81111561082257610821610f2d565b5b61082e868287016106f0565b935050602061083f8682870161071e565b9250506040610850868287016106c6565b9150509250925092565b60008060006060848603121561087357610872610f32565b5b60006108818682870161071e565b935050602061089286828701610655565b92505060406108a386828701610655565b9150509250925092565b60006108b983836109fb565b905092915050565b60006108cd8383610ad6565b60208301905092915050565b6108e281610e34565b82525050565b60006108f382610d9f565b6108fd8185610de5565b93508360208202850161090f85610d7f565b8060005b8581101561094b578484038952815161092c85826108ad565b945061093783610dcb565b925060208a01995050600181019050610913565b50829750879550505050505092915050565b600061096882610daa565b6109728185610df6565b935061097d83610d8f565b8060005b838110156109ae57815161099588826108c1565b97506109a083610dd8565b925050600181019050610981565b5085935050505092915050565b6109c481610e46565b82525050565b60006109d582610db5565b6109df8185610e07565b93506109ef818560208601610e8b565b80840191505092915050565b6000610a0682610dc0565b610a108185610e12565b9350610a20818560208601610e8b565b610a2981610f37565b840191505092915050565b6000610a3f82610dc0565b610a498185610e23565b9350610a59818560208601610e8b565b610a6281610f37565b840191505092915050565b6000610a7a602683610e23565b9150610a8582610f48565b604082019050919050565b6000610a9d601d83610e23565b9150610aa882610f97565b602082019050919050565b6000610ac0602a83610e23565b9150610acb82610fc0565b604082019050919050565b610adf81610e72565b82525050565b610aee81610e72565b82525050565b6000610b0082846109ca565b915081905092915050565b6000602082019050610b2060008301846108d9565b92915050565b6000606082019050610b3b60008301866108d9565b610b4860208301856108d9565b610b556040830184610ae5565b949350505050565b6000608082019050610b7260008301876108d9565b8181036020830152610b8481866108e8565b90508181036040830152610b98818561095d565b9050610ba760608301846109bb565b95945050505050565b6000608082019050610bc560008301876108d9565b610bd26020830186610ae5565b610bdf60408301856108d9565b610bec60608301846108d9565b95945050505050565b600060a082019050610c0a60008301886108d9565b610c176020830187610ae5565b8181036040830152610c298186610a34565b9050610c386060830185610ae5565b610c4560808301846109bb565b9695505050505050565b60006020820190508181036000830152610c698184610a34565b905092915050565b60006020820190508181036000830152610c8a81610a6d565b9050919050565b60006020820190508181036000830152610caa81610a90565b9050919050565b60006020820190508181036000830152610cca81610ab3565b9050919050565b6000610cdb610cec565b9050610ce78282610ebe565b919050565b6000604051905090565b600067ffffffffffffffff821115610d1157610d10610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d3d57610d3c610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d6957610d68610eef565b5b610d7282610f37565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610e3f82610e52565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610ea9578082015181840152602081019050610e8e565b83811115610eb8576000848401525b50505050565b610ec782610f37565b810181811067ffffffffffffffff82111715610ee657610ee5610eef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61101881610e34565b811461102357600080fd5b50565b61102f81610e46565b811461103a57600080fd5b50565b61104681610e72565b811461105157600080fd5b5056fea264697066735822122051bc1e54f38c77a2494563adb3467b39c2fd6e537d1dc0ced5a09c32d03b765064736f6c63430008070033"; + "0x608060405234801561001057600080fd5b506001600081905550611453806100286000396000f3fe6080604052600436106100595760003560e01c8063357fc5a2146100625780636ed701691461008b5780638fcaa0b5146100a2578063c5131691146100cb578063e04d4f97146100f4578063f05b6abf1461011057610060565b3661006057005b005b34801561006e57600080fd5b5061008960048036038101906100849190610ae2565b610139565b005b34801561009757600080fd5b506100a06101b8565b005b3480156100ae57600080fd5b506100c960048036038101906100c49190610a26565b6101f1565b005b3480156100d757600080fd5b506100f260048036038101906100ed9190610ae2565b610230565b005b61010e60048036038101906101099190610a73565b6102fc565b005b34801561011c57600080fd5b506101376004803603810190610132919061096e565b610340565b005b610141610382565b61016e3382858573ffffffffffffffffffffffffffffffffffffffff166103d2909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60338484846040516101a39493929190610eba565b60405180910390a16101b361045b565b505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101e79190610de3565b60405180910390a1565b7f0d3f65f00e631663aa85c96330b5c7a83bb29af3630c0063776f985edc3037aa33838360405161022493929190610e88565b60405180910390a15050565b610238610382565b6000600284610247919061116f565b90506000811415610284576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102b13383838673ffffffffffffffffffffffffffffffffffffffff166103d2909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60338285856040516102e69493929190610eba565b60405180910390a1506102f761045b565b505050565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610333959493929190610eff565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103759493929190610e35565b60405180910390a1505050565b600260005414156103c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bf90610fdb565b60405180910390fd5b6002600081905550565b610455846323b872dd60e01b8585856040516024016103f393929190610dfe565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610465565b50505050565b6001600081905550565b60006104c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661052c9092919063ffffffff16565b905060008151111561052757808060200190518101906104e791906109f9565b610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051d90610fbb565b60405180910390fd5b5b505050565b606061053b8484600085610544565b90509392505050565b606082471015610589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058090610f7b565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516105b29190610dcc565b60006040518083038185875af1925050503d80600081146105ef576040519150601f19603f3d011682016040523d82523d6000602084013e6105f4565b606091505b509150915061060587838387610611565b92505050949350505050565b606083156106745760008351141561066c5761062c85610687565b61066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066290610f9b565b60405180910390fd5b5b82905061067f565b61067e83836106aa565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106bd5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f19190610f59565b60405180910390fd5b600061070d61070884611020565b610ffb565b905080838252602082019050828560208602820111156107305761072f6112c3565b5b60005b8581101561077e57813567ffffffffffffffff811115610756576107556112be565b5b808601610763898261092b565b85526020850194506020840193505050600181019050610733565b5050509392505050565b600061079b6107968461104c565b610ffb565b905080838252602082019050828560208602820111156107be576107bd6112c3565b5b60005b858110156107ee57816107d48882610959565b8452602084019350602083019250506001810190506107c1565b5050509392505050565b600061080b61080684611078565b610ffb565b905082815260208101848484011115610827576108266112c8565b5b6108328482856111e8565b509392505050565b600081359050610849816113d8565b92915050565b600082601f830112610864576108636112be565b5b81356108748482602086016106fa565b91505092915050565b600082601f830112610892576108916112be565b5b81356108a2848260208601610788565b91505092915050565b6000813590506108ba816113ef565b92915050565b6000815190506108cf816113ef565b92915050565b60008083601f8401126108eb576108ea6112be565b5b8235905067ffffffffffffffff811115610908576109076112b9565b5b602083019150836001820283011115610924576109236112c3565b5b9250929050565b600082601f8301126109405761093f6112be565b5b81356109508482602086016107f8565b91505092915050565b60008135905061096881611406565b92915050565b600080600060608486031215610987576109866112d2565b5b600084013567ffffffffffffffff8111156109a5576109a46112cd565b5b6109b18682870161084f565b935050602084013567ffffffffffffffff8111156109d2576109d16112cd565b5b6109de8682870161087d565b92505060406109ef868287016108ab565b9150509250925092565b600060208284031215610a0f57610a0e6112d2565b5b6000610a1d848285016108c0565b91505092915050565b60008060208385031215610a3d57610a3c6112d2565b5b600083013567ffffffffffffffff811115610a5b57610a5a6112cd565b5b610a67858286016108d5565b92509250509250929050565b600080600060608486031215610a8c57610a8b6112d2565b5b600084013567ffffffffffffffff811115610aaa57610aa96112cd565b5b610ab68682870161092b565b9350506020610ac786828701610959565b9250506040610ad8868287016108ab565b9150509250925092565b600080600060608486031215610afb57610afa6112d2565b5b6000610b0986828701610959565b9350506020610b1a8682870161083a565b9250506040610b2b8682870161083a565b9150509250925092565b6000610b418383610cb0565b905092915050565b6000610b558383610dae565b60208301905092915050565b610b6a816111a0565b82525050565b6000610b7b826110c9565b610b85818561110f565b935083602082028501610b97856110a9565b8060005b85811015610bd35784840389528151610bb48582610b35565b9450610bbf836110f5565b925060208a01995050600181019050610b9b565b50829750879550505050505092915050565b6000610bf0826110d4565b610bfa8185611120565b9350610c05836110b9565b8060005b83811015610c36578151610c1d8882610b49565b9750610c2883611102565b925050600181019050610c09565b5085935050505092915050565b610c4c816111b2565b82525050565b6000610c5e8385611131565b9350610c6b8385846111e8565b610c74836112d7565b840190509392505050565b6000610c8a826110df565b610c948185611142565b9350610ca48185602086016111f7565b80840191505092915050565b6000610cbb826110ea565b610cc5818561114d565b9350610cd58185602086016111f7565b610cde816112d7565b840191505092915050565b6000610cf4826110ea565b610cfe818561115e565b9350610d0e8185602086016111f7565b610d17816112d7565b840191505092915050565b6000610d2f60268361115e565b9150610d3a826112e8565b604082019050919050565b6000610d52601d8361115e565b9150610d5d82611337565b602082019050919050565b6000610d75602a8361115e565b9150610d8082611360565b604082019050919050565b6000610d98601f8361115e565b9150610da3826113af565b602082019050919050565b610db7816111de565b82525050565b610dc6816111de565b82525050565b6000610dd88284610c7f565b915081905092915050565b6000602082019050610df86000830184610b61565b92915050565b6000606082019050610e136000830186610b61565b610e206020830185610b61565b610e2d6040830184610dbd565b949350505050565b6000608082019050610e4a6000830187610b61565b8181036020830152610e5c8186610b70565b90508181036040830152610e708185610be5565b9050610e7f6060830184610c43565b95945050505050565b6000604082019050610e9d6000830186610b61565b8181036020830152610eb0818486610c52565b9050949350505050565b6000608082019050610ecf6000830187610b61565b610edc6020830186610dbd565b610ee96040830185610b61565b610ef66060830184610b61565b95945050505050565b600060a082019050610f146000830188610b61565b610f216020830187610dbd565b8181036040830152610f338186610ce9565b9050610f426060830185610dbd565b610f4f6080830184610c43565b9695505050505050565b60006020820190508181036000830152610f738184610ce9565b905092915050565b60006020820190508181036000830152610f9481610d22565b9050919050565b60006020820190508181036000830152610fb481610d45565b9050919050565b60006020820190508181036000830152610fd481610d68565b9050919050565b60006020820190508181036000830152610ff481610d8b565b9050919050565b6000611005611016565b9050611011828261122a565b919050565b6000604051905090565b600067ffffffffffffffff82111561103b5761103a61128a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156110675761106661128a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156110935761109261128a565b5b61109c826112d7565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061117a826111de565b9150611185836111de565b9250826111955761119461125b565b5b828204905092915050565b60006111ab826111be565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156112155780820151818401526020810190506111fa565b83811115611224576000848401525b50505050565b611233826112d7565b810181811067ffffffffffffffff821117156112525761125161128a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6113e1816111a0565b81146113ec57600080fd5b50565b6113f8816111b2565b811461140357600080fd5b50565b61140f816111de565b811461141a57600080fd5b5056fea2646970667358221220806b40b0ed017d4b60c2eaaa0b400159c25423da3eb36986617bf147e45550f364736f6c63430008070033"; type ReceiverEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/TestERC20__factory.ts b/typechain-types/factories/contracts/prototypes/evm/TestERC20__factory.ts index 3db34bce3..51cf50c37 100644 --- a/typechain-types/factories/contracts/prototypes/evm/TestERC20__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/TestERC20__factory.ts @@ -317,7 +317,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220545991303ac9a4f6b3cfc261c565c8e48863d83d13d75ba6df5ddb3ee8e609dd64736f6c63430008070033"; + "0x60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220fcfdc568a663fff3ad57cec6847cf2da019cf465788683cdfa49393f729d6a9f64736f6c63430008070033"; type TestERC20ConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts index 010f89a84..059b97ae7 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNative__factory.ts @@ -75,6 +75,31 @@ const _abi = [ name: "WithdrawAndCall", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndRevert", + type: "event", + }, { inputs: [], name: "gateway", @@ -152,6 +177,34 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "bytes32", + name: "internalSendHash", + type: "bytes32", + }, + ], + name: "withdrawAndRevert", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "zetaToken", @@ -168,7 +221,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b50604051620011f8380380620011f8833981810160405281019062000037919062000170565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a95750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506200020a565b6000815190506200016a81620001f0565b92915050565b600080604083850312156200018a5762000189620001eb565b5b60006200019a8582860162000159565b9250506020620001ad8582860162000159565b9150509250929050565b6000620001c482620001cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001fb81620001b7565b81146200020757600080fd5b50565b60805160601c60a05160601c610f996200025f6000396000818160fb015281816101c00152818161021101528181610293015261037901526000818161019c015281816101ef01526102570152610f996000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063106e62901461005c578063116191b61461007857806321e093b1146100965780635e3e9fef146100b4578063743e0c9b146100d0575b600080fd5b61007660048036038101906100719190610871565b6100ec565b005b61008061019a565b60405161008d9190610bd6565b60405180910390f35b61009e6101be565b6040516100ab9190610b0d565b60405180910390f35b6100ce60048036038101906100c991906108c4565b6101e2565b005b6100ea60048036038101906100e59190610979565b610369565b005b6100f46103c9565b61013f83837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104199092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516101859190610c93565b60405180910390a261019561049f565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6101ea6103c9565b6102557f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104199092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b81526004016102d6959493929190610b5f565b600060405180830381600087803b1580156102f057600080fd5b505af1158015610304573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced85858560405161035293929190610cae565b60405180910390a261036261049f565b5050505050565b6103716103c9565b6103be3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104a9909392919063ffffffff16565b6103c661049f565b50565b6002600054141561040f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040690610c73565b60405180910390fd5b6002600081905550565b61049a8363a9059cbb60e01b8484604051602401610438929190610bad565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610532565b505050565b6001600081905550565b61052c846323b872dd60e01b8585856040516024016104ca93929190610b28565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610532565b50505050565b6000610594826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166105f99092919063ffffffff16565b90506000815111156105f457808060200190518101906105b4919061094c565b6105f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ea90610c53565b60405180910390fd5b5b505050565b60606106088484600085610611565b90509392505050565b606082471015610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d90610c13565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161067f9190610af6565b60006040518083038185875af1925050503d80600081146106bc576040519150601f19603f3d011682016040523d82523d6000602084013e6106c1565b606091505b50915091506106d2878383876106de565b92505050949350505050565b6060831561074157600083511415610739576106f985610754565b610738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072f90610c33565b60405180910390fd5b5b82905061074c565b61074b8383610777565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561078a5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107be9190610bf1565b60405180910390fd5b6000813590506107d681610f07565b92915050565b6000815190506107eb81610f1e565b92915050565b60008135905061080081610f35565b92915050565b60008083601f84011261081c5761081b610df2565b5b8235905067ffffffffffffffff81111561083957610838610ded565b5b60208301915083600182028301111561085557610854610df7565b5b9250929050565b60008135905061086b81610f4c565b92915050565b60008060006060848603121561088a57610889610e01565b5b6000610898868287016107c7565b93505060206108a98682870161085c565b92505060406108ba868287016107f1565b9150509250925092565b6000806000806000608086880312156108e0576108df610e01565b5b60006108ee888289016107c7565b95505060206108ff8882890161085c565b945050604086013567ffffffffffffffff8111156109205761091f610dfc565b5b61092c88828901610806565b9350935050606061093f888289016107f1565b9150509295509295909350565b60006020828403121561096257610961610e01565b5b6000610970848285016107dc565b91505092915050565b60006020828403121561098f5761098e610e01565b5b600061099d8482850161085c565b91505092915050565b6109af81610d23565b82525050565b60006109c18385610cf6565b93506109ce838584610dab565b6109d783610e06565b840190509392505050565b60006109ed82610ce0565b6109f78185610d07565b9350610a07818560208601610dba565b80840191505092915050565b610a1c81610d75565b82525050565b6000610a2d82610ceb565b610a378185610d12565b9350610a47818560208601610dba565b610a5081610e06565b840191505092915050565b6000610a68602683610d12565b9150610a7382610e17565b604082019050919050565b6000610a8b601d83610d12565b9150610a9682610e66565b602082019050919050565b6000610aae602a83610d12565b9150610ab982610e8f565b604082019050919050565b6000610ad1601f83610d12565b9150610adc82610ede565b602082019050919050565b610af081610d6b565b82525050565b6000610b0282846109e2565b915081905092915050565b6000602082019050610b2260008301846109a6565b92915050565b6000606082019050610b3d60008301866109a6565b610b4a60208301856109a6565b610b576040830184610ae7565b949350505050565b6000608082019050610b7460008301886109a6565b610b8160208301876109a6565b610b8e6040830186610ae7565b8181036060830152610ba18184866109b5565b90509695505050505050565b6000604082019050610bc260008301856109a6565b610bcf6020830184610ae7565b9392505050565b6000602082019050610beb6000830184610a13565b92915050565b60006020820190508181036000830152610c0b8184610a22565b905092915050565b60006020820190508181036000830152610c2c81610a5b565b9050919050565b60006020820190508181036000830152610c4c81610a7e565b9050919050565b60006020820190508181036000830152610c6c81610aa1565b9050919050565b60006020820190508181036000830152610c8c81610ac4565b9050919050565b6000602082019050610ca86000830184610ae7565b92915050565b6000604082019050610cc36000830186610ae7565b8181036020830152610cd68184866109b5565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610d2e82610d4b565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610d8082610d87565b9050919050565b6000610d9282610d99565b9050919050565b6000610da482610d4b565b9050919050565b82818337600083830152505050565b60005b83811015610dd8578082015181840152602081019050610dbd565b83811115610de7576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610f1081610d23565b8114610f1b57600080fd5b50565b610f2781610d35565b8114610f3257600080fd5b50565b610f3e81610d41565b8114610f4957600080fd5b50565b610f5581610d6b565b8114610f6057600080fd5b5056fea2646970667358221220803b1b61d9a48929331d7fb799447a2bd4fe5cf7344a4df486f14b980d6769f964736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b50604051620013b3380380620013b3833981810160405281019062000037919062000170565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a95750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506200020a565b6000815190506200016a81620001f0565b92915050565b600080604083850312156200018a5762000189620001eb565b5b60006200019a8582860162000159565b9250506020620001ad8582860162000159565b9150509250929050565b6000620001c482620001cb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001fb81620001b7565b81146200020757600080fd5b50565b60805160601c60a05160601c6111376200027c60003960008181610142015281816101c4015281816102a90152818161036e015281816103bf01528181610441015261051f015260008181610120015281816101880152818161034a0152818161039d015261040501526111376000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c9190610a62565b610113565b005b61009d60048036038101906100989190610a0f565b61029a565b005b6100a7610348565b6040516100b49190610d74565b60405180910390f35b6100c561036c565b6040516100d29190610cab565b60405180910390f35b6100f560048036038101906100f09190610a62565b610390565b005b610111600480360381019061010c9190610b17565b610517565b005b61011b610567565b6101867f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610207959493929190610cfd565b600060405180830381600087803b15801561022157600080fd5b505af1158015610235573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe85858560405161028393929190610e4c565b60405180910390a261029361063d565b5050505050565b6102a2610567565b6102ed83837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b8273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103339190610e31565b60405180910390a261034361063d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610398610567565b6104037f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166105b79092919063ffffffff16565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610484959493929190610cfd565b600060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced85858560405161050093929190610e4c565b60405180910390a261051061063d565b5050505050565b6105643330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610647909392919063ffffffff16565b50565b600260005414156105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490610e11565b60405180910390fd5b6002600081905550565b6106388363a9059cbb60e01b84846040516024016105d6929190610d4b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b505050565b6001600081905550565b6106ca846323b872dd60e01b85858560405160240161066893929190610cc6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506106d0565b50505050565b6000610732826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166107979092919063ffffffff16565b905060008151111561079257808060200190518101906107529190610aea565b610791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078890610df1565b60405180910390fd5b5b505050565b60606107a684846000856107af565b90509392505050565b6060824710156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb90610db1565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161081d9190610c94565b60006040518083038185875af1925050503d806000811461085a576040519150601f19603f3d011682016040523d82523d6000602084013e61085f565b606091505b50915091506108708783838761087c565b92505050949350505050565b606083156108df576000835114156108d757610897856108f2565b6108d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cd90610dd1565b60405180910390fd5b5b8290506108ea565b6108e98383610915565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156109285781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c9190610d8f565b60405180910390fd5b600081359050610974816110a5565b92915050565b600081519050610989816110bc565b92915050565b60008135905061099e816110d3565b92915050565b60008083601f8401126109ba576109b9610f90565b5b8235905067ffffffffffffffff8111156109d7576109d6610f8b565b5b6020830191508360018202830111156109f3576109f2610f95565b5b9250929050565b600081359050610a09816110ea565b92915050565b600080600060608486031215610a2857610a27610f9f565b5b6000610a3686828701610965565b9350506020610a47868287016109fa565b9250506040610a588682870161098f565b9150509250925092565b600080600080600060808688031215610a7e57610a7d610f9f565b5b6000610a8c88828901610965565b9550506020610a9d888289016109fa565b945050604086013567ffffffffffffffff811115610abe57610abd610f9a565b5b610aca888289016109a4565b93509350506060610add8882890161098f565b9150509295509295909350565b600060208284031215610b0057610aff610f9f565b5b6000610b0e8482850161097a565b91505092915050565b600060208284031215610b2d57610b2c610f9f565b5b6000610b3b848285016109fa565b91505092915050565b610b4d81610ec1565b82525050565b6000610b5f8385610e94565b9350610b6c838584610f49565b610b7583610fa4565b840190509392505050565b6000610b8b82610e7e565b610b958185610ea5565b9350610ba5818560208601610f58565b80840191505092915050565b610bba81610f13565b82525050565b6000610bcb82610e89565b610bd58185610eb0565b9350610be5818560208601610f58565b610bee81610fa4565b840191505092915050565b6000610c06602683610eb0565b9150610c1182610fb5565b604082019050919050565b6000610c29601d83610eb0565b9150610c3482611004565b602082019050919050565b6000610c4c602a83610eb0565b9150610c578261102d565b604082019050919050565b6000610c6f601f83610eb0565b9150610c7a8261107c565b602082019050919050565b610c8e81610f09565b82525050565b6000610ca08284610b80565b915081905092915050565b6000602082019050610cc06000830184610b44565b92915050565b6000606082019050610cdb6000830186610b44565b610ce86020830185610b44565b610cf56040830184610c85565b949350505050565b6000608082019050610d126000830188610b44565b610d1f6020830187610b44565b610d2c6040830186610c85565b8181036060830152610d3f818486610b53565b90509695505050505050565b6000604082019050610d606000830185610b44565b610d6d6020830184610c85565b9392505050565b6000602082019050610d896000830184610bb1565b92915050565b60006020820190508181036000830152610da98184610bc0565b905092915050565b60006020820190508181036000830152610dca81610bf9565b9050919050565b60006020820190508181036000830152610dea81610c1c565b9050919050565b60006020820190508181036000830152610e0a81610c3f565b9050919050565b60006020820190508181036000830152610e2a81610c62565b9050919050565b6000602082019050610e466000830184610c85565b92915050565b6000604082019050610e616000830186610c85565b8181036020830152610e74818486610b53565b9050949350505050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610ecc82610ee9565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610f1e82610f25565b9050919050565b6000610f3082610f37565b9050919050565b6000610f4282610ee9565b9050919050565b82818337600083830152505050565b60005b83811015610f76578082015181840152602081019050610f5b565b83811115610f85576000848401525b50505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6110ae81610ec1565b81146110b957600080fd5b50565b6110c581610ed3565b81146110d057600080fd5b50565b6110dc81610edf565b81146110e757600080fd5b50565b6110f381610f09565b81146110fe57600080fd5b5056fea26469706673582212200e9dddf368c3ba5db7f48f5e58ca49b68962f70e56e54ab42ef1145f5ce62e6164736f6c63430008070033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts index 642453cd2..d0de9e918 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNewBase__factory.ts @@ -59,6 +59,31 @@ const _abi = [ name: "WithdrawAndCall", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndRevert", + type: "event", + }, { inputs: [], name: "gateway", @@ -136,6 +161,34 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "bytes32", + name: "internalSendHash", + type: "bytes32", + }, + ], + name: "withdrawAndRevert", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "zetaToken", diff --git a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts index cef74498c..053e64b95 100644 --- a/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts +++ b/typechain-types/factories/contracts/prototypes/evm/ZetaConnectorNonNative__factory.ts @@ -75,6 +75,31 @@ const _abi = [ name: "WithdrawAndCall", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "to", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "data", + type: "bytes", + }, + ], + name: "WithdrawAndRevert", + type: "event", + }, { inputs: [], name: "gateway", @@ -152,6 +177,34 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "to", + type: "address", + }, + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "data", + type: "bytes", + }, + { + internalType: "bytes32", + name: "internalSendHash", + type: "bytes32", + }, + ], + name: "withdrawAndRevert", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [], name: "zetaToken", @@ -168,7 +221,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b50604051610c18380380610c1883398181016040528101906100329190610166565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806100a35750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156100da576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506101f4565b600081519050610160816101dd565b92915050565b6000806040838503121561017d5761017c6101d8565b5b600061018b85828601610151565b925050602061019c85828601610151565b9150509250929050565b60006101b1826101b8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101e6816101a6565b81146101f157600080fd5b50565b60805160601c60a05160601c6109d06102486000396000818160f601528181610204015281816102300152818161031b01526103f30152600081816101e00152818161026c01526102df01526109d06000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063106e62901461005c578063116191b61461007857806321e093b1146100965780635e3e9fef146100b4578063743e0c9b146100d0575b600080fd5b61007660048036038101906100719190610570565b6100ec565b005b6100806101de565b60405161008d91906107cd565b60405180910390f35b61009e610202565b6040516100ab9190610704565b60405180910390f35b6100ce60048036038101906100c991906105c3565b610226565b005b6100ea60048036038101906100e5919061064b565b6103f1565b005b6100f4610481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161015193929190610796565b600060405180830381600087803b15801561016b57600080fd5b505af115801561017f573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516101c99190610808565b60405180910390a26101d96104d1565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61022e610481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b81526004016102ab93929190610796565b600060405180830381600087803b1580156102c557600080fd5b505af11580156102d9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161035e95949392919061071f565b600060405180830381600087803b15801561037857600080fd5b505af115801561038c573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516103da93929190610823565b60405180910390a26103ea6104d1565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161044c92919061076d565b600060405180830381600087803b15801561046657600080fd5b505af115801561047a573d6000803e3d6000fd5b5050505050565b600260005414156104c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104be906107e8565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506104ea81610955565b92915050565b6000813590506104ff8161096c565b92915050565b60008083601f84011261051b5761051a610907565b5b8235905067ffffffffffffffff81111561053857610537610902565b5b6020830191508360018202830111156105545761055361090c565b5b9250929050565b60008135905061056a81610983565b92915050565b60008060006060848603121561058957610588610916565b5b6000610597868287016104db565b93505060206105a88682870161055b565b92505060406105b9868287016104f0565b9150509250925092565b6000806000806000608086880312156105df576105de610916565b5b60006105ed888289016104db565b95505060206105fe8882890161055b565b945050604086013567ffffffffffffffff81111561061f5761061e610911565b5b61062b88828901610505565b9350935050606061063e888289016104f0565b9150509295509295909350565b60006020828403121561066157610660610916565b5b600061066f8482850161055b565b91505092915050565b61068181610877565b82525050565b61069081610889565b82525050565b60006106a28385610855565b93506106af8385846108f3565b6106b88361091b565b840190509392505050565b6106cc816108bd565b82525050565b60006106df601f83610866565b91506106ea8261092c565b602082019050919050565b6106fe816108b3565b82525050565b60006020820190506107196000830184610678565b92915050565b60006080820190506107346000830188610678565b6107416020830187610678565b61074e60408301866106f5565b8181036060830152610761818486610696565b90509695505050505050565b60006040820190506107826000830185610678565b61078f60208301846106f5565b9392505050565b60006060820190506107ab6000830186610678565b6107b860208301856106f5565b6107c56040830184610687565b949350505050565b60006020820190506107e260008301846106c3565b92915050565b60006020820190508181036000830152610801816106d2565b9050919050565b600060208201905061081d60008301846106f5565b92915050565b600060408201905061083860008301866106f5565b818103602083015261084b818486610696565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b600061088282610893565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006108c8826108cf565b9050919050565b60006108da826108e1565b9050919050565b60006108ec82610893565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61095e81610877565b811461096957600080fd5b50565b61097581610889565b811461098057600080fd5b50565b61098c816108b3565b811461099757600080fd5b5056fea2646970667358221220e6b6811341e6810863fc582bbf0b3edb30dec963e5ec7c90c02891757d26385764736f6c63430008070033"; + "0x60c060405234801561001057600080fd5b5060405162000e2a38038062000e2a83398181016040528101906100349190610168565b81816001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806100a55750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156100dc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505050506101f6565b600081519050610162816101df565b92915050565b6000806040838503121561017f5761017e6101da565b5b600061018d85828601610153565b925050602061019e85828601610153565b9150509250929050565b60006101b3826101ba565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6101e8816101a8565b81146101f357600080fd5b50565b60805160601c60a05160601c610bc2620002686000396000818161011d01528181610208015281816102e8015281816103f6015281816104220152818161050d01526105e5015260008181610159015281816101cc015281816103d20152818161045e01526104d10152610bc26000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806302d5c89914610067578063106e629014610083578063116191b61461009f57806321e093b1146100bd5780635e3e9fef146100db578063743e0c9b146100f7575b600080fd5b610081600480360381019061007c91906107b5565b610113565b005b61009d60048036038101906100989190610762565b6102de565b005b6100a76103d0565b6040516100b491906109bf565b60405180910390f35b6100c56103f4565b6040516100d291906108f6565b60405180910390f35b6100f560048036038101906100f091906107b5565b610418565b005b610111600480360381019061010c919061083d565b6105e3565b005b61011b610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161019893929190610988565b600060405180830381600087803b1580156101b257600080fd5b505af11580156101c6573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b8969bd47f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b815260040161024b959493929190610911565b600060405180830381600087803b15801561026557600080fd5b505af1158015610279573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fba96f26bdda53eb8c8ba39045dfb4ff39753fbc7a6edcf250a88e75e78d102fe8585856040516102c793929190610a15565b60405180910390a26102d76106c3565b5050505050565b6102e6610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee8484846040518463ffffffff1660e01b815260040161034393929190610988565b600060405180830381600087803b15801561035d57600080fd5b505af1158015610371573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364836040516103bb91906109fa565b60405180910390a26103cb6106c3565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610420610673565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631e458bee7f000000000000000000000000000000000000000000000000000000000000000086846040518463ffffffff1660e01b815260040161049d93929190610988565b600060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635131ab597f0000000000000000000000000000000000000000000000000000000000000000878787876040518663ffffffff1660e01b8152600401610550959493929190610911565b600060405180830381600087803b15801561056a57600080fd5b505af115801561057e573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced8585856040516105cc93929190610a15565b60405180910390a26105dc6106c3565b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc679033836040518363ffffffff1660e01b815260040161063e92919061095f565b600060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b5050505050565b600260005414156106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b0906109da565b60405180910390fd5b6002600081905550565b6001600081905550565b6000813590506106dc81610b47565b92915050565b6000813590506106f181610b5e565b92915050565b60008083601f84011261070d5761070c610af9565b5b8235905067ffffffffffffffff81111561072a57610729610af4565b5b60208301915083600182028301111561074657610745610afe565b5b9250929050565b60008135905061075c81610b75565b92915050565b60008060006060848603121561077b5761077a610b08565b5b6000610789868287016106cd565b935050602061079a8682870161074d565b92505060406107ab868287016106e2565b9150509250925092565b6000806000806000608086880312156107d1576107d0610b08565b5b60006107df888289016106cd565b95505060206107f08882890161074d565b945050604086013567ffffffffffffffff81111561081157610810610b03565b5b61081d888289016106f7565b93509350506060610830888289016106e2565b9150509295509295909350565b60006020828403121561085357610852610b08565b5b60006108618482850161074d565b91505092915050565b61087381610a69565b82525050565b61088281610a7b565b82525050565b60006108948385610a47565b93506108a1838584610ae5565b6108aa83610b0d565b840190509392505050565b6108be81610aaf565b82525050565b60006108d1601f83610a58565b91506108dc82610b1e565b602082019050919050565b6108f081610aa5565b82525050565b600060208201905061090b600083018461086a565b92915050565b6000608082019050610926600083018861086a565b610933602083018761086a565b61094060408301866108e7565b8181036060830152610953818486610888565b90509695505050505050565b6000604082019050610974600083018561086a565b61098160208301846108e7565b9392505050565b600060608201905061099d600083018661086a565b6109aa60208301856108e7565b6109b76040830184610879565b949350505050565b60006020820190506109d460008301846108b5565b92915050565b600060208201905081810360008301526109f3816108c4565b9050919050565b6000602082019050610a0f60008301846108e7565b92915050565b6000604082019050610a2a60008301866108e7565b8181036020830152610a3d818486610888565b9050949350505050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610a7482610a85565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610aba82610ac1565b9050919050565b6000610acc82610ad3565b9050919050565b6000610ade82610a85565b9050919050565b82818337600083830152505050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610b5081610a69565b8114610b5b57600080fd5b50565b610b6781610a7b565b8114610b7257600080fd5b50565b610b7e81610aa5565b8114610b8957600080fd5b5056fea26469706673582212207419360613ac73b5058589625b8f7b6c4071be5eb2e75aa5b04480ab384dc33b64736f6c63430008070033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts index 114b22798..2ff27a16e 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts @@ -40,6 +40,11 @@ const _abi = [ name: "InvalidTarget", type: "error", }, + { + inputs: [], + name: "OnlyWZETAOrFungible", + type: "error", + }, { inputs: [], name: "WithdrawalFailed", @@ -695,10 +700,14 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + stateMutability: "payable", + type: "receive", + }, ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613d4b6200024360003960008181610a0801528181610a9701528181610ba901528181610c380152610ce80152613d4b6000f3fe60806040526004361061011f5760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610374578063c39aca371461039d578063c4d66de8146103c6578063f2fde38b146103ef578063f45346dc146104185761011f565b806352d1902d146102b55780635af65967146102e0578063715018a6146103095780637993c1e0146103205780638da5cb5b146103495761011f565b80632e1a7d4d116100e75780632e1a7d4d146101f3578063309f50041461021c5780633659cfe6146102455780633ce4a5bc1461026e5780634f1ef286146102995761011f565b80630ac7c44c14610124578063135390f91461014d57806321501a951461017657806321e093b11461019f578063267e75a0146101ca575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190612891565b610441565b005b34801561015957600080fd5b50610174600480360381019061016f919061290d565b6104a8565b005b34801561018257600080fd5b5061019d60048036038101906101989190612b8c565b61059f565b005b3480156101ab57600080fd5b506101b461076e565b6040516101c1919061316c565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec9190612c8a565b610794565b005b3480156101ff57600080fd5b5061021a60048036038101906102159190612c30565b610856565b005b34801561022857600080fd5b50610243600480360381019061023e9190612a20565b610912565b005b34801561025157600080fd5b5061026c6004803603810190610267919061271b565b610a06565b005b34801561027a57600080fd5b50610283610b8f565b604051610290919061316c565b60405180910390f35b6102b360048036038101906102ae9190612748565b610ba7565b005b3480156102c157600080fd5b506102ca610ce4565b6040516102d791906133a3565b60405180910390f35b3480156102ec57600080fd5b5061030760048036038101906103029190612a20565b610d9d565b005b34801561031557600080fd5b5061031e610fcf565b005b34801561032c57600080fd5b506103476004803603810190610342919061297c565b610fe3565b005b34801561035557600080fd5b5061035e6110e0565b60405161036b919061316c565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612ad6565b61110a565b005b3480156103a957600080fd5b506103c460048036038101906103bf9190612ad6565b6111fe565b005b3480156103d257600080fd5b506103ed60048036038101906103e8919061271b565b611430565b005b3480156103fb57600080fd5b506104166004803603810190610411919061271b565b611627565b005b34801561042457600080fd5b5061043f600480360381019061043a91906127e4565b6116ab565b005b610449611867565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610493939291906133be565b60405180910390a26104a36118b7565b505050565b6104b0611867565b60006104bc83836118c1565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561054057600080fd5b505afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190612c5d565b60405161058995949392919061330d565b60405180910390a25061059a6118b7565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610618576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061069157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156106c8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106d28484611bb1565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b8152600401610735959493929190613609565b600060405180830381600087803b15801561074f57600080fd5b505af1158015610763573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61079c611867565b6107ba8373735b14bb79463307aacbed86daf3322b1e6226ab611bb1565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108199190613125565b60405160208183030381529060405286600080888860405161084197969594939291906131be565b60405180910390a26108516118b7565b505050565b61085e611867565b61087c8173735b14bb79463307aacbed86daf3322b1e6226ab611bb1565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108db9190613125565b604051602081830303815290604052846000806040516108ff95949392919061322f565b60405180910390a261090f6118b7565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016109cc9594939291906135b4565b600060405180830381600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90613454565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ad4611dcd565b73ffffffffffffffffffffffffffffffffffffffff1614610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2190613474565b60405180910390fd5b610b3381611e24565b610b8c81600067ffffffffffffffff811115610b5257610b516138ce565b5b6040519080825280601f01601f191660200182016040528015610b845781602001600182028036833780820191505090505b506000611e2f565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d90613454565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c75611dcd565b73ffffffffffffffffffffffffffffffffffffffff1614610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc290613474565b60405180910390fd5b610cd482611e24565b610ce082826001611e2f565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90613494565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e8f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610ec6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610f0192919061337a565b602060405180830381600087803b158015610f1b57600080fd5b505af1158015610f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f539190612837565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610f959594939291906135b4565b600060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b50505050505050505050565b610fd7611fac565b610fe1600061202a565b565b610feb611867565b6000610ff785856118c1565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561107b57600080fd5b505afa15801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190612c5d565b89896040516110c8979695949392919061329c565b60405180910390a2506110d96118b7565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611183576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016111c4959493929190613609565b600060405180830381600087803b1580156111de57600080fd5b505af11580156111f2573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611277576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806112f057503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611327576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161136292919061337a565b602060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b49190612837565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016113f6959493929190613609565b600060405180830381600087803b15801561141057600080fd5b505af1158015611424573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156114615750600160008054906101000a900460ff1660ff16105b8061148e5750611470306120f0565b15801561148d5750600160008054906101000a900460ff1660ff16145b5b6114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c4906134d4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561150a576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611579612113565b61158161216c565b6115896121bd565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156116235760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161161a91906133f7565b60405180910390a15b5050565b61162f611fac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690613434565b60405180910390fd5b6116a88161202a565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611724576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061179d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156117d4576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161180f92919061337a565b602060405180830381600087803b15801561182957600080fd5b505af115801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190612837565b50505050565b600260c95414156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490613594565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b15801561190b57600080fd5b505afa15801561191f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194391906127a4565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b815260040161199893929190613187565b602060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ea9190612837565b611a20576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611a5d93929190613187565b602060405180830381600087803b158015611a7757600080fd5b505af1158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf9190612837565b611ae5576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611b1e919061365e565b602060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b709190612837565b611ba6576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611c1093929190613187565b602060405180830381600087803b158015611c2a57600080fd5b505af1158015611c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c629190612837565b611c98576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611cf3919061365e565b600060405180830381600087803b158015611d0d57600080fd5b505af1158015611d21573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611d4b90613157565b60006040518083038185875af1925050503d8060008114611d88576040519150601f19603f3d011682016040523d82523d6000602084013e611d8d565b606091505b5050905080611dc8576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611dfb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612216565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e2c611fac565b50565b611e5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612220565b60000160009054906101000a900460ff1615611e7f57611e7a8361222a565b611fa7565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec557600080fd5b505afa925050508015611ef657506040513d601f19601f82011682018060405250810190611ef39190612864565b60015b611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c906134f4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f91906134b4565b60405180910390fd5b50611fa68383836122e3565b5b505050565b611fb461230f565b73ffffffffffffffffffffffffffffffffffffffff16611fd26110e0565b73ffffffffffffffffffffffffffffffffffffffff1614612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90613534565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990613574565b60405180910390fd5b61216a612317565b565b600060019054906101000a900460ff166121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290613574565b60405180910390fd5b565b600060019054906101000a900460ff1661220c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220390613574565b60405180910390fd5b612214612378565b565b6000819050919050565b6000819050919050565b612233816120f0565b612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990613514565b60405180910390fd5b8061229f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612216565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122ec836123d1565b6000825111806122f95750805b1561230a576123088383612420565b505b505050565b600033905090565b600060019054906101000a900460ff16612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90613574565b60405180910390fd5b61237661237161230f565b61202a565b565b600060019054906101000a900460ff166123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90613574565b60405180910390fd5b600160c981905550565b6123da8161222a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606124458383604051806060016040528060278152602001613cef6027913961244d565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516124779190613140565b600060405180830381855af49150503d80600081146124b2576040519150601f19603f3d011682016040523d82523d6000602084013e6124b7565b606091505b50915091506124c8868383876124d3565b925050509392505050565b606083156125365760008351141561252e576124ee856120f0565b61252d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252490613554565b60405180910390fd5b5b829050612541565b6125408383612549565b5b949350505050565b60008251111561255c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125909190613412565b60405180910390fd5b60006125ac6125a78461369e565b613679565b9050828152602081018484840111156125c8576125c761391b565b5b6125d3848285613837565b509392505050565b6000813590506125ea81613c92565b92915050565b6000815190506125ff81613c92565b92915050565b60008151905061261481613ca9565b92915050565b60008151905061262981613cc0565b92915050565b60008083601f84011261264557612644613907565b5b8235905067ffffffffffffffff81111561266257612661613902565b5b60208301915083600182028301111561267e5761267d613916565b5b9250929050565b600082601f83011261269a57612699613907565b5b81356126aa848260208601612599565b91505092915050565b6000606082840312156126c9576126c861390c565b5b81905092915050565b6000606082840312156126e8576126e761390c565b5b81905092915050565b60008135905061270081613cd7565b92915050565b60008151905061271581613cd7565b92915050565b6000602082840312156127315761273061392a565b5b600061273f848285016125db565b91505092915050565b6000806040838503121561275f5761275e61392a565b5b600061276d858286016125db565b925050602083013567ffffffffffffffff81111561278e5761278d613920565b5b61279a85828601612685565b9150509250929050565b600080604083850312156127bb576127ba61392a565b5b60006127c9858286016125f0565b92505060206127da85828601612706565b9150509250929050565b6000806000606084860312156127fd576127fc61392a565b5b600061280b868287016125db565b935050602061281c868287016126f1565b925050604061282d868287016125db565b9150509250925092565b60006020828403121561284d5761284c61392a565b5b600061285b84828501612605565b91505092915050565b60006020828403121561287a5761287961392a565b5b60006128888482850161261a565b91505092915050565b6000806000604084860312156128aa576128a961392a565b5b600084013567ffffffffffffffff8111156128c8576128c7613920565b5b6128d486828701612685565b935050602084013567ffffffffffffffff8111156128f5576128f4613920565b5b6129018682870161262f565b92509250509250925092565b6000806000606084860312156129265761292561392a565b5b600084013567ffffffffffffffff81111561294457612943613920565b5b61295086828701612685565b9350506020612961868287016126f1565b9250506040612972868287016125db565b9150509250925092565b6000806000806000608086880312156129985761299761392a565b5b600086013567ffffffffffffffff8111156129b6576129b5613920565b5b6129c288828901612685565b95505060206129d3888289016126f1565b94505060406129e4888289016125db565b935050606086013567ffffffffffffffff811115612a0557612a04613920565b5b612a118882890161262f565b92509250509295509295909350565b60008060008060008060a08789031215612a3d57612a3c61392a565b5b600087013567ffffffffffffffff811115612a5b57612a5a613920565b5b612a6789828a016126b3565b9650506020612a7889828a016125db565b9550506040612a8989828a016126f1565b9450506060612a9a89828a016125db565b935050608087013567ffffffffffffffff811115612abb57612aba613920565b5b612ac789828a0161262f565b92509250509295509295509295565b60008060008060008060a08789031215612af357612af261392a565b5b600087013567ffffffffffffffff811115612b1157612b10613920565b5b612b1d89828a016126d2565b9650506020612b2e89828a016125db565b9550506040612b3f89828a016126f1565b9450506060612b5089828a016125db565b935050608087013567ffffffffffffffff811115612b7157612b70613920565b5b612b7d89828a0161262f565b92509250509295509295509295565b600080600080600060808688031215612ba857612ba761392a565b5b600086013567ffffffffffffffff811115612bc657612bc5613920565b5b612bd2888289016126d2565b9550506020612be3888289016126f1565b9450506040612bf4888289016125db565b935050606086013567ffffffffffffffff811115612c1557612c14613920565b5b612c218882890161262f565b92509250509295509295909350565b600060208284031215612c4657612c4561392a565b5b6000612c54848285016126f1565b91505092915050565b600060208284031215612c7357612c7261392a565b5b6000612c8184828501612706565b91505092915050565b600080600060408486031215612ca357612ca261392a565b5b6000612cb1868287016126f1565b935050602084013567ffffffffffffffff811115612cd257612cd1613920565b5b612cde8682870161262f565b92509250509250925092565b612cf3816137b4565b82525050565b612d02816137b4565b82525050565b612d19612d14826137b4565b6138aa565b82525050565b612d28816137d2565b82525050565b6000612d3a83856136e5565b9350612d47838584613837565b612d508361392f565b840190509392505050565b6000612d6783856136f6565b9350612d74838584613837565b612d7d8361392f565b840190509392505050565b6000612d93826136cf565b612d9d81856136f6565b9350612dad818560208601613846565b612db68161392f565b840191505092915050565b6000612dcc826136cf565b612dd68185613707565b9350612de6818560208601613846565b80840191505092915050565b612dfb81613813565b82525050565b612e0a81613825565b82525050565b6000612e1b826136da565b612e258185613712565b9350612e35818560208601613846565b612e3e8161392f565b840191505092915050565b6000612e56602683613712565b9150612e618261394d565b604082019050919050565b6000612e79602c83613712565b9150612e848261399c565b604082019050919050565b6000612e9c602c83613712565b9150612ea7826139eb565b604082019050919050565b6000612ebf603883613712565b9150612eca82613a3a565b604082019050919050565b6000612ee2602983613712565b9150612eed82613a89565b604082019050919050565b6000612f05602e83613712565b9150612f1082613ad8565b604082019050919050565b6000612f28602e83613712565b9150612f3382613b27565b604082019050919050565b6000612f4b602d83613712565b9150612f5682613b76565b604082019050919050565b6000612f6e602083613712565b9150612f7982613bc5565b602082019050919050565b6000612f916000836136f6565b9150612f9c82613bee565b600082019050919050565b6000612fb4600083613707565b9150612fbf82613bee565b600082019050919050565b6000612fd7601d83613712565b9150612fe282613bf1565b602082019050919050565b6000612ffa602b83613712565b915061300582613c1a565b604082019050919050565b600061301d601f83613712565b915061302882613c69565b602082019050919050565b600060608301613046600084018461373a565b8583036000870152613059838284612d2e565b9250505061306a6020840184613723565b6130776020860182612cea565b50613085604084018461379d565b6130926040860182613107565b508091505092915050565b6000606083016130b0600084018461373a565b85830360008701526130c3838284612d2e565b925050506130d46020840184613723565b6130e16020860182612cea565b506130ef604084018461379d565b6130fc6040860182613107565b508091505092915050565b613110816137fc565b82525050565b61311f816137fc565b82525050565b60006131318284612d08565b60148201915081905092915050565b600061314c8284612dc1565b915081905092915050565b600061316282612fa7565b9150819050919050565b60006020820190506131816000830184612cf9565b92915050565b600060608201905061319c6000830186612cf9565b6131a96020830185612cf9565b6131b66040830184613116565b949350505050565b600060c0820190506131d3600083018a612cf9565b81810360208301526131e58189612d88565b90506131f46040830188613116565b6132016060830187612df2565b61320e6080830186612df2565b81810360a0830152613221818486612d5b565b905098975050505050505050565b600060c0820190506132446000830188612cf9565b81810360208301526132568187612d88565b90506132656040830186613116565b6132726060830185612df2565b61327f6080830184612df2565b81810360a083015261329081612f84565b90509695505050505050565b600060c0820190506132b1600083018a612cf9565b81810360208301526132c38189612d88565b90506132d26040830188613116565b6132df6060830187613116565b6132ec6080830186613116565b81810360a08301526132ff818486612d5b565b905098975050505050505050565b600060c0820190506133226000830188612cf9565b81810360208301526133348187612d88565b90506133436040830186613116565b6133506060830185613116565b61335d6080830184613116565b81810360a083015261336e81612f84565b90509695505050505050565b600060408201905061338f6000830185612cf9565b61339c6020830184613116565b9392505050565b60006020820190506133b86000830184612d1f565b92915050565b600060408201905081810360008301526133d88186612d88565b905081810360208301526133ed818486612d5b565b9050949350505050565b600060208201905061340c6000830184612e01565b92915050565b6000602082019050818103600083015261342c8184612e10565b905092915050565b6000602082019050818103600083015261344d81612e49565b9050919050565b6000602082019050818103600083015261346d81612e6c565b9050919050565b6000602082019050818103600083015261348d81612e8f565b9050919050565b600060208201905081810360008301526134ad81612eb2565b9050919050565b600060208201905081810360008301526134cd81612ed5565b9050919050565b600060208201905081810360008301526134ed81612ef8565b9050919050565b6000602082019050818103600083015261350d81612f1b565b9050919050565b6000602082019050818103600083015261352d81612f3e565b9050919050565b6000602082019050818103600083015261354d81612f61565b9050919050565b6000602082019050818103600083015261356d81612fca565b9050919050565b6000602082019050818103600083015261358d81612fed565b9050919050565b600060208201905081810360008301526135ad81613010565b9050919050565b600060808201905081810360008301526135ce8188613033565b90506135dd6020830187612cf9565b6135ea6040830186613116565b81810360608301526135fd818486612d5b565b90509695505050505050565b60006080820190508181036000830152613623818861309d565b90506136326020830187612cf9565b61363f6040830186613116565b8181036060830152613652818486612d5b565b90509695505050505050565b60006020820190506136736000830184613116565b92915050565b6000613683613694565b905061368f8282613879565b919050565b6000604051905090565b600067ffffffffffffffff8211156136b9576136b86138ce565b5b6136c28261392f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061373260208401846125db565b905092915050565b6000808335600160200384360303811261375757613756613925565b5b83810192508235915060208301925067ffffffffffffffff82111561377f5761377e6138fd565b5b60018202360384131561379557613794613911565b5b509250929050565b60006137ac60208401846126f1565b905092915050565b60006137bf826137dc565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061381e826137fc565b9050919050565b600061383082613806565b9050919050565b82818337600083830152505050565b60005b83811015613864578082015181840152602081019050613849565b83811115613873576000848401525b50505050565b6138828261392f565b810181811067ffffffffffffffff821117156138a1576138a06138ce565b5b80604052505050565b60006138b5826138bc565b9050919050565b60006138c782613940565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613c9b816137b4565b8114613ca657600080fd5b50565b613cb2816137c6565b8114613cbd57600080fd5b50565b613cc9816137d2565b8114613cd457600080fd5b50565b613ce0816137fc565b8114613ceb57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f66452d96b0f29cb642f932d3b97697f48dd681a5f7d2af932bf5658decdb88364736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613e6d6200024360003960008181610b2a01528181610bb901528181610ccb01528181610d5a0152610e0a0152613e6d6000f3fe6080604052600436106101235760003560e01c806352d1902d116100a0578063bcf7f32b11610064578063bcf7f32b14610454578063c39aca371461047d578063c4d66de8146104a6578063f2fde38b146104cf578063f45346dc146104f8576101ff565b806352d1902d146103955780635af65967146103c0578063715018a6146103e95780637993c1e0146104005780638da5cb5b14610429576101ff565b80632e1a7d4d116100e75780632e1a7d4d146102d3578063309f5004146102fc5780633659cfe6146103255780633ce4a5bc1461034e5780634f1ef28614610379576101ff565b80630ac7c44c14610204578063135390f91461022d57806321501a951461025657806321e093b11461027f578063267e75a0146102aa576101ff565b366101ff5760fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156101c6575073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156101fd576040517f229930b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561021057600080fd5b5061022b600480360381019061022691906129b3565b610521565b005b34801561023957600080fd5b50610254600480360381019061024f9190612a2f565b610588565b005b34801561026257600080fd5b5061027d60048036038101906102789190612cae565b61067f565b005b34801561028b57600080fd5b5061029461084e565b6040516102a1919061328e565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612dac565b610874565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190612d52565b610957565b005b34801561030857600080fd5b50610323600480360381019061031e9190612b42565b610a34565b005b34801561033157600080fd5b5061034c6004803603810190610347919061283d565b610b28565b005b34801561035a57600080fd5b50610363610cb1565b604051610370919061328e565b60405180910390f35b610393600480360381019061038e919061286a565b610cc9565b005b3480156103a157600080fd5b506103aa610e06565b6040516103b791906134c5565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e29190612b42565b610ebf565b005b3480156103f557600080fd5b506103fe6110f1565b005b34801561040c57600080fd5b5061042760048036038101906104229190612a9e565b611105565b005b34801561043557600080fd5b5061043e611202565b60405161044b919061328e565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190612bf8565b61122c565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612bf8565b611320565b005b3480156104b257600080fd5b506104cd60048036038101906104c8919061283d565b611552565b005b3480156104db57600080fd5b506104f660048036038101906104f1919061283d565b611749565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612906565b6117cd565b005b610529611989565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f848484604051610573939291906134e0565b60405180910390a26105836119d9565b505050565b610590611989565b600061059c83836119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106589190612d7f565b60405161066995949392919061342f565b60405180910390a25061067a6119d9565b505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f8576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061077157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156107a8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b28484611cd3565b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e8660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168786866040518663ffffffff1660e01b815260040161081595949392919061372b565b600060405180830381600087803b15801561082f57600080fd5b505af1158015610843573d6000803e3d6000fd5b505050505050505050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61087c611989565b61089a8373735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab60405160200161091a9190613247565b60405160208183030381529060405286600080888860405161094297969594939291906132e0565b60405180910390a26109526119d9565b505050565b61095f611989565b61097d8173735b14bb79463307aacbed86daf3322b1e6226ab611cd3565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc5771660fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673735b14bb79463307aacbed86daf3322b1e6226ab6040516020016109fd9190613247565b60405160208183030381529060405284600080604051610a21959493929190613351565b60405180910390a2610a316119d9565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b8152600401610aee9594939291906136d6565b600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bf6611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390613596565b60405180910390fd5b610c5581611f46565b610cae81600067ffffffffffffffff811115610c7457610c736139f0565b5b6040519080825280601f01601f191660200182016040528015610ca65781602001600182028036833780820191505090505b506000611f51565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90613576565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97611eef565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de490613596565b60405180910390fd5b610df682611f46565b610e0282826001611f51565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d906135b6565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610fe8576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161102392919061349c565b602060405180830381600087803b15801561103d57600080fd5b505af1158015611051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110759190612959565b508273ffffffffffffffffffffffffffffffffffffffff166369582bee87878786866040518663ffffffff1660e01b81526004016110b79594939291906136d6565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b50505050505050505050565b6110f96120ce565b611103600061214c565b565b61110d611989565b600061111985856119e3565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119d57600080fd5b505afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d59190612d7f565b89896040516111ea97969594939291906133be565b60405180910390a2506111fb6119d9565b5050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b81526004016112e695949392919061372b565b600060405180830381600087803b15801561130057600080fd5b505af1158015611314573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611399576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061141257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611449576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b815260040161148492919061349c565b602060405180830381600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d69190612959565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b815260040161151895949392919061372b565b600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff161590508080156115835750600160008054906101000a900460ff1660ff16105b806115b0575061159230612212565b1580156115af5750600160008054906101000a900460ff1660ff16145b5b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906135f6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561162c576001600060016101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611693576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169b612235565b6116a361228e565b6116ab6122df565b8160fb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117455760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161173c9190613519565b60405180910390a15b5050565b6117516120ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613556565b60405180910390fd5b6117ca8161214c565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611846576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806118bf57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156118f6576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b815260040161193192919061349c565b602060405180830381600087803b15801561194b57600080fd5b505af115801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190612959565b50505050565b600260c95414156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c6906136b6565b60405180910390fd5b600260c981905550565b600160c981905550565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015611a2d57600080fd5b505afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6591906128c6565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b8152600401611aba939291906132a9565b602060405180830381600087803b158015611ad457600080fd5b505af1158015611ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0c9190612959565b611b42576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b8152600401611b7f939291906132a9565b602060405180830381600087803b158015611b9957600080fd5b505af1158015611bad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd19190612959565b611c07576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b8152600401611c409190613780565b602060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190612959565b611cc8576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611d32939291906132a9565b602060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d849190612959565b611dba576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401611e159190613780565b600060405180830381600087803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b5050505060008173ffffffffffffffffffffffffffffffffffffffff1683604051611e6d90613279565b60006040518083038185875af1925050503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5050905080611eea576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6000611f1d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f4e6120ce565b50565b611f7d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b612342565b60000160009054906101000a900460ff1615611fa157611f9c8361234c565b6120c9565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fe757600080fd5b505afa92505050801561201857506040513d601f19601f820116820180604052508101906120159190612986565b60015b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90613616565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906135d6565b60405180910390fd5b506120c8838383612405565b5b505050565b6120d6612431565b73ffffffffffffffffffffffffffffffffffffffff166120f4611202565b73ffffffffffffffffffffffffffffffffffffffff161461214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613656565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227b90613696565b60405180910390fd5b61228c612439565b565b600060019054906101000a900460ff166122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d490613696565b60405180910390fd5b565b600060019054906101000a900460ff1661232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590613696565b60405180910390fd5b61233661249a565b565b6000819050919050565b6000819050919050565b61235581612212565b612394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238b90613636565b60405180910390fd5b806123c17f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b612338565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61240e836124f3565b60008251118061241b5750805b1561242c5761242a8383612542565b505b505050565b600033905090565b600060019054906101000a900460ff16612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613696565b60405180910390fd5b612498612493612431565b61214c565b565b600060019054906101000a900460ff166124e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e090613696565b60405180910390fd5b600160c981905550565b6124fc8161234c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606125678383604051806060016040528060278152602001613e116027913961256f565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516125999190613262565b600060405180830381855af49150503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b50915091506125ea868383876125f5565b925050509392505050565b60608315612658576000835114156126505761261085612212565b61264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613676565b60405180910390fd5b5b829050612663565b612662838361266b565b5b949350505050565b60008251111561267e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b29190613534565b60405180910390fd5b60006126ce6126c9846137c0565b61379b565b9050828152602081018484840111156126ea576126e9613a3d565b5b6126f5848285613959565b509392505050565b60008135905061270c81613db4565b92915050565b60008151905061272181613db4565b92915050565b60008151905061273681613dcb565b92915050565b60008151905061274b81613de2565b92915050565b60008083601f84011261276757612766613a29565b5b8235905067ffffffffffffffff81111561278457612783613a24565b5b6020830191508360018202830111156127a05761279f613a38565b5b9250929050565b600082601f8301126127bc576127bb613a29565b5b81356127cc8482602086016126bb565b91505092915050565b6000606082840312156127eb576127ea613a2e565b5b81905092915050565b60006060828403121561280a57612809613a2e565b5b81905092915050565b60008135905061282281613df9565b92915050565b60008151905061283781613df9565b92915050565b60006020828403121561285357612852613a4c565b5b6000612861848285016126fd565b91505092915050565b6000806040838503121561288157612880613a4c565b5b600061288f858286016126fd565b925050602083013567ffffffffffffffff8111156128b0576128af613a42565b5b6128bc858286016127a7565b9150509250929050565b600080604083850312156128dd576128dc613a4c565b5b60006128eb85828601612712565b92505060206128fc85828601612828565b9150509250929050565b60008060006060848603121561291f5761291e613a4c565b5b600061292d868287016126fd565b935050602061293e86828701612813565b925050604061294f868287016126fd565b9150509250925092565b60006020828403121561296f5761296e613a4c565b5b600061297d84828501612727565b91505092915050565b60006020828403121561299c5761299b613a4c565b5b60006129aa8482850161273c565b91505092915050565b6000806000604084860312156129cc576129cb613a4c565b5b600084013567ffffffffffffffff8111156129ea576129e9613a42565b5b6129f6868287016127a7565b935050602084013567ffffffffffffffff811115612a1757612a16613a42565b5b612a2386828701612751565b92509250509250925092565b600080600060608486031215612a4857612a47613a4c565b5b600084013567ffffffffffffffff811115612a6657612a65613a42565b5b612a72868287016127a7565b9350506020612a8386828701612813565b9250506040612a94868287016126fd565b9150509250925092565b600080600080600060808688031215612aba57612ab9613a4c565b5b600086013567ffffffffffffffff811115612ad857612ad7613a42565b5b612ae4888289016127a7565b9550506020612af588828901612813565b9450506040612b06888289016126fd565b935050606086013567ffffffffffffffff811115612b2757612b26613a42565b5b612b3388828901612751565b92509250509295509295909350565b60008060008060008060a08789031215612b5f57612b5e613a4c565b5b600087013567ffffffffffffffff811115612b7d57612b7c613a42565b5b612b8989828a016127d5565b9650506020612b9a89828a016126fd565b9550506040612bab89828a01612813565b9450506060612bbc89828a016126fd565b935050608087013567ffffffffffffffff811115612bdd57612bdc613a42565b5b612be989828a01612751565b92509250509295509295509295565b60008060008060008060a08789031215612c1557612c14613a4c565b5b600087013567ffffffffffffffff811115612c3357612c32613a42565b5b612c3f89828a016127f4565b9650506020612c5089828a016126fd565b9550506040612c6189828a01612813565b9450506060612c7289828a016126fd565b935050608087013567ffffffffffffffff811115612c9357612c92613a42565b5b612c9f89828a01612751565b92509250509295509295509295565b600080600080600060808688031215612cca57612cc9613a4c565b5b600086013567ffffffffffffffff811115612ce857612ce7613a42565b5b612cf4888289016127f4565b9550506020612d0588828901612813565b9450506040612d16888289016126fd565b935050606086013567ffffffffffffffff811115612d3757612d36613a42565b5b612d4388828901612751565b92509250509295509295909350565b600060208284031215612d6857612d67613a4c565b5b6000612d7684828501612813565b91505092915050565b600060208284031215612d9557612d94613a4c565b5b6000612da384828501612828565b91505092915050565b600080600060408486031215612dc557612dc4613a4c565b5b6000612dd386828701612813565b935050602084013567ffffffffffffffff811115612df457612df3613a42565b5b612e0086828701612751565b92509250509250925092565b612e15816138d6565b82525050565b612e24816138d6565b82525050565b612e3b612e36826138d6565b6139cc565b82525050565b612e4a816138f4565b82525050565b6000612e5c8385613807565b9350612e69838584613959565b612e7283613a51565b840190509392505050565b6000612e898385613818565b9350612e96838584613959565b612e9f83613a51565b840190509392505050565b6000612eb5826137f1565b612ebf8185613818565b9350612ecf818560208601613968565b612ed881613a51565b840191505092915050565b6000612eee826137f1565b612ef88185613829565b9350612f08818560208601613968565b80840191505092915050565b612f1d81613935565b82525050565b612f2c81613947565b82525050565b6000612f3d826137fc565b612f478185613834565b9350612f57818560208601613968565b612f6081613a51565b840191505092915050565b6000612f78602683613834565b9150612f8382613a6f565b604082019050919050565b6000612f9b602c83613834565b9150612fa682613abe565b604082019050919050565b6000612fbe602c83613834565b9150612fc982613b0d565b604082019050919050565b6000612fe1603883613834565b9150612fec82613b5c565b604082019050919050565b6000613004602983613834565b915061300f82613bab565b604082019050919050565b6000613027602e83613834565b915061303282613bfa565b604082019050919050565b600061304a602e83613834565b915061305582613c49565b604082019050919050565b600061306d602d83613834565b915061307882613c98565b604082019050919050565b6000613090602083613834565b915061309b82613ce7565b602082019050919050565b60006130b3600083613818565b91506130be82613d10565b600082019050919050565b60006130d6600083613829565b91506130e182613d10565b600082019050919050565b60006130f9601d83613834565b915061310482613d13565b602082019050919050565b600061311c602b83613834565b915061312782613d3c565b604082019050919050565b600061313f601f83613834565b915061314a82613d8b565b602082019050919050565b600060608301613168600084018461385c565b858303600087015261317b838284612e50565b9250505061318c6020840184613845565b6131996020860182612e0c565b506131a760408401846138bf565b6131b46040860182613229565b508091505092915050565b6000606083016131d2600084018461385c565b85830360008701526131e5838284612e50565b925050506131f66020840184613845565b6132036020860182612e0c565b5061321160408401846138bf565b61321e6040860182613229565b508091505092915050565b6132328161391e565b82525050565b6132418161391e565b82525050565b60006132538284612e2a565b60148201915081905092915050565b600061326e8284612ee3565b915081905092915050565b6000613284826130c9565b9150819050919050565b60006020820190506132a36000830184612e1b565b92915050565b60006060820190506132be6000830186612e1b565b6132cb6020830185612e1b565b6132d86040830184613238565b949350505050565b600060c0820190506132f5600083018a612e1b565b81810360208301526133078189612eaa565b90506133166040830188613238565b6133236060830187612f14565b6133306080830186612f14565b81810360a0830152613343818486612e7d565b905098975050505050505050565b600060c0820190506133666000830188612e1b565b81810360208301526133788187612eaa565b90506133876040830186613238565b6133946060830185612f14565b6133a16080830184612f14565b81810360a08301526133b2816130a6565b90509695505050505050565b600060c0820190506133d3600083018a612e1b565b81810360208301526133e58189612eaa565b90506133f46040830188613238565b6134016060830187613238565b61340e6080830186613238565b81810360a0830152613421818486612e7d565b905098975050505050505050565b600060c0820190506134446000830188612e1b565b81810360208301526134568187612eaa565b90506134656040830186613238565b6134726060830185613238565b61347f6080830184613238565b81810360a0830152613490816130a6565b90509695505050505050565b60006040820190506134b16000830185612e1b565b6134be6020830184613238565b9392505050565b60006020820190506134da6000830184612e41565b92915050565b600060408201905081810360008301526134fa8186612eaa565b9050818103602083015261350f818486612e7d565b9050949350505050565b600060208201905061352e6000830184612f23565b92915050565b6000602082019050818103600083015261354e8184612f32565b905092915050565b6000602082019050818103600083015261356f81612f6b565b9050919050565b6000602082019050818103600083015261358f81612f8e565b9050919050565b600060208201905081810360008301526135af81612fb1565b9050919050565b600060208201905081810360008301526135cf81612fd4565b9050919050565b600060208201905081810360008301526135ef81612ff7565b9050919050565b6000602082019050818103600083015261360f8161301a565b9050919050565b6000602082019050818103600083015261362f8161303d565b9050919050565b6000602082019050818103600083015261364f81613060565b9050919050565b6000602082019050818103600083015261366f81613083565b9050919050565b6000602082019050818103600083015261368f816130ec565b9050919050565b600060208201905081810360008301526136af8161310f565b9050919050565b600060208201905081810360008301526136cf81613132565b9050919050565b600060808201905081810360008301526136f08188613155565b90506136ff6020830187612e1b565b61370c6040830186613238565b818103606083015261371f818486612e7d565b90509695505050505050565b6000608082019050818103600083015261374581886131bf565b90506137546020830187612e1b565b6137616040830186613238565b8181036060830152613774818486612e7d565b90509695505050505050565b60006020820190506137956000830184613238565b92915050565b60006137a56137b6565b90506137b1828261399b565b919050565b6000604051905090565b600067ffffffffffffffff8211156137db576137da6139f0565b5b6137e482613a51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061385460208401846126fd565b905092915050565b6000808335600160200384360303811261387957613878613a47565b5b83810192508235915060208301925067ffffffffffffffff8211156138a1576138a0613a1f565b5b6001820236038413156138b7576138b6613a33565b5b509250929050565b60006138ce6020840184612813565b905092915050565b60006138e1826138fe565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139408261391e565b9050919050565b600061395282613928565b9050919050565b82818337600083830152505050565b60005b8381101561398657808201518184015260208101905061396b565b83811115613995576000848401525b50505050565b6139a482613a51565b810181811067ffffffffffffffff821117156139c3576139c26139f0565b5b80604052505050565b60006139d7826139de565b9050919050565b60006139e982613a62565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613dbd816138d6565b8114613dc857600080fd5b50565b613dd4816138e8565b8114613ddf57600080fd5b50565b613deb816138f4565b8114613df657600080fd5b50565b613e028161391e565b8114613e0d57600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e282ad47b588d26949a07fb7fc6ba46fa9721e07254d668e544a8f2413001c5064736f6c63430008070033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/zevm/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts index bde7160e2..63b3a2717 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/IGatewayZEVM.sol/IGatewayZEVMErrors__factory.ts @@ -35,6 +35,11 @@ const _abi = [ name: "InvalidTarget", type: "error", }, + { + inputs: [], + name: "OnlyWZETAOrFungible", + type: "error", + }, { inputs: [], name: "WithdrawalFailed", diff --git a/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts index ac2734d6f..388b8a3d2 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts @@ -108,7 +108,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea2646970667358221220fd57bf78c5d65dbfce97aa7f4d7757321c1b53a122e7c588ff9fce739d2ac95664736f6c63430008070033"; + "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea264697066735822122041c2abc6b3a41841b90c67bd1f0fcea62676455ba61882c22a78070a8128a5b164736f6c63430008070033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/zevm/TestZContract__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/TestZContract__factory.ts index a5db2e04c..f5385982e 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/TestZContract__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/TestZContract__factory.ts @@ -47,6 +47,47 @@ const _abi = [ name: "ContextData", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "bytes", + name: "origin", + type: "bytes", + }, + { + indexed: false, + internalType: "address", + name: "sender", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "chainID", + type: "uint256", + }, + { + indexed: false, + internalType: "address", + name: "msgSender", + type: "address", + }, + { + indexed: false, + internalType: "string", + name: "message", + type: "string", + }, + ], + name: "ContextDataRevert", + type: "event", + }, + { + stateMutability: "payable", + type: "fallback", + }, { inputs: [ { @@ -137,10 +178,14 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + stateMutability: "payable", + type: "receive", + }, ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b506107cb806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806369582bee1461003b578063de43156e14610057575b600080fd5b61005560048036038101906100509190610331565b610073565b005b610071600480360381019061006c91906103d5565b610100565b005b6060600083839050111561009357828281019061009091906102e8565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e8680600001906100c49190610560565b8860200160208101906100d791906102bb565b896040013533866040516100f0969594939291906104fd565b60405180910390a1505050505050565b6060600083839050111561012057828281019061011d91906102e8565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e8680600001906101519190610560565b88602001602081019061016491906102bb565b8960400135338660405161017d969594939291906104fd565b60405180910390a1505050505050565b60006101a061019b846105e8565b6105c3565b9050828152602081018484840111156101bc576101bb610747565b5b6101c7848285610682565b509392505050565b6000813590506101de81610767565b92915050565b60008083601f8401126101fa576101f9610729565b5b8235905067ffffffffffffffff81111561021757610216610724565b5b6020830191508360018202830111156102335761023261073d565b5b9250929050565b600082601f83011261024f5761024e610729565b5b813561025f84826020860161018d565b91505092915050565b60006060828403121561027e5761027d610733565b5b81905092915050565b60006060828403121561029d5761029c610733565b5b81905092915050565b6000813590506102b58161077e565b92915050565b6000602082840312156102d1576102d0610751565b5b60006102df848285016101cf565b91505092915050565b6000602082840312156102fe576102fd610751565b5b600082013567ffffffffffffffff81111561031c5761031b61074c565b5b6103288482850161023a565b91505092915050565b60008060008060006080868803121561034d5761034c610751565b5b600086013567ffffffffffffffff81111561036b5761036a61074c565b5b61037788828901610268565b9550506020610388888289016101cf565b9450506040610399888289016102a6565b935050606086013567ffffffffffffffff8111156103ba576103b961074c565b5b6103c6888289016101e4565b92509250509295509295909350565b6000806000806000608086880312156103f1576103f0610751565b5b600086013567ffffffffffffffff81111561040f5761040e61074c565b5b61041b88828901610287565b955050602061042c888289016101cf565b945050604061043d888289016102a6565b935050606086013567ffffffffffffffff81111561045e5761045d61074c565b5b61046a888289016101e4565b92509250509295509295909350565b61048281610646565b82525050565b60006104948385610624565b93506104a1838584610682565b6104aa83610756565b840190509392505050565b60006104c082610619565b6104ca8185610635565b93506104da818560208601610691565b6104e381610756565b840191505092915050565b6104f781610678565b82525050565b600060a082019050818103600083015261051881888a610488565b90506105276020830187610479565b61053460408301866104ee565b6105416060830185610479565b818103608083015261055381846104b5565b9050979650505050505050565b6000808335600160200384360303811261057d5761057c610738565b5b80840192508235915067ffffffffffffffff82111561059f5761059e61072e565b5b6020830192506001820236038313156105bb576105ba610742565b5b509250929050565b60006105cd6105de565b90506105d982826106c4565b919050565b6000604051905090565b600067ffffffffffffffff821115610603576106026106f5565b5b61060c82610756565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061065182610658565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156106af578082015181840152602081019050610694565b838111156106be576000848401525b50505050565b6106cd82610756565b810181811067ffffffffffffffff821117156106ec576106eb6106f5565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61077081610646565b811461077b57600080fd5b50565b61078781610678565b811461079257600080fd5b5056fea2646970667358221220996d3660341a1bd04005b32d62cd8d770a9af1acdfbed4e5684f1a111d225cde64736f6c63430008070033"; + "0x608060405234801561001057600080fd5b506107e0806100206000396000f3fe60806040526004361061002d5760003560e01c806369582bee14610036578063de43156e1461005f57610034565b3661003457005b005b34801561004257600080fd5b5061005d60048036038101906100589190610346565b610088565b005b34801561006b57600080fd5b50610086600480360381019061008191906103ea565b610115565b005b606060008383905011156100a85782828101906100a591906102fd565b90505b7ffdc887992b033668833927e252058e468fac0b6bd196d520f09c61b740e999488680600001906100d99190610575565b8860200160208101906100ec91906102d0565b8960400135338660405161010596959493929190610512565b60405180910390a1505050505050565b6060600083839050111561013557828281019061013291906102fd565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e8680600001906101669190610575565b88602001602081019061017991906102d0565b8960400135338660405161019296959493929190610512565b60405180910390a1505050505050565b60006101b56101b0846105fd565b6105d8565b9050828152602081018484840111156101d1576101d061075c565b5b6101dc848285610697565b509392505050565b6000813590506101f38161077c565b92915050565b60008083601f84011261020f5761020e61073e565b5b8235905067ffffffffffffffff81111561022c5761022b610739565b5b60208301915083600182028301111561024857610247610752565b5b9250929050565b600082601f8301126102645761026361073e565b5b81356102748482602086016101a2565b91505092915050565b60006060828403121561029357610292610748565b5b81905092915050565b6000606082840312156102b2576102b1610748565b5b81905092915050565b6000813590506102ca81610793565b92915050565b6000602082840312156102e6576102e5610766565b5b60006102f4848285016101e4565b91505092915050565b60006020828403121561031357610312610766565b5b600082013567ffffffffffffffff81111561033157610330610761565b5b61033d8482850161024f565b91505092915050565b60008060008060006080868803121561036257610361610766565b5b600086013567ffffffffffffffff8111156103805761037f610761565b5b61038c8882890161027d565b955050602061039d888289016101e4565b94505060406103ae888289016102bb565b935050606086013567ffffffffffffffff8111156103cf576103ce610761565b5b6103db888289016101f9565b92509250509295509295909350565b60008060008060006080868803121561040657610405610766565b5b600086013567ffffffffffffffff81111561042457610423610761565b5b6104308882890161029c565b9550506020610441888289016101e4565b9450506040610452888289016102bb565b935050606086013567ffffffffffffffff81111561047357610472610761565b5b61047f888289016101f9565b92509250509295509295909350565b6104978161065b565b82525050565b60006104a98385610639565b93506104b6838584610697565b6104bf8361076b565b840190509392505050565b60006104d58261062e565b6104df818561064a565b93506104ef8185602086016106a6565b6104f88161076b565b840191505092915050565b61050c8161068d565b82525050565b600060a082019050818103600083015261052d81888a61049d565b905061053c602083018761048e565b6105496040830186610503565b610556606083018561048e565b818103608083015261056881846104ca565b9050979650505050505050565b600080833560016020038436030381126105925761059161074d565b5b80840192508235915067ffffffffffffffff8211156105b4576105b3610743565b5b6020830192506001820236038313156105d0576105cf610757565b5b509250929050565b60006105e26105f3565b90506105ee82826106d9565b919050565b6000604051905090565b600067ffffffffffffffff8211156106185761061761070a565b5b6106218261076b565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006106668261066d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156106c45780820151818401526020810190506106a9565b838111156106d3576000848401525b50505050565b6106e28261076b565b810181811067ffffffffffffffff821117156107015761070061070a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6107858161065b565b811461079057600080fd5b50565b61079c8161068d565b81146107a757600080fd5b5056fea2646970667358221220d8ae51f378c28fdd3372175a2a0c40cf07b2f206830500b75e6335c89a39193164736f6c63430008070033"; type TestZContractConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/zevm/WZETA.sol/WETH9__factory.ts b/typechain-types/factories/contracts/zevm/WZETA.sol/WETH9__factory.ts index 5f92826c2..dc7eafac8 100644 --- a/typechain-types/factories/contracts/zevm/WZETA.sol/WETH9__factory.ts +++ b/typechain-types/factories/contracts/zevm/WZETA.sol/WETH9__factory.ts @@ -11,286 +11,293 @@ import type { const _abi = [ { - constant: true, - inputs: [], - name: "name", - outputs: [ + anonymous: false, + inputs: [ { - name: "", - type: "string", + indexed: true, + internalType: "address", + name: "src", + type: "address", }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: false, - inputs: [ { + indexed: true, + internalType: "address", name: "guy", type: "address", }, { + indexed: false, + internalType: "uint256", name: "wad", type: "uint256", }, ], - name: "approve", - outputs: [ - { - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", + name: "Approval", + type: "event", }, { - constant: true, - inputs: [], - name: "totalSupply", - outputs: [ + anonymous: false, + inputs: [ { - name: "", + indexed: true, + internalType: "address", + name: "dst", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "wad", type: "uint256", }, ], - payable: false, - stateMutability: "view", - type: "function", + name: "Deposit", + type: "event", }, { - constant: false, + anonymous: false, inputs: [ { + indexed: true, + internalType: "address", name: "src", type: "address", }, { + indexed: true, + internalType: "address", name: "dst", type: "address", }, { + indexed: false, + internalType: "uint256", name: "wad", type: "uint256", }, ], - name: "transferFrom", - outputs: [ - { - name: "", - type: "bool", - }, - ], - payable: false, - stateMutability: "nonpayable", - type: "function", + name: "Transfer", + type: "event", }, { - constant: false, + anonymous: false, inputs: [ { + indexed: true, + internalType: "address", + name: "src", + type: "address", + }, + { + indexed: false, + internalType: "uint256", name: "wad", type: "uint256", }, ], - name: "withdraw", - outputs: [], - payable: false, - stateMutability: "nonpayable", - type: "function", + name: "Withdrawal", + type: "event", }, { - constant: true, - inputs: [], - name: "decimals", - outputs: [ + inputs: [ { + internalType: "address", name: "", - type: "uint8", + type: "address", }, - ], - payable: false, - stateMutability: "view", - type: "function", - }, - { - constant: true, - inputs: [ { + internalType: "address", name: "", type: "address", }, ], - name: "balanceOf", + name: "allowance", outputs: [ { + internalType: "uint256", name: "", type: "uint256", }, ], - payable: false, stateMutability: "view", type: "function", }, { - constant: true, - inputs: [], - name: "symbol", + inputs: [ + { + internalType: "address", + name: "guy", + type: "address", + }, + { + internalType: "uint256", + name: "wad", + type: "uint256", + }, + ], + name: "approve", outputs: [ { + internalType: "bool", name: "", - type: "string", + type: "bool", }, ], - payable: false, - stateMutability: "view", + stateMutability: "nonpayable", type: "function", }, { - constant: false, inputs: [ { - name: "dst", + internalType: "address", + name: "", type: "address", }, + ], + name: "balanceOf", + outputs: [ { - name: "wad", + internalType: "uint256", + name: "", type: "uint256", }, ], - name: "transfer", + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "decimals", outputs: [ { + internalType: "uint8", name: "", - type: "bool", + type: "uint8", }, ], - payable: false, - stateMutability: "nonpayable", + stateMutability: "view", type: "function", }, { - constant: false, inputs: [], name: "deposit", outputs: [], - payable: true, stateMutability: "payable", type: "function", }, { - constant: true, - inputs: [ + inputs: [], + name: "name", + outputs: [ { + internalType: "string", name: "", - type: "address", + type: "string", }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "symbol", + outputs: [ { + internalType: "string", name: "", - type: "address", + type: "string", }, ], - name: "allowance", + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "totalSupply", outputs: [ { + internalType: "uint256", name: "", type: "uint256", }, ], - payable: false, stateMutability: "view", type: "function", }, { - payable: true, - stateMutability: "payable", - type: "fallback", - }, - { - anonymous: false, inputs: [ { - indexed: true, - name: "src", - type: "address", - }, - { - indexed: true, - name: "guy", + internalType: "address", + name: "dst", type: "address", }, { - indexed: false, + internalType: "uint256", name: "wad", type: "uint256", }, ], - name: "Approval", - type: "event", + name: "transfer", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "nonpayable", + type: "function", }, { - anonymous: false, inputs: [ { - indexed: true, + internalType: "address", name: "src", type: "address", }, { - indexed: true, + internalType: "address", name: "dst", type: "address", }, { - indexed: false, + internalType: "uint256", name: "wad", type: "uint256", }, ], - name: "Transfer", - type: "event", - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: "dst", - type: "address", - }, + name: "transferFrom", + outputs: [ { - indexed: false, - name: "wad", - type: "uint256", + internalType: "bool", + name: "", + type: "bool", }, ], - name: "Deposit", - type: "event", + stateMutability: "nonpayable", + type: "function", }, { - anonymous: false, inputs: [ { - indexed: true, - name: "src", - type: "address", - }, - { - indexed: false, + internalType: "uint256", name: "wad", type: "uint256", }, ], - name: "Withdrawal", - type: "event", + name: "withdraw", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + stateMutability: "payable", + type: "receive", }, ] as const; const _bytecode = - "0x60606040526040805190810160405280600c81526020017f57726170706564205a65746100000000000000000000000000000000000000008152506000908051906020019061004f9291906100c8565b506040805190810160405280600581526020017f575a4554410000000000000000000000000000000000000000000000000000008152506001908051906020019061009b9291906100c8565b506012600260006101000a81548160ff021916908360ff16021790555034156100c357600080fd5b61016d565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010957805160ff1916838001178555610137565b82800160010185558215610137579182015b8281111561013657825182559160200191906001019061011b565b5b5090506101449190610148565b5090565b61016a91905b8082111561016657600081600090555060010161014e565b5090565b90565b610c348061017c6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a723058208e8d099f48a4e7a73b2709a09da4e0704fd1cb7ce15b8cdf4a7552b81095bc530029"; + "0x60806040526040518060400160405280600d81526020017f57726170706564204574686572000000000000000000000000000000000000008152506000908051906020019062000051929190620000d0565b506040518060400160405280600481526020017f5745544800000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f929190620000d0565b506012600260006101000a81548160ff021916908360ff160217905550348015620000c957600080fd5b50620001e5565b828054620000de9062000180565b90600052602060002090601f0160209004810192826200010257600085556200014e565b82601f106200011d57805160ff19168380011785556200014e565b828001600101855582156200014e579182015b828111156200014d57825182559160200191906001019062000130565b5b5090506200015d919062000161565b5090565b5b808211156200017c57600081600090555060010162000162565b5090565b600060028204905060018216806200019957607f821691505b60208210811415620001b057620001af620001b6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610fd380620001f56000396000f3fe6080604052600436106100a05760003560e01c8063313ce56711610064578063313ce567146101ad57806370a08231146101d857806395d89b4114610215578063a9059cbb14610240578063d0e30db01461027d578063dd62ed3e14610287576100af565b806306fdde03146100b4578063095ea7b3146100df57806318160ddd1461011c57806323b872dd146101475780632e1a7d4d14610184576100af565b366100af576100ad6102c4565b005b600080fd5b3480156100c057600080fd5b506100c961036a565b6040516100d69190610d20565b60405180910390f35b3480156100eb57600080fd5b5061010660048036038101906101019190610c0f565b6103f8565b6040516101139190610d05565b60405180910390f35b34801561012857600080fd5b506101316104ea565b60405161013e9190610d62565b60405180910390f35b34801561015357600080fd5b5061016e60048036038101906101699190610bbc565b6104f2565b60405161017b9190610d05565b60405180910390f35b34801561019057600080fd5b506101ab60048036038101906101a69190610c4f565b6108c2565b005b3480156101b957600080fd5b506101c2610a32565b6040516101cf9190610d7d565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190610b4f565b610a45565b60405161020c9190610d62565b60405180910390f35b34801561022157600080fd5b5061022a610a5d565b6040516102379190610d20565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190610c0f565b610aeb565b6040516102749190610d05565b60405180910390f35b6102856102c4565b005b34801561029357600080fd5b506102ae60048036038101906102a99190610b7c565b610b00565b6040516102bb9190610d62565b60405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546103139190610db4565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516103609190610d62565b60405180910390a2565b6000805461037790610ec6565b80601f01602080910402602001604051908101604052809291908181526020018280546103a390610ec6565b80156103f05780601f106103c5576101008083540402835291602001916103f0565b820191906000526020600020905b8154815290600101906020018083116103d357829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104d89190610d62565b60405180910390a36001905092915050565b600047905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d90610d42565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561064e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156107a65781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070990610d42565b60405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461079e9190610e0a565b925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107f59190610e0a565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461084b9190610db4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108af9190610d62565b60405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90610d42565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109939190610e0a565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109e0573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610a279190610d62565b60405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054610a6a90610ec6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690610ec6565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b505050505081565b6000610af83384846104f2565b905092915050565b6004602052816000526040600020602052806000526040600020600091509150505481565b600081359050610b3481610f6f565b92915050565b600081359050610b4981610f86565b92915050565b600060208284031215610b6557610b64610f56565b5b6000610b7384828501610b25565b91505092915050565b60008060408385031215610b9357610b92610f56565b5b6000610ba185828601610b25565b9250506020610bb285828601610b25565b9150509250929050565b600080600060608486031215610bd557610bd4610f56565b5b6000610be386828701610b25565b9350506020610bf486828701610b25565b9250506040610c0586828701610b3a565b9150509250925092565b60008060408385031215610c2657610c25610f56565b5b6000610c3485828601610b25565b9250506020610c4585828601610b3a565b9150509250929050565b600060208284031215610c6557610c64610f56565b5b6000610c7384828501610b3a565b91505092915050565b610c8581610e50565b82525050565b6000610c9682610d98565b610ca08185610da3565b9350610cb0818560208601610e93565b610cb981610f5b565b840191505092915050565b6000610cd1600083610da3565b9150610cdc82610f6c565b600082019050919050565b610cf081610e7c565b82525050565b610cff81610e86565b82525050565b6000602082019050610d1a6000830184610c7c565b92915050565b60006020820190508181036000830152610d3a8184610c8b565b905092915050565b60006020820190508181036000830152610d5b81610cc4565b9050919050565b6000602082019050610d776000830184610ce7565b92915050565b6000602082019050610d926000830184610cf6565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610dbf82610e7c565b9150610dca83610e7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610dff57610dfe610ef8565b5b828201905092915050565b6000610e1582610e7c565b9150610e2083610e7c565b925082821015610e3357610e32610ef8565b5b828203905092915050565b6000610e4982610e5c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610eb1578082015181840152602081019050610e96565b83811115610ec0576000848401525b50505050565b60006002820490506001821680610ede57607f821691505b60208210811415610ef257610ef1610f27565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b50565b610f7881610e3e565b8114610f8357600080fd5b50565b610f8f81610e7c565b8114610f9a57600080fd5b5056fea2646970667358221220ed2297470e8d6c8e387b5cdc1c81dd38decdf0b011f3c15df9f52f6da3dcc17664736f6c63430008070033"; type WETH9ConstructorParams = | [signer?: Signer]