From e01e113a5ddaeabecdb72a2369e4438de41ec01d Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 5 Sep 2024 13:43:44 -0400 Subject: [PATCH] fix compilation and test issues that arose during merge --- .../scripts/native_solc_compile_all_ccip | 6 - .../internal/CCIPReceiverLegacy.sol | 2 +- .../applications/internal/PingPongDemo.sol | 30 + .../external/CCIPClientWithACKTest.t.sol | 3 +- .../external/CCIPReceiverWithAckTest.t.sol | 2 +- .../internal/PingPongDemoTest.t.sol | 53 +- .../receivers/ReentrancyAbuserMultiRamp.sol | 4 +- .../ccipReceiverWithAck.go | 114 +- .../ccip/generated/offramp/offramp.go | 2 +- .../ping_pong_demo/ping_pong_demo.go | 2023 +++++++++++++++-- .../self_funded_ping_pong.go | 1117 +++++++-- ...rapper-dependency-versions-do-not-edit.txt | 16 +- 12 files changed, 2861 insertions(+), 511 deletions(-) diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip index 94c97be0c9..22661b149b 100755 --- a/contracts/scripts/native_solc_compile_all_ccip +++ b/contracts/scripts/native_solc_compile_all_ccip @@ -32,10 +32,6 @@ compileContract () { echo "OffRamp uses $OPTIMIZE_RUNS_OFFRAMP optimizer runs." optimize_runs=$OPTIMIZE_RUNS_OFFRAMP ;; - "ccip/offRamp/OffRamp.sol") - echo "MultiOffRamp uses $OPTIMIZE_RUNS_MULTI_OFFRAMP optimizer runs." - optimize_runs=$OPTIMIZE_RUNS_MULTI_OFFRAMP - ;; "ccip/onRamp/EVM2EVMOnRamp.sol") echo "OnRamp uses $OPTIMIZE_RUNS_ONRAMP optimizer runs." optimize_runs=$OPTIMIZE_RUNS_ONRAMP @@ -58,7 +54,6 @@ compileContract () { # Solc produces and overwrites intermediary contracts. # Contracts should be ordered in reverse-import-complexity-order to minimize overwrite risks. compileContract ccip/offRamp/EVM2EVMOffRamp.sol -compileContract ccip/offRamp/EVM2EVMMultiOffRamp.sol compileContract ccip/applications/internal/PingPongDemo.sol compileContract ccip/applications/internal/SelfFundedPingPong.sol compileContract ccip/applications/external/CCIPClient.sol @@ -66,7 +61,6 @@ compileContract ccip/applications/external/CCIPClientWithACK.sol compileContract ccip/applications/external/CCIPReceiver.sol compileContract ccip/applications/external/CCIPReceiverWithACK.sol compileContract ccip/applications/external/CCIPSender.sol -compileContract ccip/onRamp/EVM2EVMMultiOnRamp.sol compileContract ccip/offRamp/OffRamp.sol compileContract ccip/rmn/RMNRemote.sol compileContract ccip/onRamp/OnRamp.sol diff --git a/contracts/src/v0.8/ccip/applications/internal/CCIPReceiverLegacy.sol b/contracts/src/v0.8/ccip/applications/internal/CCIPReceiverLegacy.sol index 2022a12e95..86df282dbb 100644 --- a/contracts/src/v0.8/ccip/applications/internal/CCIPReceiverLegacy.sol +++ b/contracts/src/v0.8/ccip/applications/internal/CCIPReceiverLegacy.sol @@ -5,7 +5,7 @@ import {IAny2EVMMessageReceiver} from "../../interfaces/IAny2EVMMessageReceiver. import {Client} from "../../libraries/Client.sol"; -import {IERC165} from "../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/IERC165.sol"; +import {IERC165} from "../../../vendor/openzeppelin-solidity/v5.0.2/contracts/utils/introspection/IERC165.sol"; /// @title CCIPReceiver - Base contract for CCIP applications that can receive messages. abstract contract CCIPReceiver is IAny2EVMMessageReceiver, IERC165 { diff --git a/contracts/src/v0.8/ccip/applications/internal/PingPongDemo.sol b/contracts/src/v0.8/ccip/applications/internal/PingPongDemo.sol index 5da5d14070..17a8be93b7 100644 --- a/contracts/src/v0.8/ccip/applications/internal/PingPongDemo.sol +++ b/contracts/src/v0.8/ccip/applications/internal/PingPongDemo.sol @@ -4,12 +4,17 @@ pragma solidity ^0.8.0; import {Client} from "../../libraries/Client.sol"; import {CCIPClient} from "../external/CCIPClient.sol"; +import {EVM2EVMOnRamp} from "../../onRamp/EVM2EVMOnRamp.sol"; +import {IRouter} from "../../interfaces/IRouter.sol"; + import {IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/IERC20.sol"; /// @title PingPongDemo - A simple ping-pong contract for demonstrating cross-chain communication contract PingPongDemo is CCIPClient { + event Ping(uint256 pingPongCount); event Pong(uint256 pingPongCount); + event OutOfOrderExecutionChange(bool isOutOfOrder); // The chain ID of the counterpart ping pong contract uint64 internal s_counterpartChainSelector; @@ -20,6 +25,8 @@ contract PingPongDemo is CCIPClient { // Pause ping-ponging bool private s_isPaused; + bool private s_allowOutOfOrderExecution; + // CCIPClient will handle the token approval so there's no need to do it here constructor(address router, IERC20 feeToken) CCIPClient(router, feeToken, true) {} @@ -98,4 +105,27 @@ contract PingPongDemo is CCIPClient { function isPaused() external view returns (bool) { return s_isPaused; } + + function getOutOfOrderExecution() external view returns (bool) { + return s_allowOutOfOrderExecution; + } + + function setOutOfOrderExecution(bool outOfOrderExecution) external onlyOwner { + // It adds gas having the extra storage slot, but the alternative is a bunch of very messy assembly code + // to slice it out of the extra args. + s_allowOutOfOrderExecution = outOfOrderExecution; + + address onRamp = IRouter(s_ccipRouter).getOnRamp(s_counterpartChainSelector); + EVM2EVMOnRamp.StaticConfig memory staticConfig = EVM2EVMOnRamp(onRamp).getStaticConfig(); + + // Enabling out of order execution also requires setting a manual gas limit, therefore the on-ramp default + // gas limit is used to ensure consistency, but can be overwritten manually by the contract owner using + // the applyChainUpdates function. + s_chainConfigs[s_counterpartChainSelector].extraArgsBytes = Client._argsToBytes( + Client.EVMExtraArgsV2({gasLimit: staticConfig.defaultTxGasLimit, allowOutOfOrderExecution: outOfOrderExecution}) + ); + + emit OutOfOrderExecutionChange(outOfOrderExecution); + } + } diff --git a/contracts/src/v0.8/ccip/test/applications/external/CCIPClientWithACKTest.t.sol b/contracts/src/v0.8/ccip/test/applications/external/CCIPClientWithACKTest.t.sol index 60039ee14f..d0a47a4b2b 100644 --- a/contracts/src/v0.8/ccip/test/applications/external/CCIPClientWithACKTest.t.sol +++ b/contracts/src/v0.8/ccip/test/applications/external/CCIPClientWithACKTest.t.sol @@ -107,7 +107,8 @@ contract CCIPClientWithACKTest is EVM2EVMOnRampSetup { uint256 receiverBalanceBefore = IERC20(s_sourceFeeToken).balanceOf(address(s_sender)); - vm.expectEmit(true, true, false, false); + // Check the messageId since we can control that, but not ackMessageId since its generated at execution time + vm.expectEmit(true, false, true, false, address(s_sender)); emit MessageSent(messageId, ackMessageId); s_sender.ccipReceive( diff --git a/contracts/src/v0.8/ccip/test/applications/external/CCIPReceiverWithAckTest.t.sol b/contracts/src/v0.8/ccip/test/applications/external/CCIPReceiverWithAckTest.t.sol index 1d97d141de..370eb5c637 100644 --- a/contracts/src/v0.8/ccip/test/applications/external/CCIPReceiverWithAckTest.t.sol +++ b/contracts/src/v0.8/ccip/test/applications/external/CCIPReceiverWithAckTest.t.sol @@ -72,7 +72,7 @@ contract CCIPReceiverWithAckTest is EVM2EVMOnRampSetup { uint256 receiverBalanceBefore = IERC20(s_sourceFeeToken).balanceOf(address(s_receiver)); - vm.expectEmit(false, true, false, false); + vm.expectEmit(true, false, true, false); emit MessageSent(messageId, ackMessageId); s_receiver.ccipReceive( diff --git a/contracts/src/v0.8/ccip/test/applications/internal/PingPongDemoTest.t.sol b/contracts/src/v0.8/ccip/test/applications/internal/PingPongDemoTest.t.sol index 83946e15e9..8f9f9c06aa 100644 --- a/contracts/src/v0.8/ccip/test/applications/internal/PingPongDemoTest.t.sol +++ b/contracts/src/v0.8/ccip/test/applications/internal/PingPongDemoTest.t.sol @@ -29,9 +29,45 @@ contract PingPongDappSetup is EVM2EVMOnRampSetup { } contract PingPong_example_startPingPong is PingPongDappSetup { - function test_StartPingPong_Success() public { uint256 pingPongNumber = 1; - bytes memory data = abi.encode(pingPongNumber); + bytes data = abi.encode(pingPongNumber); + + function test_StartPingPong_Success() public { + Client.EVM2AnyMessage memory sentMessage = Client.EVM2AnyMessage({ + receiver: abi.encode(i_pongContract), + data: data, + tokenAmounts: new Client.EVMTokenAmount[](0), + feeToken: s_sourceFeeToken, + extraArgs: Client._argsToBytes(Client.EVMExtraArgsV1({gasLimit: 2e5})) + }); + + uint256 expectedFee = s_sourceRouter.getFee(DEST_CHAIN_SELECTOR, sentMessage); + + Internal.EVM2EVMMessage memory message = Internal.EVM2EVMMessage({ + sequenceNumber: 1, + feeTokenAmount: expectedFee, + sourceChainSelector: SOURCE_CHAIN_SELECTOR, + sender: address(s_pingPong), + receiver: i_pongContract, + nonce: 1, + data: data, + tokenAmounts: sentMessage.tokenAmounts, + sourceTokenData: new bytes[](sentMessage.tokenAmounts.length), + gasLimit: 2e5, + feeToken: sentMessage.feeToken, + strict: false, + messageId: "" + }); + message.messageId = Internal._hash(message, s_metadataHash); + + vm.expectEmit(); + emit PingPongDemo.Ping(pingPongNumber); + + vm.expectEmit(); + emit EVM2EVMOnRamp.CCIPSendRequested(message); + + s_pingPong.startPingPong(); + } function test_StartPingPong_With_Sequenced_Ordered_Success() public { Client.EVM2AnyMessage memory sentMessage = Client.EVM2AnyMessage({ @@ -86,7 +122,7 @@ contract PingPong_example_startPingPong is PingPongDappSetup { data: abi.encode(pingPongNumber), tokenAmounts: sentMessage.tokenAmounts, sourceTokenData: new bytes[](sentMessage.tokenAmounts.length), - gasLimit: 200_000, + gasLimit: GAS_LIMIT, feeToken: sentMessage.feeToken, strict: false, messageId: "" @@ -133,19 +169,24 @@ contract PingPong_example_ccipReceive is PingPongDappSetup { contract PingPong_plumbing is PingPongDappSetup { function test_Fuzz_CounterPartChainSelector_Success(uint64 chainSelector) public { - s_pingPong.setCounterpartChainSelector(chainSelector); + vm.assume(chainSelector != 0); + + s_pingPong.setCounterpart(chainSelector, address(0x1234)); assertEq(s_pingPong.getCounterpartChainSelector(), chainSelector); } function test_Fuzz_CounterPartAddress_Success(address counterpartAddress) public { - s_pingPong.setCounterpartAddress(counterpartAddress); + vm.assume(counterpartAddress != address(0)); + + s_pingPong.setCounterpart(1, counterpartAddress); assertEq(s_pingPong.getCounterpartAddress(), counterpartAddress); } function test_Fuzz_CounterPartAddress_Success(uint64 chainSelector, address counterpartAddress) public { - s_pingPong.setCounterpartChainSelector(chainSelector); + vm.assume(chainSelector != 0); + vm.assume(counterpartAddress != address(0)); s_pingPong.setCounterpart(chainSelector, counterpartAddress); diff --git a/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol b/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol index 0d2081b201..4467458dac 100644 --- a/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol +++ b/contracts/src/v0.8/ccip/test/helpers/receivers/ReentrancyAbuserMultiRamp.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.19; import {Client} from "../../../libraries/Client.sol"; import {Internal} from "../../../libraries/Internal.sol"; -import {EVM2EVMMultiOffRamp} from "../../../offRamp/EVM2EVMMultiOffRamp.sol"; +import {EVM2EVMOffRamp} from "../../../offRamp/EVM2EVMOffRamp.sol"; import {CCIPReceiverBasic} from "./CCIPReceiverBasic.sol"; import {OffRamp} from "../../../offRamp/OffRamp.sol"; @@ -14,7 +14,7 @@ contract ReentrancyAbuserMultiRamp is CCIPReceiverBasic { Internal.ExecutionReportSingleChain internal s_payload; OffRamp internal s_offRamp; - constructor(address router, EVM2EVMMultiOffRamp offRamp) CCIPReceiverBasic(router) { + constructor(address router, OffRamp offRamp) CCIPReceiverBasic(router) { s_offRamp = offRamp; } diff --git a/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go b/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go index 9471551845..cc2325c298 100644 --- a/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go +++ b/core/gethwrappers/ccip/generated/ccipReceiverWithAck/ccipReceiverWithAck.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var CCIPReceiverWithACKMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageStatus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNativeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200440438038062004404833981016040819052620000349162000565565b818033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000141565b5050506001600160a01b038116620000eb576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556008805492851692909116821790551590506200013957620001396001600160a01b03821683600019620001ec565b50506200068a565b336001600160a01b038216036200019b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620005a4565b620002709190620005be565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002cc91869190620002d216565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000321906001600160a01b038516908490620003a8565b805190915015620003a35780806020019051810190620003429190620005e6565b620003a35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b505050565b6060620003b98484600085620003c1565b949350505050565b606082471015620004245760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b0316858760405162000442919062000637565b60006040518083038185875af1925050503d806000811462000481576040519150601f19603f3d011682016040523d82523d6000602084013e62000486565b606091505b5090925090506200049a87838387620004a5565b979650505050505050565b606083156200051957825160000362000511576001600160a01b0385163b620005115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b5081620003b9565b620003b98383815115620005305781518083602001fd5b8060405162461bcd60e51b815260040162000084919062000655565b6001600160a01b03811681146200056257600080fd5b50565b600080604083850312156200057957600080fd5b825162000586816200054c565b602084015190925062000599816200054c565b809150509250929050565b600060208284031215620005b757600080fd5b5051919050565b80820180821115620005e057634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215620005f957600080fd5b815180151581146200060a57600080fd5b9392505050565b60005b838110156200062e57818101518382015260200162000614565b50506000910152565b600082516200064b81846020870162000611565b9190910192915050565b60208152600082518060208401526200067681604085016020870162000611565b601f01601f19169190910160400192915050565b613d6a806200069a6000396000f3fe60806040526004361061016e5760003560e01c80638462a2b9116100cb578063c851cc321161007f578063e4ca875411610059578063e4ca87541461047d578063f2fde38b1461049d578063ff2deec3146104bd57600080fd5b8063c851cc321461041d578063c89245d51461043d578063cf6730f81461045d57600080fd5b80638da5cb5b116100b05780638da5cb5b146103865780639fe74e26146103d2578063b0f479a1146103f257600080fd5b80638462a2b91461034657806385572ffb1461036657600080fd5b80635e35359e116101225780636d62d633116101075780636d62d633146102bb5780636fef519e146102db57806379ba50971461033157600080fd5b80635e35359e1461026e5780636939cd971461028e57600080fd5b806335f170ef1161015357806335f170ef146101f05780635075a9d41461021e578063536c6bfa1461024c57600080fd5b806305bfe9821461017a5780630e958d6b146101c057600080fd5b3661017557005b600080fd5b34801561018657600080fd5b506101aa610195366004612d33565b60096020526000908152604090205460ff1681565b6040516101b79190612d7b565b60405180910390f35b3480156101cc57600080fd5b506101e06101db366004612dd2565b6104ea565b60405190151581526020016101b7565b3480156101fc57600080fd5b5061021061020b366004612e57565b610535565b6040516101b7929190612ee2565b34801561022a57600080fd5b5061023e610239366004612d33565b610661565b6040519081526020016101b7565b34801561025857600080fd5b5061026c610267366004612f32565b610674565b005b34801561027a57600080fd5b5061026c610289366004612f5e565b6106d8565b34801561029a57600080fd5b506102ae6102a9366004612d33565b61076d565b6040516101b79190612ffc565b3480156102c757600080fd5b5061026c6102d6366004613090565b610978565b3480156102e757600080fd5b506103246040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f000000000000000000000081525081565b6040516101b791906130c0565b34801561033d57600080fd5b5061026c610c92565b34801561035257600080fd5b5061026c61036136600461311f565b610d8f565b34801561037257600080fd5b5061026c61038136600461318b565b6110d0565b34801561039257600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b7565b3480156103de57600080fd5b5061026c6103ed3660046131c6565b6112d9565b3480156103fe57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166103ad565b34801561042957600080fd5b5061026c610438366004613208565b61166a565b34801561044957600080fd5b5061026c610458366004613208565b611736565b34801561046957600080fd5b5061026c61047836600461318b565b6118aa565b34801561048957600080fd5b5061026c610498366004612d33565b611bf8565b3480156104a957600080fd5b5061026c6104b8366004613208565b611e62565b3480156104c957600080fd5b506008546103ad9073ffffffffffffffffffffffffffffffffffffffff1681565b67ffffffffffffffff831660009081526003602052604080822090516002909101906105199085908590613225565b9081526040519081900360200190205460ff1690509392505050565b60036020526000908152604090208054819061055090613235565b80601f016020809104026020016040519081016040528092919081815260200182805461057c90613235565b80156105c95780601f1061059e576101008083540402835291602001916105c9565b820191906000526020600020905b8154815290600101906020018083116105ac57829003601f168201915b5050505050908060010180546105de90613235565b80601f016020809104026020016040519081016040528092919081815260200182805461060a90613235565b80156106575780601f1061062c57610100808354040283529160200191610657565b820191906000526020600020905b81548152906001019060200180831161063a57829003601f168201915b5050505050905082565b600061066e600583611e76565b92915050565b61067c611e89565b6106868282611f0c565b60405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e9060200160405180910390a35050565b6106e0611e89565b61070173ffffffffffffffffffffffffffffffffffffffff84168383612066565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e8360405161076091815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff16918301919091526002810180549394929391928401916107dc90613235565b80601f016020809104026020016040519081016040528092919081815260200182805461080890613235565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050815260200160038201805461086e90613235565b80601f016020809104026020016040519081016040528092919081815260200182805461089a90613235565b80156108e75780601f106108bc576101008083540402835291602001916108e7565b820191906000526020600020905b8154815290600101906020018083116108ca57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b8282101561096a5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610915565b505050915250909392505050565b610980611e89565b600161098d600584611e76565b146109cc576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b6109dc8260025b6005919061213a565b506000828152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191610a2490613235565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5090613235565b8015610a9d5780601f10610a7257610100808354040283529160200191610a9d565b820191906000526020600020905b815481529060010190602001808311610a8057829003601f168201915b50505050508152602001600382018054610ab690613235565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae290613235565b8015610b2f5780601f10610b0457610100808354040283529160200191610b2f565b820191906000526020600020905b815481529060010190602001808311610b1257829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610bb25760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610b5d565b5050505081525050905060005b816080015151811015610c4157610c398383608001518381518110610be657610be6613288565b60200260200101516020015184608001518481518110610c0857610c08613288565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166120669092919063ffffffff16565b600101610bbf565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a9579060200160405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016109c3565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d97611e89565b60005b81811015610f2a5760036000848484818110610db857610db8613288565b9050602002810190610dca91906132b7565b610dd8906020810190612e57565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610e0f57610e0f613288565b9050602002810190610e2191906132b7565b610e2f9060208101906132f5565b604051610e3d929190613225565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055828282818110610e8457610e84613288565b9050602002810190610e9691906132b7565b610ea49060208101906132f5565b604051610eb2929190613225565b6040518091039020838383818110610ecc57610ecc613288565b9050602002810190610ede91906132b7565b610eec906020810190612e57565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101610d9a565b5060005b838110156110c957600160036000878785818110610f4e57610f4e613288565b9050602002810190610f6091906132b7565b610f6e906020810190612e57565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610fa557610fa5613288565b9050602002810190610fb791906132b7565b610fc59060208101906132f5565b604051610fd3929190613225565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061102357611023613288565b905060200281019061103591906132b7565b6110439060208101906132f5565b604051611051929190613225565b604051809103902085858381811061106b5761106b613288565b905060200281019061107d91906132b7565b61108b906020810190612e57565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a3600101610f2e565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611123576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016109c3565b6111336040820160208301612e57565b67ffffffffffffffff811660009081526003602052604090208054819061115990613235565b90506000036111a0576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526024016109c3565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906111dc90869060040161345c565b600060405180830381600087803b1580156111f657600080fd5b505af1925050508015611207575060015b6112a7573d808015611235576040519150601f19603f3d011682016040523d82523d6000602084013e61123a565b606091505b50611247843560016109d3565b508335600090815260046020526040902084906112648282613865565b50506040518435907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906112999084906130c0565b60405180910390a250505050565b6040518335907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25b505050565b6112e1611e89565b60005b818110156112d4578282828181106112fe576112fe613288565b9050602002810190611310919061395f565b6113219060408101906020016139a1565b6113ed576003600084848481811061133b5761133b613288565b905060200281019061134d919061395f565b61135b906020810190612e57565b67ffffffffffffffff1681526020810191909152604001600090812061138091612ce5565b82828281811061139257611392613288565b90506020028101906113a4919061395f565b6113b2906020810190612e57565b67ffffffffffffffff167f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991660405160405180910390a2611662565b8282828181106113ff576113ff613288565b9050602002810190611411919061395f565b61141f9060408101906132f5565b905060000361145a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003600085858581811061147257611472613288565b9050602002810190611484919061395f565b611492906020810190612e57565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002090508383838181106114c8576114c8613288565b90506020028101906114da919061395f565b6114e89060408101906132f5565b82916114f59190836135e9565b5083838381811061150857611508613288565b905060200281019061151a919061395f565b6115289060608101906132f5565b1590506115735783838381811061154157611541613288565b9050602002810190611553919061395f565b6115619060608101906132f5565b60018301916115719190836135e9565b505b83838381811061158557611585613288565b9050602002810190611597919061395f565b6115a59060408101906132f5565b6040516115b3929190613225565b60405180910390208484848181106115cd576115cd613288565b90506020028101906115df919061395f565b6115ed906020810190612e57565b67ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721286868681811061162a5761162a613288565b905060200281019061163c919061395f565b61164a9060608101906132f5565b6040516116589291906139be565b60405180910390a3505b6001016112e4565b611672611e89565b73ffffffffffffffffffffffffffffffffffffffff81166116bf576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b61173e611e89565b60085473ffffffffffffffffffffffffffffffffffffffff161561179f5761179f61177e60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff1690600061214f565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935516901561184c5761184c61180c60025473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122d1565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e6760405160405180910390a35050565b3330146118e3576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118f36040820160208301612e57565b61190060408301836132f5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff86168152600360205260409020805490935061195792509050613235565b159050806119ad5750600360008367ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018160405161199891906139d2565b9081526040519081900360200190205460ff16155b156119e657806040517f5075bb380000000000000000000000000000000000000000000000000000000081526004016109c391906130c0565b60006119f560608501856132f5565b810190611a029190613af8565b9050600081604001516001811115611a1c57611a1c612d4c565b03611a2f57611a2a846123cf565b611bf2565b600181604001516001811115611a4757611a47612d4c565b03611bf2576000808260200151806020019051810190611a679190613ba4565b915091506040518060400160405280601581526020017f4d4553534147455f41434b4e4f574c45444745445f0000000000000000000000815250604051602001611ab191906130c0565b6040516020818303038152906040528051906020012082604051602001611ad891906130c0565b6040516020818303038152906040528051906020012014611b25576040517fae15168d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008281526009602052604090205460ff166002811115611b4a57611b4a612d4c565b03611b84576040517f33704b28000000000000000000000000000000000000000000000000000000008152600481018290526024016109c3565b60008181526009602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905590518281527fef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79910160405180910390a150505b50505050565b6001611c05600583611e76565b14611c3f576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018290526024016109c3565b611c4a8160006109d3565b506000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611c9290613235565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbe90613235565b8015611d0b5780601f10611ce057610100808354040283529160200191611d0b565b820191906000526020600020905b815481529060010190602001808311611cee57829003601f168201915b50505050508152602001600382018054611d2490613235565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5090613235565b8015611d9d5780601f10611d7257610100808354040283529160200191611d9d565b820191906000526020600020905b815481529060010190602001808311611d8057829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611e205760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611dcb565b50505050815250509050611e3381612745565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b611e6a611e89565b611e73816127b7565b50565b6000611e8283836128ac565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611f0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016109c3565b565b80471015611f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109c3565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611fd0576040519150601f19603f3d011682016040523d82523d6000602084013e611fd5565b606091505b50509050806112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016109c3565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112d49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612936565b6000612147848484612a42565b949350505050565b8015806121ef57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed9190613c25565b155b61227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016109c3565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526112d49084907f095ea7b300000000000000000000000000000000000000000000000000000000906064016120b8565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190613c25565b6123769190613c3e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150611bf29085907f095ea7b300000000000000000000000000000000000000000000000000000000906064016120b8565b604080516000808252602082019092528161240c565b60408051808201909152600080825260208201528152602001906001900390816123e55790505b50905060006040518060a0016040528084806040019061242c91906132f5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080518082018252601581527f4d4553534147455f41434b4e4f574c45444745445f00000000000000000000006020828101919091529151928201926124ad9288359101613c51565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152908252602082810186905260085473ffffffffffffffffffffffffffffffffffffffff168383015260609092019160039160009161251d918901908901612e57565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600101805461254d90613235565b80601f016020809104026020016040519081016040528092919081815260200182805461257990613235565b80156125c65780601f1061259b576101008083540402835291602001916125c6565b820191906000526020600020905b8154815290600101906020018083116125a957829003601f168201915b50505091909252505060025490915060009073ffffffffffffffffffffffffffffffffffffffff166320487ded6126036040870160208801612e57565b846040518363ffffffff1660e01b8152600401612621929190613c73565b602060405180830381865afa15801561263e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126629190613c25565b60025460085491925060009173ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f991161561269a57600061269c565b835b6126ac6040890160208a01612e57565b866040518463ffffffff1660e01b81526004016126ca929190613c73565b60206040518083038185885af11580156126e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061270d9190613c25565b60405190915081908635907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b237290600090a35050505050565b61274d611e89565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890612789908490600401612ffc565b600060405180830381600087803b1580156127a357600080fd5b505af11580156110c9573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff821603612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016109c3565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000818152600283016020526040812054801515806128d057506128d08484612a5f565b611e82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016109c3565b6000612998826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612a6b9092919063ffffffff16565b8051909150156112d457808060200190518101906129b69190613d40565b6112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109c3565b600082815260028401602052604081208290556121478484612a7a565b6000611e828383612a86565b60606121478484600085612a9e565b6000611e828383612bb7565b60008181526001830160205260408120541515611e82565b606082471015612b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109c3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b5991906139d2565b60006040518083038185875af1925050503d8060008114612b96576040519150601f19603f3d011682016040523d82523d6000602084013e612b9b565b606091505b5091509150612bac87838387612c06565b979650505050505050565b6000818152600183016020526040812054612bfe5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561066e565b50600061066e565b60608315612c9c578251600003612c955773ffffffffffffffffffffffffffffffffffffffff85163b612c95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109c3565b5081612147565b6121478383815115612cb15781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c391906130c0565b508054612cf190613235565b6000825580601f10612d01575050565b601f016020900490600052602060002090810190611e7391905b80821115612d2f5760008155600101612d1b565b5090565b600060208284031215612d4557600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612db6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff81168114611e7357600080fd5b600080600060408486031215612de757600080fd5b8335612df281612dbc565b9250602084013567ffffffffffffffff80821115612e0f57600080fd5b818601915086601f830112612e2357600080fd5b813581811115612e3257600080fd5b876020828501011115612e4457600080fd5b6020830194508093505050509250925092565b600060208284031215612e6957600080fd5b8135611e8281612dbc565b60005b83811015612e8f578181015183820152602001612e77565b50506000910152565b60008151808452612eb0816020860160208601612e74565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000612ef56040830185612e98565b8281036020840152612f078185612e98565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611e7357600080fd5b60008060408385031215612f4557600080fd5b8235612f5081612f10565b946020939093013593505050565b600080600060608486031215612f7357600080fd5b8335612f7e81612f10565b92506020840135612f8e81612f10565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015612ff1578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101612fb4565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a0606084015261303660c0840182612e98565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526130728383612e98565b925060808601519150808584030160a086015250612f078282612f9f565b600080604083850312156130a357600080fd5b8235915060208301356130b581612f10565b809150509250929050565b602081526000611e826020830184612e98565b60008083601f8401126130e557600080fd5b50813567ffffffffffffffff8111156130fd57600080fd5b6020830191508360208260051b850101111561311857600080fd5b9250929050565b6000806000806040858703121561313557600080fd5b843567ffffffffffffffff8082111561314d57600080fd5b613159888389016130d3565b9096509450602087013591508082111561317257600080fd5b5061317f878288016130d3565b95989497509550505050565b60006020828403121561319d57600080fd5b813567ffffffffffffffff8111156131b457600080fd5b820160a08185031215611e8257600080fd5b600080602083850312156131d957600080fd5b823567ffffffffffffffff8111156131f057600080fd5b6131fc858286016130d3565b90969095509350505050565b60006020828403121561321a57600080fd5b8135611e8281612f10565b8183823760009101908152919050565b600181811c9082168061324957607f821691505b602082108103613282577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126132eb57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261332a57600080fd5b83018035915067ffffffffffffffff82111561334557600080fd5b60200191503681900382131561311857600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261338f57600080fd5b830160208101925035905067ffffffffffffffff8111156133af57600080fd5b80360382131561311857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612ff157813561342a81612f10565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613417565b60208152813560208201526000602083013561347781612dbc565b67ffffffffffffffff8082166040850152613495604086018661335a565b925060a060608601526134ac60c0860184836133be565b9250506134bc606086018661335a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526134f28583856133be565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261352b57600080fd5b6020928801928301923591508382111561354457600080fd5b8160061b360383131561355657600080fd5b8685030160a0870152612bac848284613407565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156112d4576000816000526020600020601f850160051c810160208610156135c25750805b601f850160051c820191505b818110156135e1578281556001016135ce565b505050505050565b67ffffffffffffffff8311156136015761360161356a565b6136158361360f8354613235565b83613599565b6000601f84116001811461366757600085156136315750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556110c9565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156136b65786850135825560209485019460019092019101613696565b50868210156136f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561373d81612f10565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156137a3576137a361356a565b8054838255808410156138305760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146137e4576137e4613703565b80861686146137f5576137f5613703565b5060008360005260206000208360011b81018760011b820191505b8082101561382b578282558284830155600282019150613810565b505050505b5060008181526020812083915b858110156135e15761384f8383613732565b604092909201916002919091019060010161383d565b8135815560018101602083013561387b81612dbc565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556138bb60408601866132f5565b935091506138cd8383600287016135e9565b6138da60608601866132f5565b935091506138ec8383600387016135e9565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261392357600080fd5b91840191823591508082111561393857600080fd5b506020820191508060061b360382131561395157600080fd5b611bf281836004860161378a565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126132eb57600080fd5b8015158114611e7357600080fd5b6000602082840312156139b357600080fd5b8135611e8281613993565b6020815260006121476020830184866133be565b600082516132eb818460208701612e74565b6040516060810167ffffffffffffffff81118282101715613a0757613a0761356a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a5457613a5461356a565b604052919050565b600067ffffffffffffffff821115613a7657613a7661356a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613ab357600080fd5b8135613ac6613ac182613a5c565b613a0d565b818152846020838601011115613adb57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613b0a57600080fd5b813567ffffffffffffffff80821115613b2257600080fd5b9083019060608286031215613b3657600080fd5b613b3e6139e4565b823582811115613b4d57600080fd5b613b5987828601613aa2565b825250602083013582811115613b6e57600080fd5b613b7a87828601613aa2565b6020830152506040830135925060028310613b9457600080fd5b6040810192909252509392505050565b60008060408385031215613bb757600080fd5b825167ffffffffffffffff811115613bce57600080fd5b8301601f81018513613bdf57600080fd5b8051613bed613ac182613a5c565b818152866020838501011115613c0257600080fd5b613c13826020830160208601612e74565b60209590950151949694955050505050565b600060208284031215613c3757600080fd5b5051919050565b8082018082111561066e5761066e613703565b604081526000613c646040830185612e98565b90508260208301529392505050565b67ffffffffffffffff83168152604060208201526000825160a06040840152613c9f60e0840182612e98565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152613cdb8383612e98565b92506040860151915080858403016080860152613cf88383612f9f565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250613d368282612e98565b9695505050505050565b600060208284031215613d5257600080fd5b8151611e828161399356fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidAckMessageHeader\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAlreadyAcknowledged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageAckSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"incomingMessageId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"ACKMessageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ACK_MESSAGE_HEADER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"isFailedMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"s_messageStatus\",\"outputs\":[{\"internalType\":\"enumCCIPReceiverWithACK.MessageStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b506040516200422d3803806200422d833981016040819052620000349162000565565b818033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000141565b5050506001600160a01b038116620000eb576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556007805492851692909116821790551590506200013957620001396001600160a01b03821683600019620001ec565b50506200068a565b336001600160a01b038216036200019b5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200023e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002649190620005a4565b620002709190620005be565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620002cc91869190620002d216565b50505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000321906001600160a01b038516908490620003a8565b805190915015620003a35780806020019051810190620003429190620005e6565b620003a35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b505050565b6060620003b98484600085620003c1565b949350505050565b606082471015620004245760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b0316858760405162000442919062000637565b60006040518083038185875af1925050503d806000811462000481576040519150601f19603f3d011682016040523d82523d6000602084013e62000486565b606091505b5090925090506200049a87838387620004a5565b979650505050505050565b606083156200051957825160000362000511576001600160a01b0385163b620005115760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b5081620003b9565b620003b98383815115620005305781518083602001fd5b8060405162461bcd60e51b815260040162000084919062000655565b6001600160a01b03811681146200056257600080fd5b50565b600080604083850312156200057957600080fd5b825162000586816200054c565b602084015190925062000599816200054c565b809150509250929050565b600060208284031215620005b757600080fd5b5051919050565b80820180821115620005e057634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215620005f957600080fd5b815180151581146200060a57600080fd5b9392505050565b60005b838110156200062e57818101518382015260200162000614565b50506000910152565b600082516200064b81846020870162000611565b9190910192915050565b60208152600082518060208401526200067681604085016020870162000611565b601f01601f19169190910160400192915050565b613b93806200069a6000396000f3fe6080604052600436106101635760003560e01c806385572ffb116100c0578063c89245d511610074578063cf6730f811610059578063cf6730f81461043b578063e4ca87541461045b578063f2fde38b1461047b57600080fd5b8063c89245d5146103f0578063ca709a251461041057600080fd5b80639fe74e26116100a55780639fe74e2614610385578063b0f479a1146103a5578063c851cc32146103d057600080fd5b806385572ffb146103195780638da5cb5b1461033957600080fd5b80636939cd97116101175780636fef519e116100fc5780636fef519e146102a257806379ba5097146102e45780638462a2b9146102f957600080fd5b80636939cd97146102555780636d62d6331461028257600080fd5b80630e958d6b116101485780630e958d6b146101e557806335f170ef146102055780635e35359e1461023357600080fd5b806305bfe9821461016f5780630a9094dc146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a366004612a6b565b60086020526000908152604090205460ff1681565b6040516101ac9190612ab3565b60405180910390f35b3480156101c157600080fd5b506101d56101d0366004612a6b565b61049b565b60405190151581526020016101ac565b3480156101f157600080fd5b506101d5610200366004612b0a565b6104ae565b34801561021157600080fd5b50610225610220366004612b8f565b6104f9565b6040516101ac929190612c1a565b34801561023f57600080fd5b5061025361024e366004612c6a565b610625565b005b34801561026157600080fd5b50610275610270366004612a6b565b6106fa565b6040516101ac9190612d08565b34801561028e57600080fd5b5061025361029d366004612d9c565b610905565b3480156102ae57600080fd5b506102d67f1c778f21871bcc06cfebd177c4d0360c2f3550962fb071f69ed007e4f55f23b281565b6040519081526020016101ac565b3480156102f057600080fd5b50610253610b1d565b34801561030557600080fd5b50610253610314366004612e18565b610c1a565b34801561032557600080fd5b50610253610334366004612e84565b610f5b565b34801561034557600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561039157600080fd5b506102536103a0366004612ebf565b611152565b3480156103b157600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610360565b3480156103dc57600080fd5b506102536103eb366004612f01565b61130b565b3480156103fc57600080fd5b5061025361040b366004612f01565b6113d7565b34801561041c57600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561044757600080fd5b50610253610456366004612e84565b61154b565b34801561046757600080fd5b50610253610476366004612a6b565b611839565b34801561048757600080fd5b50610253610496366004612f01565b611b07565b60006104a8600583611b1b565b92915050565b67ffffffffffffffff831660009081526003602052604080822090516002909101906104dd9085908590612f1e565b9081526040519081900360200190205460ff1690509392505050565b60036020526000908152604090208054819061051490612f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461054090612f2e565b801561058d5780601f106105625761010080835404028352916020019161058d565b820191906000526020600020905b81548152906001019060200180831161057057829003601f168201915b5050505050908060010180546105a290612f2e565b80601f01602080910402602001604051908101604052809291908181526020018280546105ce90612f2e565b801561061b5780601f106105f05761010080835404028352916020019161061b565b820191906000526020600020905b8154815290600101906020018083116105fe57829003601f168201915b5050505050905082565b61062d611b36565b73ffffffffffffffffffffffffffffffffffffffff831661066d5761066873ffffffffffffffffffffffffffffffffffffffff831682611bb9565b61068e565b61068e73ffffffffffffffffffffffffffffffffffffffff84168383611d13565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516106ed91815260200190565b60405180910390a3505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff169183019190915260028101805493949293919284019161076990612f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461079590612f2e565b80156107e25780601f106107b7576101008083540402835291602001916107e2565b820191906000526020600020905b8154815290600101906020018083116107c557829003601f168201915b505050505081526020016003820180546107fb90612f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612f2e565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156108f75760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016108a2565b505050915250909392505050565b61090d611b36565b610918600583611b1b565b610956576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b600082815260046020818152604080842090920180548351818402810184019094528084529091849084015b828210156109d75760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610982565b50505060008581526004602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001690559293509050610a2760028301826129b9565b610a356003830160006129b9565b610a436004830160006129f3565b50610a519050600584611de7565b5060005b8151811015610acb57610ac383838381518110610a7457610a74612f81565b602002602001015160200151848481518110610a9257610a92612f81565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16611d139092919063ffffffff16565b600101610a55565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957906020015b60405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161094d565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610c22611b36565b60005b81811015610db55760036000848484818110610c4357610c43612f81565b9050602002810190610c559190612fb0565b610c63906020810190612b8f565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201838383818110610c9a57610c9a612f81565b9050602002810190610cac9190612fb0565b610cba906020810190612fee565b604051610cc8929190612f1e565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055828282818110610d0f57610d0f612f81565b9050602002810190610d219190612fb0565b610d2f906020810190612fee565b604051610d3d929190612f1e565b6040518091039020838383818110610d5757610d57612f81565b9050602002810190610d699190612fb0565b610d77906020810190612b8f565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101610c25565b5060005b83811015610f5457600160036000878785818110610dd957610dd9612f81565b9050602002810190610deb9190612fb0565b610df9906020810190612b8f565b67ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600201868684818110610e3057610e30612f81565b9050602002810190610e429190612fb0565b610e50906020810190612fee565b604051610e5e929190612f1e565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909216919091179055848482818110610eae57610eae612f81565b9050602002810190610ec09190612fb0565b610ece906020810190612fee565b604051610edc929190612f1e565b6040518091039020858583818110610ef657610ef6612f81565b9050602002810190610f089190612fb0565b610f16906020810190612b8f565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a3600101610db9565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610fae576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161094d565b610fbe6040820160208301612b8f565b67ffffffffffffffff811660009081526003602052604090208054610fe290612f2e565b9050600003611029576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161094d565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611065908590600401613155565b600060405180830381600087803b15801561107f57600080fd5b505af1925050508015611090575060015b611122573d8080156110be576040519150601f19603f3d011682016040523d82523d6000602084013e6110c3565b606091505b506110d060058435611df3565b508235600090815260046020526040902083906110ed828261355e565b50506040518335907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f90610b10908490613658565b6040518235907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050565b61115a611b36565b60005b8181101561130657600083838381811061117957611179612f81565b905060200281019061118b919061366b565b61119490613781565b905080602001516111ff57805167ffffffffffffffff1660009081526003602052604081206111c2916129b9565b805160405167ffffffffffffffff909116907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991690600090a26112fd565b80604001515160000361123e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080820151825167ffffffffffffffff166000908152600360205291909120906112699082613832565b506060810151815167ffffffffffffffff166000908152600360205260409020600101906112979082613832565b5080604001516040516112aa919061394c565b6040518091039020816000015167ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721283606001516040516112f49190613658565b60405180910390a35b5060010161115d565b505050565b611313611b36565b73ffffffffffffffffffffffffffffffffffffffff8116611360576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b6113df611b36565b60075473ffffffffffffffffffffffffffffffffffffffff16156114405761144061141f60025473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff16906000611dff565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093551690156114ed576114ed6114ad60025473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f81565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e6760405160405180910390a35050565b333014611584576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115946040820160208301612b8f565b6115a16040830183612fee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff8616815260036020526040902080549093506115f892509050612f2e565b1590508061164e5750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611639919061394c565b9081526040519081900360200190205460ff16155b1561168757806040517f5075bb3800000000000000000000000000000000000000000000000000000000815260040161094d9190613658565b60006116966060850185612fee565b8101906116a3919061395e565b90506000816040015160018111156116bd576116bd612a84565b036116d1576116cb8461207f565b50505050565b6001816040015160018111156116e9576116e9612a84565b036116cb5760008082602001518060200190518101906117099190613a0a565b90925090507f1c778f21871bcc06cfebd177c4d0360c2f3550962fb071f69ed007e4f55f23b28214611767576040517fae15168d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260008281526008602052604090205460ff16600281111561178c5761178c612a84565b036117c6576040517f33704b280000000000000000000000000000000000000000000000000000000081526004810182905260240161094d565b60008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600217905590518281527fef0cb160d3dc564cde61ae97d9981f9c4d92ace727a2ec202b18b223ea832a79910160405180910390a1505050505050565b611844600582611b1b565b61187d576040517fb6e782600000000000000000000000000000000000000000000000000000000081526004810182905260240161094d565b6000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916118c490612f2e565b80601f01602080910402602001604051908101604052809291908181526020018280546118f090612f2e565b801561193d5780601f106119125761010080835404028352916020019161193d565b820191906000526020600020905b81548152906001019060200180831161192057829003601f168201915b5050505050815260200160038201805461195690612f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461198290612f2e565b80156119cf5780601f106119a4576101008083540402835291602001916119cf565b820191906000526020600020905b8154815290600101906020018083116119b257829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611a525760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff1682526001908101548284015290835290920191016119fd565b5050509152505060008381526004602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000169055919250611aa460028301826129b9565b611ab26003830160006129b9565b611ac06004830160006129f3565b50611ace9050600583611de7565b50611ad8816123f5565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b611b0f611b36565b611b1881612467565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161094d565b565b80471015611c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161094d565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611c7d576040519150601f19603f3d011682016040523d82523d6000602084013e611c82565b606091505b5050905080611306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161094d565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526113069084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261255c565b6000611b2f8383612668565b6000611b2f838361275b565b801580611e9f57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9d9190613a2e565b155b611f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840161094d565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526113069084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611d65565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190613a2e565b6120269190613a47565b60405173ffffffffffffffffffffffffffffffffffffffff85166024820152604481018290529091506116cb9085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401611d65565b60006040518060a0016040528083806040019061209c9190612fee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604051602091820191612114917f1c778f21871bcc06cfebd177c4d0360c2f3550962fb071f69ed007e4f55f23b29187359101918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528152602001600060405190808252806020026020018201604052801561218e57816020015b60408051808201909152600080825260208201528152602001906001900390816121675790505b50815260075473ffffffffffffffffffffffffffffffffffffffff166020808301919091526040918201916003916000916121ce91908801908801612b8f565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060010180546121fe90612f2e565b80601f016020809104026020016040519081016040528092919081815260200182805461222a90612f2e565b80156122775780601f1061224c57610100808354040283529160200191612277565b820191906000526020600020905b81548152906001019060200180831161225a57829003601f168201915b50505091909252505060025490915060009073ffffffffffffffffffffffffffffffffffffffff166320487ded6122b46040860160208701612b8f565b846040518363ffffffff1660e01b81526004016122d2929190613a5a565b602060405180830381865afa1580156122ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123139190613a2e565b60025460075491925060009173ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f991161561234b57600061234d565b835b61235d6040880160208901612b8f565b866040518463ffffffff1660e01b815260040161237b929190613a5a565b60206040518083038185885af1158015612399573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123be9190613a2e565b60405190915081908535907f9102b9031c3c59d8320bf14d84d7d7a3434366b91032fad1c87579cfc62b237290600090a350505050565b6123fd611b36565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890612439908490600401612d08565b600060405180830381600087803b15801561245357600080fd5b505af1158015610f54573d6000803e3d6000fd5b3373ffffffffffffffffffffffffffffffffffffffff8216036124e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161094d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006125be826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127aa9092919063ffffffff16565b80519091501561130657808060200190518101906125dc9190613b27565b611306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161094d565b6000818152600183016020526040812054801561275157600061268c600183613b44565b85549091506000906126a090600190613b44565b90508181146127055760008660000182815481106126c0576126c0612f81565b90600052602060002001549050808760000184815481106126e3576126e3612f81565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061271657612716613b57565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104a8565b60009150506104a8565b60008181526001830160205260408120546127a2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104a8565b5060006104a8565b60606127b984846000856127c1565b949350505050565b606082471015612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161094d565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161287c919061394c565b60006040518083038185875af1925050503d80600081146128b9576040519150601f19603f3d011682016040523d82523d6000602084013e6128be565b606091505b50915091506128cf878383876128da565b979650505050505050565b606083156129705782516000036129695773ffffffffffffffffffffffffffffffffffffffff85163b612969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161094d565b50816127b9565b6127b983838151156129855781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d9190613658565b5080546129c590612f2e565b6000825580601f106129d5575050565b601f016020900490600052602060002090810190611b189190612a14565b5080546000825560020290600052602060002090810190611b189190612a2d565b5b80821115612a295760008155600101612a15565b5090565b5b80821115612a295780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201612a2e565b600060208284031215612a7d57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310612aee577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b67ffffffffffffffff81168114611b1857600080fd5b600080600060408486031215612b1f57600080fd5b8335612b2a81612af4565b9250602084013567ffffffffffffffff80821115612b4757600080fd5b818601915086601f830112612b5b57600080fd5b813581811115612b6a57600080fd5b876020828501011115612b7c57600080fd5b6020830194508093505050509250925092565b600060208284031215612ba157600080fd5b8135611b2f81612af4565b60005b83811015612bc7578181015183820152602001612baf565b50506000910152565b60008151808452612be8816020860160208601612bac565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000612c2d6040830185612bd0565b8281036020840152612c3f8185612bd0565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b1857600080fd5b600080600060608486031215612c7f57600080fd5b8335612c8a81612c48565b92506020840135612c9a81612c48565b929592945050506040919091013590565b60008151808452602080850194506020840160005b83811015612cfd578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101612cc0565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152612d4260c0840182612bd0565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152612d7e8383612bd0565b925060808601519150808584030160a086015250612c3f8282612cab565b60008060408385031215612daf57600080fd5b823591506020830135612dc181612c48565b809150509250929050565b60008083601f840112612dde57600080fd5b50813567ffffffffffffffff811115612df657600080fd5b6020830191508360208260051b8501011115612e1157600080fd5b9250929050565b60008060008060408587031215612e2e57600080fd5b843567ffffffffffffffff80821115612e4657600080fd5b612e5288838901612dcc565b90965094506020870135915080821115612e6b57600080fd5b50612e7887828801612dcc565b95989497509550505050565b600060208284031215612e9657600080fd5b813567ffffffffffffffff811115612ead57600080fd5b820160a08185031215611b2f57600080fd5b60008060208385031215612ed257600080fd5b823567ffffffffffffffff811115612ee957600080fd5b612ef585828601612dcc565b90969095509350505050565b600060208284031215612f1357600080fd5b8135611b2f81612c48565b8183823760009101908152919050565b600181811c90821680612f4257607f821691505b602082108103612f7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612fe457600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261302357600080fd5b83018035915067ffffffffffffffff82111561303e57600080fd5b602001915036819003821315612e1157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261308857600080fd5b830160208101925035905067ffffffffffffffff8111156130a857600080fd5b803603821315612e1157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612cfd57813561312381612c48565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613110565b60208152813560208201526000602083013561317081612af4565b67ffffffffffffffff808216604085015261318e6040860186613053565b925060a060608601526131a560c0860184836130b7565b9250506131b56060860186613053565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526131eb8583856130b7565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261322457600080fd5b6020928801928301923591508382111561323d57600080fd5b8160061b360383131561324f57600080fd5b8685030160a08701526128cf848284613100565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115611306576000816000526020600020601f850160051c810160208610156132bb5750805b601f850160051c820191505b818110156132da578281556001016132c7565b505050505050565b67ffffffffffffffff8311156132fa576132fa613263565b61330e836133088354612f2e565b83613292565b6000601f841160018114613360576000851561332a5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610f54565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156133af578685013582556020948501946001909201910161338f565b50868210156133ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561343681612c48565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561349c5761349c613263565b8054838255808410156135295760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146134dd576134dd6133fc565b80861686146134ee576134ee6133fc565b5060008360005260206000208360011b81018760011b820191505b80821015613524578282558284830155600282019150613509565b505050505b5060008181526020812083915b858110156132da57613548838361342b565b6040929092019160029190910190600101613536565b8135815560018101602083013561357481612af4565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556135b46040860186612fee565b935091506135c68383600287016132e2565b6135d36060860186612fee565b935091506135e58383600387016132e2565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261361c57600080fd5b91840191823591508082111561363157600080fd5b506020820191508060061b360382131561364a57600080fd5b6116cb818360048601613483565b602081526000611b2f6020830184612bd0565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612fe457600080fd5b6040516060810167ffffffffffffffff811182821017156136c2576136c2613263565b60405290565b8015158114611b1857600080fd5b600082601f8301126136e757600080fd5b813567ffffffffffffffff8082111561370257613702613263565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561374857613748613263565b8160405283815286602085880101111561376157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006080823603121561379357600080fd5b6040516080810167ffffffffffffffff82821081831117156137b7576137b7613263565b81604052843591506137c882612af4565b9082526020840135906137da826136c8565b81602084015260408501359150808211156137f457600080fd5b613800368387016136d6565b6040840152606085013591508082111561381957600080fd5b50613826368286016136d6565b60608301525092915050565b815167ffffffffffffffff81111561384c5761384c613263565b6138608161385a8454612f2e565b84613292565b602080601f8311600181146138b3576000841561387d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556132da565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613900578886015182559484019460019091019084016138e1565b508582101561393c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612fe4818460208701612bac565b60006020828403121561397057600080fd5b813567ffffffffffffffff8082111561398857600080fd5b908301906060828603121561399c57600080fd5b6139a461369f565b8235828111156139b357600080fd5b6139bf878286016136d6565b8252506020830135828111156139d457600080fd5b6139e0878286016136d6565b60208301525060408301359250600283106139fa57600080fd5b6040810192909252509392505050565b60008060408385031215613a1d57600080fd5b505080516020909101519092909150565b600060208284031215613a4057600080fd5b5051919050565b808201808211156104a8576104a86133fc565b67ffffffffffffffff83168152604060208201526000825160a06040840152613a8660e0840182612bd0565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080858403016060860152613ac28383612bd0565b92506040860151915080858403016080860152613adf8383612cab565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c086015250613b1d8282612bd0565b9695505050505050565b600060208284031215613b3957600080fd5b8151611b2f816136c8565b818103818111156104a8576104a86133fc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var CCIPReceiverWithACKABI = CCIPReceiverWithACKMetaData.ABI @@ -196,70 +196,70 @@ func (_CCIPReceiverWithACK *CCIPReceiverWithACKTransactorRaw) Transact(opts *bin return _CCIPReceiverWithACK.Contract.contract.Transact(opts, method, params...) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) ACKMESSAGEHEADER(opts *bind.CallOpts) (string, error) { +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) ACKMESSAGEHEADER(opts *bind.CallOpts) ([32]byte, error) { var out []interface{} err := _CCIPReceiverWithACK.contract.Call(opts, &out, "ACK_MESSAGE_HEADER") if err != nil { - return *new(string), err + return *new([32]byte), err } - out0 := *abi.ConvertType(out[0], new(string)).(*string) + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) return out0, err } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) ACKMESSAGEHEADER() (string, error) { +func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) ACKMESSAGEHEADER() ([32]byte, error) { return _CCIPReceiverWithACK.Contract.ACKMESSAGEHEADER(&_CCIPReceiverWithACK.CallOpts) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) ACKMESSAGEHEADER() (string, error) { +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) ACKMESSAGEHEADER() ([32]byte, error) { return _CCIPReceiverWithACK.Contract.ACKMESSAGEHEADER(&_CCIPReceiverWithACK.CallOpts) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) GetFeeToken(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _CCIPReceiverWithACK.contract.Call(opts, &out, "getMessageContents", messageId) + err := _CCIPReceiverWithACK.contract.Call(opts, &out, "getFeeToken") if err != nil { - return *new(ClientAny2EVMMessage), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { - return _CCIPReceiverWithACK.Contract.GetMessageContents(&_CCIPReceiverWithACK.CallOpts, messageId) +func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) GetFeeToken() (common.Address, error) { + return _CCIPReceiverWithACK.Contract.GetFeeToken(&_CCIPReceiverWithACK.CallOpts) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { - return _CCIPReceiverWithACK.Contract.GetMessageContents(&_CCIPReceiverWithACK.CallOpts, messageId) +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) GetFeeToken() (common.Address, error) { + return _CCIPReceiverWithACK.Contract.GetFeeToken(&_CCIPReceiverWithACK.CallOpts) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) { +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { var out []interface{} - err := _CCIPReceiverWithACK.contract.Call(opts, &out, "getMessageStatus", messageId) + err := _CCIPReceiverWithACK.contract.Call(opts, &out, "getMessageContents", messageId) if err != nil { - return *new(*big.Int), err + return *new(ClientAny2EVMMessage), err } - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) return out0, err } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { - return _CCIPReceiverWithACK.Contract.GetMessageStatus(&_CCIPReceiverWithACK.CallOpts, messageId) +func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPReceiverWithACK.Contract.GetMessageContents(&_CCIPReceiverWithACK.CallOpts, messageId) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) GetMessageStatus(messageId [32]byte) (*big.Int, error) { - return _CCIPReceiverWithACK.Contract.GetMessageStatus(&_CCIPReceiverWithACK.CallOpts, messageId) +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _CCIPReceiverWithACK.Contract.GetMessageContents(&_CCIPReceiverWithACK.CallOpts, messageId) } func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { @@ -306,6 +306,28 @@ func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) IsApprovedSender(s return _CCIPReceiverWithACK.Contract.IsApprovedSender(&_CCIPReceiverWithACK.CallOpts, sourceChainSelector, senderAddr) } +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) IsFailedMessage(opts *bind.CallOpts, messageId [32]byte) (bool, error) { + var out []interface{} + err := _CCIPReceiverWithACK.contract.Call(opts, &out, "isFailedMessage", messageId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) IsFailedMessage(messageId [32]byte) (bool, error) { + return _CCIPReceiverWithACK.Contract.IsFailedMessage(&_CCIPReceiverWithACK.CallOpts, messageId) +} + +func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) IsFailedMessage(messageId [32]byte) (bool, error) { + return _CCIPReceiverWithACK.Contract.IsFailedMessage(&_CCIPReceiverWithACK.CallOpts, messageId) +} + func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) Owner(opts *bind.CallOpts) (common.Address, error) { var out []interface{} err := _CCIPReceiverWithACK.contract.Call(opts, &out, "owner") @@ -358,28 +380,6 @@ func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) SChainConfigs(dest return _CCIPReceiverWithACK.Contract.SChainConfigs(&_CCIPReceiverWithACK.CallOpts, destChainSelector) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) SFeeToken(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _CCIPReceiverWithACK.contract.Call(opts, &out, "s_feeToken") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) SFeeToken() (common.Address, error) { - return _CCIPReceiverWithACK.Contract.SFeeToken(&_CCIPReceiverWithACK.CallOpts) -} - -func (_CCIPReceiverWithACK *CCIPReceiverWithACKCallerSession) SFeeToken() (common.Address, error) { - return _CCIPReceiverWithACK.Contract.SFeeToken(&_CCIPReceiverWithACK.CallOpts) -} - func (_CCIPReceiverWithACK *CCIPReceiverWithACKCaller) SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) { var out []interface{} err := _CCIPReceiverWithACK.contract.Call(opts, &out, "s_messageStatus", messageId) @@ -522,18 +522,6 @@ func (_CCIPReceiverWithACK *CCIPReceiverWithACKTransactorSession) UpdateRouter(n return _CCIPReceiverWithACK.Contract.UpdateRouter(&_CCIPReceiverWithACK.TransactOpts, newRouter) } -func (_CCIPReceiverWithACK *CCIPReceiverWithACKTransactor) WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _CCIPReceiverWithACK.contract.Transact(opts, "withdrawNativeToken", to, amount) -} - -func (_CCIPReceiverWithACK *CCIPReceiverWithACKSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _CCIPReceiverWithACK.Contract.WithdrawNativeToken(&_CCIPReceiverWithACK.TransactOpts, to, amount) -} - -func (_CCIPReceiverWithACK *CCIPReceiverWithACKTransactorSession) WithdrawNativeToken(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _CCIPReceiverWithACK.Contract.WithdrawNativeToken(&_CCIPReceiverWithACK.TransactOpts, to, amount) -} - func (_CCIPReceiverWithACK *CCIPReceiverWithACKTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { return _CCIPReceiverWithACK.contract.Transact(opts, "withdrawTokens", token, to, amount) } @@ -2769,24 +2757,24 @@ func (_CCIPReceiverWithACK *CCIPReceiverWithACK) Address() common.Address { } type CCIPReceiverWithACKInterface interface { - ACKMESSAGEHEADER(opts *bind.CallOpts) (string, error) + ACKMESSAGEHEADER(opts *bind.CallOpts) ([32]byte, error) - GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + GetFeeToken(opts *bind.CallOpts) (common.Address, error) - GetMessageStatus(opts *bind.CallOpts, messageId [32]byte) (*big.Int, error) + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) GetRouter(opts *bind.CallOpts) (common.Address, error) IsApprovedSender(opts *bind.CallOpts, sourceChainSelector uint64, senderAddr []byte) (bool, error) + IsFailedMessage(opts *bind.CallOpts, messageId [32]byte) (bool, error) + Owner(opts *bind.CallOpts) (common.Address, error) SChainConfigs(opts *bind.CallOpts, destChainSelector uint64) (SChainConfigs, error) - SFeeToken(opts *bind.CallOpts) (common.Address, error) - SMessageStatus(opts *bind.CallOpts, messageId [32]byte) (uint8, error) AbandonFailedMessage(opts *bind.TransactOpts, messageId [32]byte, receiver common.Address) (*types.Transaction, error) @@ -2809,8 +2797,6 @@ type CCIPReceiverWithACKInterface interface { UpdateRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) - WithdrawNativeToken(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) - WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) Receive(opts *bind.TransactOpts) (*types.Transaction, error) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 3204871921..4dc7e05eec 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -163,7 +163,7 @@ type OffRampStaticConfig struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNV2.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNV2\",\"name\":\"rmn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006c9638038062006c968339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fb962000cdd600039600081816102400152612a8a0152600081816102110152612f7e0152600081816101e20152818161077f01528181610986015261240c0152600081816101b201526126990152600081816117dd01526118290152615fb96000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e1461052a578063f2fde38b1461054a578063f716f99f1461055d57600080fd5b8063c673e584146104c5578063ccd37ba3146104e557600080fd5b80638da5cb5b116100b25780638da5cb5b14610484578063991a50181461049f578063a80036b4146104b257600080fd5b806379ba50971461046e57806385572ffb1461047657600080fd5b80632d04ab76116101245780633f4b04aa116101095780633f4b04aa146103365780635e36480c146103525780637437ff9f1461037257600080fd5b80632d04ab7614610310578063311cd5131461032357600080fd5b806304666f9c1461015657806305d938b51461016b57806306285c691461017e578063181f5a77146102c7575b600080fd5b6101696101643660046140f6565b610570565b005b610169610179366004614780565b610584565b61027060408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102be9190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103036040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102be91906148fb565b61016961031e3660046149a6565b610729565b610169610331366004614a59565b610cc1565b60095460405167ffffffffffffffff90911681526020016102be565b610365610360366004614aad565b610d2a565b6040516102be9190614b0a565b6104116040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102be9190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b610169610d80565b610169610151366004614b18565b6000546040516001600160a01b0390911681526020016102be565b6101696104ad366004614b67565b610e3e565b6101696104c0366004614bdb565b610e4f565b6104d86104d3366004614c48565b6111c2565b6040516102be9190614ca8565b61051c6104f3366004614d1d565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102be565b61053d610538366004614d47565b611320565b6040516102be9190614d62565b610169610558366004614db0565b61142d565b61016961056b366004614e35565b61143e565b610578611480565b610581816114dc565b50565b61058c6117da565b8151815181146105c8576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156107195760008482815181106105e7576105e7614f73565b6020026020010151905060008160200151519050600085848151811061060f5761060f614f73565b6020026020010151905080518214610653576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8281101561070a57600082828151811061067257610672614f73565b6020026020010151905080600014610701578460200151828151811061069a5761069a614f73565b6020026020010151608001518110156107015784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064015b60405180910390fd5b50600101610656565b505050508060010190506105cb565b50610724838361185b565b505050565b6000610737878901896151a5565b602081015151909150156107e357602081015160408083015190517f30dfc3080000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926330dfc308926107b292600401615409565b60006040518083038186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050505b805151511515806107f957508051602001515115155b156108f95760095460208a01359067ffffffffffffffff808316911610156108b8576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f926108819291016154eb565b600060405180830381600087803b15801561089b57600080fd5b505af11580156108af573d6000803e3d6000fd5b505050506108f7565b8160200151516000036108f7576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610c0a5760008260200151828151811061092157610921614f73565b602090810291909101015180516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f191906154fe565b15610a34576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff821660048201526024016106f8565b6000610a3f8261190b565b6020840151815491925067ffffffffffffffff908116600160a81b90920416141580610a865750826040015167ffffffffffffffff16836020015167ffffffffffffffff16115b15610ae7578251602084015160408086015190517fd5e0f0d600000000000000000000000000000000000000000000000000000000815267ffffffffffffffff938416600482015291831660248301529190911660448201526064016106f8565b606083015180610b23576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff16600090815260086020908152604080832084845290915290205415610b965783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602481018290526044016106f8565b6040840151610ba6906001615531565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff9283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016108fc565b507fd7868a16facbdde7b5c020620136316b3c266fffcb4e1e41cb6a662fe14ba3e181604051610c3a9190615559565b60405180910390a1610cb660008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611972915050565b505050505050505050565b610d01610cd0828401846155b1565b6040805160008082526020820190925290610cfb565b6060815260200190600190039081610ce65790505b5061185b565b604080516000808252602082019092529050610d24600185858585866000611972565b50505050565b6000610d38600160046155e6565b6002610d4560808561560f565b67ffffffffffffffff16610d599190615636565b610d638585611ce9565b901c166003811115610d7757610d77614ae0565b90505b92915050565b6001546001600160a01b03163314610dda5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016106f8565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610e46611480565b61058181611d30565b333014610e88576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281610ec5565b6040805180820190915260008082526020820152815260200190600190039081610e9e5790505b5060a08501515190915015610ef957610ef68460a00151856020015186606001518760000151602001518787611e96565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff1681830152808701518351600094840192610f359291016148fb565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015611042576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a190610faf9085906004016156ef565b600060405180830381600087803b158015610fc957600080fd5b505af1925050508015610fda575060015b611042573d808015611008576040519150601f19603f3d011682016040523d82523d6000602084013e61100d565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016106f891906148fb565b60408601515115801561105757506080860151155b8061106e575060608601516001600160a01b03163b155b806110ae575060608601516110ac906001600160a01b03167f85572ffb00000000000000000000000000000000000000000000000000000000611fb5565b155b156110bb57505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf97983926111339289926113889291600401615702565b6000604051808303816000875af1158015611152573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261117a919081019061573e565b5091509150816111b857806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016106f891906148fb565b5050505050505050565b6112056040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c0820152948552918201805484518184028101840190955280855292938583019390928301828280156112ae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611290575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561131057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112f2575b5050505050815250509050919050565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916113ad906157d4565b80601f01602080910402602001604051908101604052809291908181526020018280546113d9906157d4565b80156113105780601f106113fb57610100808354040283529160200191611310565b820191906000526020600020905b81548152906001019060200180831161140957505050919092525091949350505050565b611435611480565b61058181611fd1565b611446611480565b60005b815181101561147c5761147482828151811061146757611467614f73565b6020026020010151612087565b600101611449565b5050565b6000546001600160a01b031633146114da5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016106f8565b565b60005b815181101561147c5760008282815181106114fc576114fc614f73565b602002602001015190506000816020015190508067ffffffffffffffff16600003611553576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b031661157b576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916115a6906157d4565b80601f01602080910402602001604051908101604052809291908181526020018280546115d2906157d4565b801561161f5780601f106115f45761010080835404028352916020019161161f565b820191906000526020600020905b81548152906001019060200180831161160257829003601f168201915b5050505050905060008460600151905081516000036116d757805160000361165a576040516342bcdf7f60e11b815260040160405180910390fd5b60018301611668828261585e565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161172a565b808051906020012082805190602001201461172a576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024016106f8565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906117c290869061591e565b60405180910390a250505050508060010190506114df565b467f0000000000000000000000000000000000000000000000000000000000000000146114da576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016106f8565b8151600003611895576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611904576118fc8582815181106118ca576118ca614f73565b6020026020010151846118f6578583815181106118e9576118e9614f73565b60200260200101516123b8565b836123b8565b6001016118ac565b5050505050565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610d7a576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024016106f8565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119d18760a46159ec565b9050826060015115611a195784516119ea906020615636565b86516119f7906020615636565b611a029060a06159ec565b611a0c91906159ec565b611a1690826159ec565b90505b368114611a5b576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016106f8565b5081518114611aa35781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016106f8565b611aab6117da565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611af957611af9614ae0565b6002811115611b0a57611b0a614ae0565b9052509050600281602001516002811115611b2757611b27614ae0565b148015611b7b5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b6357611b63614f73565b6000918252602090912001546001600160a01b031633145b611bb1576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611c93576020820151611bcc9060016159ff565b60ff16855114611c08576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611c43576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611c55929190615a18565b604051908190038120611c6c918b90602001615a28565b604051602081830303815290604052805190602001209050611c918a82888888612d38565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b67ffffffffffffffff8216600090815260076020526040812081611d0e608085615a3c565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b80516001600160a01b0316611d58576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611eb257611eb2613f0d565b604051908082528060200260200182016040528015611ef757816020015b6040805180820190915260008082526020820152815260200190600190039081611ed05790505b50905060005b8751811015611fa957611f84888281518110611f1b57611f1b614f73565b6020026020010151888888888887818110611f3857611f38614f73565b9050602002810190611f4a9190615a63565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f1d92505050565b828281518110611f9657611f96614f73565b6020908102919091010152600101611efd565b505b9695505050505050565b6000611fc0836132c2565b8015610d775750610d778383613326565b336001600160a01b038216036120295760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016106f8565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036120b2576000604051631b3fab5160e11b81526004016106f89190615aaa565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361211f57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612174565b6060840151600182015460ff6201000090910416151590151514612174576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016106f8565b60a0840151805161010010156121a0576001604051631b3fab5160e11b81526004016106f89190615aaa565b61220684846003018054806020026020016040519081016040528092919081815260200182805480156121fc57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116121de575b50505050506133e1565b84606001511561232d5761227484846002018054806020026020016040519081016040528092919081815260200182805480156121fc576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116121de5750505050506133e1565b6080850151805161010010156122a0576002604051631b3fab5160e11b81526004016106f89190615aaa565b60408601516122b0906003615ac4565b60ff168151116122d6576003604051631b3fab5160e11b81526004016106f89190615aaa565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff84160217905561231e9060028601906020840190613e86565b5061232b8582600161344a565b505b6123398482600261344a565b805161234e9060038501906020840190613e86565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936123a79389939260028a01929190615ae0565b60405180910390a1611904846135be565b815181516040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608083901b77ffffffffffffffff00000000000000000000000000000000166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa15801561245b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247f91906154fe565b1561250b5780156124c8576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526024016106f8565b60405167ffffffffffffffff831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60006125168361190b565b6001018054612524906157d4565b80601f0160208091040260200160405190810160405280929190818152602001828054612550906157d4565b801561259d5780601f106125725761010080835404028352916020019161259d565b820191906000526020600020905b81548152906001019060200180831161258057829003601f168201915b505050602088015151929350505060008190036125e5576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560400151518114612623576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561263e5761263e613f0d565b604051908082528060200260200182016040528015612667578160200160208202803683370190505b50905060005b828110156127c05760008860200151828151811061268d5761268d614f73565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461272057805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016106f8565b8667ffffffffffffffff1681600001516020015167ffffffffffffffff1614612790578051602001516040517f6c95f1eb00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808a16600483015290911660248201526044016106f8565b61279a81866135da565b8383815181106127ac576127ac614f73565b60209081029190910101525060010161266d565b5060006127d786838a606001518b608001516136fc565b90508060000361281f576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff871660048201526024016106f8565b60005b83811015610cb65760005a905060008a60200151838151811061284757612847614f73565b6020026020010151905060006128658a836000015160600151610d2a565b9050600081600381111561287b5761287b614ae0565b14806128985750600381600381111561289657612896614ae0565b145b6128f0578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050612d30565b88156129c057600454600090600160a01b900463ffffffff1661291387426155e6565b11905080806129335750600382600381111561293157612931614ae0565b145b612975576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c1660048201526024016106f8565b8b858151811061298757612987614f73565b60200260200101516000146129ba578b85815181106129a8576129a8614f73565b60200260200101518360800181815250505b50612a21565b60008160038111156129d4576129d4614ae0565b14612a21578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe6512091016128e0565b81516080015167ffffffffffffffff1615612b10576000816003811115612a4a57612a4a614ae0565b03612b105781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612ac1928f929190600401615b8c565b6020604051808303816000875af1158015612ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0491906154fe565b612b1057505050612d30565b60008c604001518581518110612b2857612b28614f73565b6020026020010151905080518360a001515114612b8c578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e16600483015290911660248201526044016106f8565b612ba08b846000015160600151600161373a565b600080612bad85846137e2565b91509150612bc48d8660000151606001518461373a565b8b15612c34576003826003811115612bde57612bde614ae0565b03612c34576000846003811115612bf757612bf7614ae0565b14612c34578451516040517f2b11b8d90000000000000000000000000000000000000000000000000000000081526106f891908390600401615bb9565b6002826003811115612c4857612c48614ae0565b14612ca2576003826003811115612c6157612c61614ae0565b14612ca2578451606001516040517f926c5a3e0000000000000000000000000000000000000000000000000000000081526106f8918f918590600401615bd2565b84600001516000015185600001516060015167ffffffffffffffff168e67ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8c8b81518110612cfc57612cfc614f73565b602002602001015186865a612d11908e6155e6565b604051612d219493929190615bf8565b60405180910390a45050505050505b600101612822565b8251600090815b818110156111b8576000600188868460208110612d5e57612d5e614f73565b612d6b91901a601b6159ff565b898581518110612d7d57612d7d614f73565b6020026020010151898681518110612d9757612d97614f73565b602002602001015160405160008152602001604052604051612dd5949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612df7573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b03851683528152858220858701909652855480841686529397509095509293928401916101009004166002811115612e5857612e58614ae0565b6002811115612e6957612e69614ae0565b9052509050600181602001516002811115612e8657612e86614ae0565b14612ebd576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615612f00576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612d3f565b60408051808201909152600080825260208201526000612f4087602001516138ac565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe99190615c2f565b90506001600160a01b0381161580613031575061302f6001600160a01b0382167faff2afbf00000000000000000000000000000000000000000000000000000000611fb5565b155b15613073576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016106f8565b60045460009081906130959089908690600160e01b900463ffffffff16613952565b9150915060008060006131626040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b8152506040516024016131139190615c4c565b60408051601f198184030181529190526020810180516001600160e01b03167f390775370000000000000000000000000000000000000000000000000000000017905287866113886084613a80565b925092509250826131a157816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016106f891906148fb565b81516020146131e95781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016106f8565b6000828060200190518101906131ff9190615d19565b9050866001600160a01b03168c6001600160a01b0316146132945760006132308d8a61322b868a6155e6565b613952565b5090508681108061324a57508161324788836155e6565b14155b15613292576040517fa966e21f0000000000000000000000000000000000000000000000000000000081526004810183905260248101889052604481018290526064016106f8565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b60006132ee827f01ffc9a700000000000000000000000000000000000000000000000000000000613326565b8015610d7a575061331f827fffffffff00000000000000000000000000000000000000000000000000000000613326565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d915060005190508280156133ca575060208210155b80156133d65750600081115b979650505050505050565b60005b81518110156107245760ff83166000908152600360205260408120835190919084908490811061341657613416614f73565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff191690556001016133e4565b60005b8251811015610d2457600083828151811061346a5761346a614f73565b602002602001015190506000600281111561348757613487614ae0565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156134c6576134c6614ae0565b146134e7576004604051631b3fab5160e11b81526004016106f89190615aaa565b6001600160a01b038116613527576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561354d5761354d614ae0565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156135aa576135aa614ae0565b02179055509050505080600101905061344d565b60ff8116610581576009805467ffffffffffffffff1916905550565b815160208082015160409283015192516000938493613620937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615d32565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976136699794969395929491939101615d65565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016136a09190615e6a565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b60008061370a858585613ba6565b67ffffffffffffffff8716600090815260086020908152604080832093835292905220549150505b949350505050565b6000600261374960808561560f565b67ffffffffffffffff1661375d9190615636565b9050600061376b8585611ce9565b90508161377a600160046155e6565b901b19168183600381111561379157613791614ae0565b67ffffffffffffffff871660009081526007602052604081209190921b929092179182916137c0608088615a3c565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fa80036b4000000000000000000000000000000000000000000000000000000008152600090606090309063a80036b4906138269087908790600401615eca565b600060405180830381600087803b15801561384057600080fd5b505af1925050508015613851575060015b613890573d80801561387f576040519150601f19603f3d011682016040523d82523d6000602084013e613884565b606091505b506003925090506138a5565b50506040805160208101909152600081526002905b9250929050565b600081516020146138eb57816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016106f891906148fb565b6000828060200190518101906139019190615d19565b90506001600160a01b03811180613919575061040081105b15610d7a57826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016106f891906148fb565b60008060008060006139cc8860405160240161397d91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a082310000000000000000000000000000000000000000000000000000000017905288886113886084613a80565b92509250925082613a0b57816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016106f891906148fb565b6020825114613a535781516040517f78ef80240000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016106f8565b81806020019051810190613a679190615d19565b613a7182886155e6565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613aa357613aa3613f0d565b6040519080825280601f01601f191660200182016040528015613acd576020820181803683370190505b509150863b613b00577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613b33577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613b6c577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b8f5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613be7576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613bfb57506101018111155b613c18576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613c42576040516309bde33960e01b815260040160405180910390fd5b80600003613c6f5786600081518110613c5d57613c5d614f73565b60200260200101519350505050613e3e565b60008167ffffffffffffffff811115613c8a57613c8a613f0d565b604051908082528060200260200182016040528015613cb3578160200160208202803683370190505b50905060008080805b85811015613ddd5760006001821b8b811603613d175788851015613d00578c5160018601958e918110613cf157613cf1614f73565b60200260200101519050613d39565b8551600185019487918110613cf157613cf1614f73565b8b5160018401938d918110613d2e57613d2e614f73565b602002602001015190505b600089861015613d69578d5160018701968f918110613d5a57613d5a614f73565b60200260200101519050613d8b565b8651600186019588918110613d8057613d80614f73565b602002602001015190505b82851115613dac576040516309bde33960e01b815260040160405180910390fd5b613db68282613e45565b878481518110613dc857613dc8614f73565b60209081029190910101525050600101613cbc565b506001850382148015613def57508683145b8015613dfa57508581145b613e17576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613e2c57613e2c614f73565b60200260200101519750505050505050505b9392505050565b6000818310613e5d57613e588284613e63565b610d77565b610d7783835b6040805160016020820152908101839052606081018290526000906080016136de565b828054828255906000526020600020908101928215613ee8579160200282015b82811115613ee8578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613ea6565b50613ef4929150613ef8565b5090565b5b80821115613ef45760008155600101613ef9565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613f4657613f46613f0d565b60405290565b60405160a0810167ffffffffffffffff81118282101715613f4657613f46613f0d565b60405160c0810167ffffffffffffffff81118282101715613f4657613f46613f0d565b6040805190810167ffffffffffffffff81118282101715613f4657613f46613f0d565b6040516060810167ffffffffffffffff81118282101715613f4657613f46613f0d565b604051601f8201601f1916810167ffffffffffffffff8111828210171561400157614001613f0d565b604052919050565b600067ffffffffffffffff82111561402357614023613f0d565b5060051b60200190565b6001600160a01b038116811461058157600080fd5b803567ffffffffffffffff8116811461405a57600080fd5b919050565b801515811461058157600080fd5b803561405a8161405f565b600067ffffffffffffffff82111561409257614092613f0d565b50601f01601f191660200190565b600082601f8301126140b157600080fd5b81356140c46140bf82614078565b613fd8565b8181528460208386010111156140d957600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561410957600080fd5b823567ffffffffffffffff8082111561412157600080fd5b818501915085601f83011261413557600080fd5b81356141436140bf82614009565b81815260059190911b8301840190848101908883111561416257600080fd5b8585015b838110156142085780358581111561417e5760008081fd5b86016080818c03601f19018113156141965760008081fd5b61419e613f23565b898301356141ab8161402d565b815260406141ba848201614042565b8b8301526060808501356141cd8161405f565b838301529284013592898411156141e657600091508182fd5b6141f48f8d868801016140a0565b908301525085525050918601918601614166565b5098975050505050505050565b600060a0828403121561422757600080fd5b61422f613f4c565b90508135815261424160208301614042565b602082015261425260408301614042565b604082015261426360608301614042565b606082015261427460808301614042565b608082015292915050565b803561405a8161402d565b600082601f83011261429b57600080fd5b813560206142ab6140bf83614009565b82815260059290921b840181019181810190868411156142ca57600080fd5b8286015b84811015611fa957803567ffffffffffffffff808211156142ef5760008081fd5b9088019060a0828b03601f19018113156143095760008081fd5b614311613f4c565b87840135838111156143235760008081fd5b6143318d8a838801016140a0565b825250604080850135848111156143485760008081fd5b6143568e8b838901016140a0565b8a840152506060808601358581111561436f5760008081fd5b61437d8f8c838a01016140a0565b838501525060809150818601358184015250828501359250838311156143a35760008081fd5b6143b18d8a858801016140a0565b9082015286525050509183019183016142ce565b600061014082840312156143d857600080fd5b6143e0613f6f565b90506143ec8383614215565b815260a082013567ffffffffffffffff8082111561440957600080fd5b614415858386016140a0565b602084015260c084013591508082111561442e57600080fd5b61443a858386016140a0565b604084015261444b60e0850161427f565b6060840152610100840135608084015261012084013591508082111561447057600080fd5b5061447d8482850161428a565b60a08301525092915050565b600082601f83011261449a57600080fd5b813560206144aa6140bf83614009565b82815260059290921b840181019181810190868411156144c957600080fd5b8286015b84811015611fa957803567ffffffffffffffff8111156144ed5760008081fd5b6144fb8986838b01016143c5565b8452509183019183016144cd565b600082601f83011261451a57600080fd5b8135602061452a6140bf83614009565b82815260059290921b8401810191818101908684111561454957600080fd5b8286015b84811015611fa957803567ffffffffffffffff8082111561456d57600080fd5b818901915089603f83011261458157600080fd5b858201356145916140bf82614009565b81815260059190911b830160400190878101908c8311156145b157600080fd5b604085015b838110156145ea578035858111156145cd57600080fd5b6145dc8f6040838a01016140a0565b8452509189019189016145b6565b5087525050509284019250830161454d565b600082601f83011261460d57600080fd5b8135602061461d6140bf83614009565b8083825260208201915060208460051b87010193508684111561463f57600080fd5b602086015b84811015611fa95780358352918301918301614644565b600082601f83011261466c57600080fd5b8135602061467c6140bf83614009565b82815260059290921b8401810191818101908684111561469b57600080fd5b8286015b84811015611fa957803567ffffffffffffffff808211156146c05760008081fd5b9088019060a0828b03601f19018113156146da5760008081fd5b6146e2613f4c565b6146ed888501614042565b8152604080850135848111156147035760008081fd5b6147118e8b83890101614489565b8a840152506060808601358581111561472a5760008081fd5b6147388f8c838a0101614509565b83850152506080915081860135858111156147535760008081fd5b6147618f8c838a01016145fc565b918401919091525091909301359083015250835291830191830161469f565b600080604080848603121561479457600080fd5b833567ffffffffffffffff808211156147ac57600080fd5b6147b88783880161465b565b94506020915081860135818111156147cf57600080fd5b8601601f810188136147e057600080fd5b80356147ee6140bf82614009565b81815260059190911b8201840190848101908a83111561480d57600080fd5b8584015b83811015614899578035868111156148295760008081fd5b8501603f81018d1361483b5760008081fd5b8781013561484b6140bf82614009565b81815260059190911b82018a0190898101908f83111561486b5760008081fd5b928b01925b828410156148895783358252928a0192908a0190614870565b8652505050918601918601614811565b50809750505050505050509250929050565b60005b838110156148c65781810151838201526020016148ae565b50506000910152565b600081518084526148e78160208601602086016148ab565b601f01601f19169290920160200192915050565b602081526000610d7760208301846148cf565b8060608101831015610d7a57600080fd5b60008083601f84011261493157600080fd5b50813567ffffffffffffffff81111561494957600080fd5b6020830191508360208285010111156138a557600080fd5b60008083601f84011261497357600080fd5b50813567ffffffffffffffff81111561498b57600080fd5b6020830191508360208260051b85010111156138a557600080fd5b60008060008060008060008060e0898b0312156149c257600080fd5b6149cc8a8a61490e565b9750606089013567ffffffffffffffff808211156149e957600080fd5b6149f58c838d0161491f565b909950975060808b0135915080821115614a0e57600080fd5b614a1a8c838d01614961565b909750955060a08b0135915080821115614a3357600080fd5b50614a408b828c01614961565b999c989b50969995989497949560c00135949350505050565b600080600060808486031215614a6e57600080fd5b614a78858561490e565b9250606084013567ffffffffffffffff811115614a9457600080fd5b614aa08682870161491f565b9497909650939450505050565b60008060408385031215614ac057600080fd5b614ac983614042565b9150614ad760208401614042565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110614b0657614b06614ae0565b9052565b60208101610d7a8284614af6565b600060208284031215614b2a57600080fd5b813567ffffffffffffffff811115614b4157600080fd5b820160a08185031215613e3e57600080fd5b803563ffffffff8116811461405a57600080fd5b600060a08284031215614b7957600080fd5b614b81613f4c565b8235614b8c8161402d565b8152614b9a60208401614b53565b6020820152614bab60408401614b53565b6040820152614bbc60608401614b53565b60608201526080830135614bcf8161402d565b60808201529392505050565b600080600060408486031215614bf057600080fd5b833567ffffffffffffffff80821115614c0857600080fd5b614c14878388016143c5565b94506020860135915080821115614c2a57600080fd5b50614aa086828701614961565b803560ff8116811461405a57600080fd5b600060208284031215614c5a57600080fd5b610d7782614c37565b60008151808452602080850194506020840160005b83811015614c9d5781516001600160a01b031687529582019590820190600101614c78565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614cf760e0840182614c63565b90506040840151601f198483030160c0850152614d148282614c63565b95945050505050565b60008060408385031215614d3057600080fd5b614d3983614042565b946020939093013593505050565b600060208284031215614d5957600080fd5b610d7782614042565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff60408301511660608201526000606083015160808084015261373260a08401826148cf565b600060208284031215614dc257600080fd5b8135613e3e8161402d565b600082601f830112614dde57600080fd5b81356020614dee6140bf83614009565b8083825260208201915060208460051b870101935086841115614e1057600080fd5b602086015b84811015611fa9578035614e288161402d565b8352918301918301614e15565b60006020808385031215614e4857600080fd5b823567ffffffffffffffff80821115614e6057600080fd5b818501915085601f830112614e7457600080fd5b8135614e826140bf82614009565b81815260059190911b83018401908481019088831115614ea157600080fd5b8585015b8381101561420857803585811115614ebc57600080fd5b860160c0818c03601f19011215614ed35760008081fd5b614edb613f6f565b8882013581526040614eee818401614c37565b8a8301526060614eff818501614c37565b8284015260809150614f1282850161406d565b9083015260a08381013589811115614f2a5760008081fd5b614f388f8d83880101614dcd565b838501525060c0840135915088821115614f525760008081fd5b614f608e8c84870101614dcd565b9083015250845250918601918601614ea5565b634e487b7160e01b600052603260045260246000fd5b80356001600160e01b038116811461405a57600080fd5b600082601f830112614fb157600080fd5b81356020614fc16140bf83614009565b82815260069290921b84018101918181019086841115614fe057600080fd5b8286015b84811015611fa95760408189031215614ffd5760008081fd5b615005613f92565b61500e82614042565b815261501b858301614f89565b81860152835291830191604001614fe4565b600082601f83011261503e57600080fd5b8135602061504e6140bf83614009565b82815260059290921b8401810191818101908684111561506d57600080fd5b8286015b84811015611fa957803567ffffffffffffffff808211156150925760008081fd5b9088019060a0828b03601f19018113156150ac5760008081fd5b6150b4613f4c565b6150bf888501614042565b815260406150ce818601614042565b8983015260606150df818701614042565b8284015260809150818601358184015250828501359250838311156151045760008081fd5b6151128d8a858801016140a0565b908201528652505050918301918301615071565b600082601f83011261513757600080fd5b813560206151476140bf83614009565b82815260069290921b8401810191818101908684111561516657600080fd5b8286015b84811015611fa957604081890312156151835760008081fd5b61518b613f92565b81358152848201358582015283529183019160400161516a565b600060208083850312156151b857600080fd5b823567ffffffffffffffff808211156151d057600080fd5b90840190606082870312156151e457600080fd5b6151ec613fb5565b8235828111156151fb57600080fd5b8301604081890381131561520e57600080fd5b615216613f92565b82358581111561522557600080fd5b8301601f81018b1361523657600080fd5b80356152446140bf82614009565b81815260069190911b8201890190898101908d83111561526357600080fd5b928a01925b828410156152b35785848f0312156152805760008081fd5b615288613f92565b84356152938161402d565b81526152a0858d01614f89565b818d0152825292850192908a0190615268565b8452505050828701359150848211156152cb57600080fd5b6152d78a838501614fa0565b818801528352505082840135828111156152f057600080fd5b6152fc8882860161502d565b8583015250604083013593508184111561531557600080fd5b61532187858501615126565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b848110156153c057858303601f190189528151805167ffffffffffffffff908116855285820151811686860152604080830151909116908501526060808201519085015260809081015160a0918501829052906153ac818601836148cf565b9a86019a945050509083019060010161534d565b5090979650505050505050565b60008151808452602080850194506020840160005b83811015614c9d5781518051885283015183880152604090960195908201906001016153e2565b60408152600061541c6040830185615330565b8281036020840152614d1481856153cd565b805160408084528151848201819052600092602091908201906060870190855b8181101561548557835180516001600160a01b031684528501516001600160e01b031685840152928401929185019160010161544e565b50508583015187820388850152805180835290840192506000918401905b808310156154df578351805167ffffffffffffffff1683528501516001600160e01b0316858301529284019260019290920191908501906154a3565b50979650505050505050565b602081526000610d77602083018461542e565b60006020828403121561551057600080fd5b8151613e3e8161405f565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156155525761555261551b565b5092915050565b602081526000825160606020840152615575608084018261542e565b90506020840151601f19808584030160408601526155938383615330565b9250604086015191508085840301606086015250614d1482826153cd565b6000602082840312156155c357600080fd5b813567ffffffffffffffff8111156155da57600080fd5b6137328482850161465b565b81810381811115610d7a57610d7a61551b565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff8084168061562a5761562a6155f9565b92169190910692915050565b8082028115828204841417610d7a57610d7a61551b565b805182526000602067ffffffffffffffff81840151168185015260408084015160a0604087015261568160a08701826148cf565b90506060850151868203606088015261569a82826148cf565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154df57835180516001600160a01b03168352860151868301529285019260019290920191908401906156bd565b602081526000610d77602083018461564d565b608081526000615715608083018761564d565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561575357600080fd5b835161575e8161405f565b602085015190935067ffffffffffffffff81111561577b57600080fd5b8401601f8101861361578c57600080fd5b805161579a6140bf82614078565b8181528760208385010111156157af57600080fd5b6157c08260208301602086016148ab565b809450505050604084015190509250925092565b600181811c908216806157e857607f821691505b60208210810361580857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610724576000816000526020600020601f850160051c810160208610156158375750805b601f850160051c820191505b8181101561585657828155600101615843565b505050505050565b815167ffffffffffffffff81111561587857615878613f0d565b61588c8161588684546157d4565b8461580e565b602080601f8311600181146158c157600084156158a95750858301515b600019600386901b1c1916600185901b178555615856565b600085815260208120601f198616915b828110156158f0578886015182559484019460019091019084016158d1565b508582101561590e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c16606085015250600180850160808086015260008154615970816157d4565b8060a089015260c0600183166000811461599157600181146159ad576159dd565b60ff19841660c08b015260c083151560051b8b010194506159dd565b85600052602060002060005b848110156159d45781548c82018501529088019089016159b9565b8b0160c0019550505b50929998505050505050505050565b80820180821115610d7a57610d7a61551b565b60ff8181168382160190811115610d7a57610d7a61551b565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff80841680615a5757615a576155f9565b92169190910492915050565b6000808335601e19843603018112615a7a57600080fd5b83018035915067ffffffffffffffff821115615a9557600080fd5b6020019150368190038213156138a557600080fd5b6020810160058310615abe57615abe614ae0565b91905290565b60ff81811683821602908116908181146155525761555261551b565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b385784546001600160a01b031683526001948501949284019201615b13565b50508481036060860152865180825290820192508187019060005b81811015615b785782516001600160a01b031685529383019391830191600101615b53565b50505060ff85166080850152509050611fab565b600067ffffffffffffffff808616835280851660208401525060606040830152614d1460608301846148cf565b82815260406020820152600061373260408301846148cf565b67ffffffffffffffff848116825283166020820152606081016137326040830184614af6565b848152615c086020820185614af6565b608060408201526000615c1e60808301856148cf565b905082606083015295945050505050565b600060208284031215615c4157600080fd5b8151613e3e8161402d565b6020815260008251610100806020850152615c6b6101208501836148cf565b91506020850151615c88604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615cc260a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615cdf84836148cf565b935060c08701519150808685030160e0870152615cfc84836148cf565b935060e0870151915080868503018387015250611fab83826148cf565b600060208284031215615d2b57600080fd5b5051919050565b848152600067ffffffffffffffff808616602084015280851660408401525060806060830152611fab60808301846148cf565b86815260c060208201526000615d7e60c08301886148cf565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b848110156153c057601f19868403018952815160a08151818652615dfb828701826148cf565b9150508582015185820387870152615e1382826148cf565b91505060408083015186830382880152615e2d83826148cf565b92505050606080830151818701525060808083015192508582038187015250615e5681836148cf565b9a86019a9450505090830190600101615dd5565b602081526000610d776020830184615db8565b60008282518085526020808601955060208260051b8401016020860160005b848110156153c057601f19868403018952615eb88383516148cf565b98840198925090830190600101615e9c565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615f326101808501836148cf565b91506040860151603f198086850301610100870152615f5184836148cf565b935060608801519150615f706101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615f978282615db8565b9150508281036020840152614d148185615e7d56fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b50604051620074ea380380620074ea8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161680d62000cdd6000396000818161025a0152612e7d01526000818161021e015261338b0152600081816101e20152818161081101528181610a4901526127d40152600081816101b20152612a6e015260008181611a2f0152611a7b015261680d6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146105af578063f2fde38b146105cf578063f716f99f146105e257600080fd5b8063c673e5841461054a578063ccd37ba31461056a57600080fd5b80638da5cb5b116100b25780638da5cb5b146104fc578063991a501814610524578063a80036b41461053757600080fd5b806379ba5097146104e657806385572ffb146104ee57600080fd5b80632d04ab76116101245780633f4b04aa116101095780633f4b04aa1461036a5780635e36480c146103865780637437ff9f146103a657600080fd5b80632d04ab7614610344578063311cd5131461035757600080fd5b806304666f9c1461015657806305d938b51461016b57806306285c691461017e578063181f5a77146102fb575b600080fd5b610169610164366004614759565b6105f5565b005b610169610179366004614de5565b610609565b61029760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b6040516102f29190815167ffffffffffffffff16815260208083015173ffffffffffffffffffffffffffffffffffffffff90811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103376040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102f29190614f60565b61016961035236600461500b565b6107ae565b6101696103653660046150be565b610da8565b60095460405167ffffffffffffffff90911681526020016102f2565b610399610394366004615112565b610e11565b6040516102f29190615188565b61047c6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260045473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff74010000000000000000000000000000000000000000830481166020850152780100000000000000000000000000000000000000000000000083048116948401949094527c01000000000000000000000000000000000000000000000000000000009091049092166060820152600554909116608082015290565b6040516102f29190600060a08201905073ffffffffffffffffffffffffffffffffffffffff808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b610169610e67565b610169610151366004615196565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f2565b6101696105323660046151e5565b610f64565b610169610545366004615259565b610f75565b61055d6105583660046152c6565b611329565b6040516102f29190615333565b6105a16105783660046153a8565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102f2565b6105c26105bd3660046153d2565b6114a1565b6040516102f291906153ed565b6101696105dd366004615448565b6115de565b6101696105f03660046154cd565b6115ef565b6105fd611631565b610606816116b4565b50565b610611611a2c565b81518151811461064d576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561079e57600084828151811061066c5761066c61560b565b602002602001015190506000816020015151905060008584815181106106945761069461560b565b60200260200101519050805182146106d8576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8281101561078f5760008282815181106106f7576106f761560b565b6020026020010151905080600014610786578460200151828151811061071f5761071f61560b565b6020026020010151608001518110156107865784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064015b60405180910390fd5b506001016106db565b50505050806001019050610650565b506107a98383611aad565b505050565b60006107bc8789018961586c565b6020810151519091501561087557602081015160408083015190517f30dfc30800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016926330dfc3089261084492600401615ad0565b60006040518083038186803b15801561085c57600080fd5b505afa158015610870573d6000803e3d6000fd5b505050505b8051515115158061088b57508051602001515115155b156109af5760095460208a01359067ffffffffffffffff8083169116101561096e57600980547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790556004805483516040517f3937306f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921692633937306f92610937929101615be9565b600060405180830381600087803b15801561095157600080fd5b505af1158015610965573d6000803e3d6000fd5b505050506109ad565b8160200151516000036109ad576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610cf1576000826020015182815181106109d7576109d761560b565b602090810291909101015180516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608083901b1660048201529192509073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab49190615bfc565b15610af7576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161077d565b6000610b0282611b5d565b6020840151815491925067ffffffffffffffff908116750100000000000000000000000000000000000000000090920416141580610b5b5750826040015167ffffffffffffffff16836020015167ffffffffffffffff16115b15610bbc578251602084015160408086015190517fd5e0f0d600000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9384166004820152918316602483015291909116604482015260640161077d565b606083015180610bf8576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff16600090815260086020908152604080832084845290915290205415610c6b5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024810182905260440161077d565b6040840151610c7b906001615c48565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000067ffffffffffffffff9283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016109b2565b507fd7868a16facbdde7b5c020620136316b3c266fffcb4e1e41cb6a662fe14ba3e181604051610d219190615c70565b60405180910390a1610d9d60008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611bd5915050565b505050505050505050565b610de8610db782840184615cc8565b6040805160008082526020820190925290610de2565b6060815260200190600190039081610dcd5790505b50611aad565b604080516000808252602082019092529050610e0b600185858585866000611bd5565b50505050565b6000610e1f60016004615cfd565b6002610e2c608085615d3f565b67ffffffffffffffff16610e409190615d66565b610e4a8585611f59565b901c166003811115610e5e57610e5e615145565b90505b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161077d565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f6c611631565b61060681611fa0565b333014610fae576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281610feb565b6040805180820190915260008082526020820152815260200190600190039081610fc45790505b5060a0850151519091501561101f5761101c8460a00151856020015186606001518760000151602001518787612183565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff168183015280870151835160009484019261105b929101614f60565b60408051601f198184030181529181529082528781015160208301520183905260055490915073ffffffffffffffffffffffffffffffffffffffff168015611182576040517f08d450a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906308d450a1906110ef908590600401615e2c565b600060405180830381600087803b15801561110957600080fd5b505af192505050801561111a575060015b611182573d808015611148576040519150601f19603f3d011682016040523d82523d6000602084013e61114d565b606091505b50806040517f09c2532500000000000000000000000000000000000000000000000000000000815260040161077d9190614f60565b60408601515115801561119757506080860151155b806111bb5750606086015173ffffffffffffffffffffffffffffffffffffffff163b155b80611208575060608601516112069073ffffffffffffffffffffffffffffffffffffffff167f85572ffb000000000000000000000000000000000000000000000000000000006122a2565b155b1561121557505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf97983000000000000000000000000000000000000000000000000000000008152849373ffffffffffffffffffffffffffffffffffffffff90931692633cf979839261129a9289926113889291600401615e3f565b6000604051808303816000875af11580156112b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e19190810190615e88565b50915091508161131f57806040517f0a8d6e8c00000000000000000000000000000000000000000000000000000000815260040161077d9190614f60565b5050505050505050565b61136c6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561142257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116113f7575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561149157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611466575b5050505050815250509050919050565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff8781168452600683529286902086519485018752805473ffffffffffffffffffffffffffffffffffffffff8116865274010000000000000000000000000000000000000000810460ff16151593860193909352750100000000000000000000000000000000000000000090920490921694830194909452600184018054939492939184019161155e90615f1e565b80601f016020809104026020016040519081016040528092919081815260200182805461158a90615f1e565b80156114915780601f106115ac57610100808354040283529160200191611491565b820191906000526020600020905b8154815290600101906020018083116115ba57505050919092525091949350505050565b6115e6611631565b610606816122be565b6115f7611631565b60005b815181101561162d576116258282815181106116185761161861560b565b60200260200101516123b3565b6001016115fa565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146116b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161077d565b565b60005b815181101561162d5760008282815181106116d4576116d461560b565b602002602001015190506000816020015190508067ffffffffffffffff1660000361172b576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815173ffffffffffffffffffffffffffffffffffffffff16611779576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916117a490615f1e565b80601f01602080910402602001604051908101604052809291908181526020018280546117d090615f1e565b801561181d5780601f106117f25761010080835404028352916020019161181d565b820191906000526020600020905b81548152906001019060200180831161180057829003601f168201915b505050505090506000846060015190508151600003611900578051600003611871576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001830161187f8282615fc1565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000017835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611953565b8080519060200120828051906020012014611953576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8516600482015260240161077d565b6040808601518454875173ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000009215157401000000000000000000000000000000000000000002929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b90611a149086906160bd565b60405180910390a250505050508060010190506116b7565b467f0000000000000000000000000000000000000000000000000000000000000000146116b2576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161077d565b8151600003611ae7576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611b5657611b4e858281518110611b1c57611b1c61560b565b602002602001015184611b4857858381518110611b3b57611b3b61560b565b6020026020010151612780565b83612780565b600101611afe565b5050505050565b67ffffffffffffffff81166000908152600660205260408120805474010000000000000000000000000000000000000000900460ff16610e61576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161077d565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611c348760a46161b6565b9050826060015115611c7c578451611c4d906020615d66565b8651611c5a906020615d66565b611c659060a06161b6565b611c6f91906161b6565b611c7990826161b6565b90505b368114611cbe576040517f8e1192e10000000000000000000000000000000000000000000000000000000081526004810182905236602482015260440161077d565b5081518114611d065781516040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101919091526024810182905260440161077d565b611d0e611a2c565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611d5c57611d5c615145565b6002811115611d6d57611d6d615145565b9052509050600281602001516002811115611d8a57611d8a615145565b148015611deb5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611dc657611dc661560b565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b611e21576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611f03576020820151611e3c9060016161c9565b60ff16855114611e78576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611eb3576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611ec59291906161e2565b604051908190038120611edc918b906020016161f2565b604051602081830303815290604052805190602001209050611f018a8288888861312b565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b67ffffffffffffffff8216600090815260076020526040812081611f7e608085616206565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b805173ffffffffffffffffffffffffffffffffffffffff16611fee576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516004805460208085018051604080880180516060808b01805173ffffffffffffffffffffffffffffffffffffffff9b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a177401000000000000000000000000000000000000000063ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16939093177c010000000000000000000000000000000000000000000000000000000093871693909302929092179098556080808b018051600580547fffffffffffffffffffffffff000000000000000000000000000000000000000016918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff81111561219f5761219f61454a565b6040519080825280602002602001820160405280156121e457816020015b60408051808201909152600080825260208201528152602001906001900390816121bd5790505b50905060005b8751811015612296576122718882815181106122085761220861560b565b60200260200101518888888888878181106122255761222561560b565b9050602002810190612237919061622d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061331d92505050565b8282815181106122835761228361560b565b60209081029190910101526001016121ea565b505b9695505050505050565b60006122ad83613765565b8015610e5e5750610e5e83836137c9565b3373ffffffffffffffffffffffffffffffffffffffff82160361233d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161077d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036123f75760006040517f367f56a200000000000000000000000000000000000000000000000000000000815260040161077d9190616292565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361246457606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff9092169190911790556124b9565b6060840151600182015460ff62010000909104161515901515146124b9576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff8416600482015260240161077d565b60a0840151805161010010156124fe5760016040517f367f56a200000000000000000000000000000000000000000000000000000000815260040161077d9190616292565b612571848460030180548060200260200160405190810160405280929190818152602001828054801561256757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161253c575b5050505050613899565b8460600151156126d7576125ec84846002018054806020026020016040519081016040528092919081815260200182805480156125675760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161253c575050505050613899565b6080850151805161010010156126315760026040517f367f56a200000000000000000000000000000000000000000000000000000000815260040161077d9190616292565b60408601516126419060036162ac565b60ff168151116126805760036040517f367f56a200000000000000000000000000000000000000000000000000000000815260040161077d9190616292565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff8416021790556126c890600286019060208401906144ab565b506126d58582600161392c565b505b6126e38482600261392c565b80516126f890600385019060208401906144ab565b506040858101516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361276f9389939260028a019291906162c8565b60405180910390a1611b5684613b1b565b815181516040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608083901b77ffffffffffffffff00000000000000000000000000000000166004820152901515907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632cbc26bb90602401602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128549190615bfc565b156128e057801561289d576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015260240161077d565b60405167ffffffffffffffff831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60006128eb83611b5d565b60010180546128f990615f1e565b80601f016020809104026020016040519081016040528092919081815260200182805461292590615f1e565b80156129725780601f1061294757610100808354040283529160200191612972565b820191906000526020600020905b81548152906001019060200180831161295557829003601f168201915b505050602088015151929350505060008190036129ba576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85604001515181146129f8576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115612a1357612a1361454a565b604051908082528060200260200182016040528015612a3c578160200160208202803683370190505b50905060005b82811015612b9557600088602001518281518110612a6257612a6261560b565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff1614612af557805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161077d565b8667ffffffffffffffff1681600001516020015167ffffffffffffffff1614612b65578051602001516040517f6c95f1eb00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808a166004830152909116602482015260440161077d565b612b6f8186613b4e565b838381518110612b8157612b8161560b565b602090810291909101015250600101612a42565b506000612bac86838a606001518b60800151613c70565b905080600003612bf4576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8716600482015260240161077d565b60005b83811015610d9d5760005a905060008a602001518381518110612c1c57612c1c61560b565b602002602001015190506000612c3a8a836000015160600151610e11565b90506000816003811115612c5057612c50615145565b1480612c6d57506003816003811115612c6b57612c6b615145565b145b612cc5578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050613123565b8815612da65760045460009074010000000000000000000000000000000000000000900463ffffffff16612cf98742615cfd565b1190508080612d1957506003826003811115612d1757612d17615145565b145b612d5b576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015260240161077d565b8b8581518110612d6d57612d6d61560b565b6020026020010151600014612da0578b8581518110612d8e57612d8e61560b565b60200260200101518360800181815250505b50612e07565b6000816003811115612dba57612dba615145565b14612e07578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612cb5565b81516080015167ffffffffffffffff1615612f03576000816003811115612e3057612e30615145565b03612f035781516080015160208301516040517fe0e03cae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612eb4928f92919060040161638e565b6020604051808303816000875af1158015612ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef79190615bfc565b612f0357505050613123565b60008c604001518581518110612f1b57612f1b61560b565b6020026020010151905080518360a001515114612f7f578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e166004830152909116602482015260440161077d565b612f938b8460000151606001516001613cae565b600080612fa08584613d56565b91509150612fb78d86600001516060015184613cae565b8b15613027576003826003811115612fd157612fd1615145565b03613027576000846003811115612fea57612fea615145565b14613027578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261077d919083906004016163bb565b600282600381111561303b5761303b615145565b1461309557600382600381111561305457613054615145565b14613095578451606001516040517f926c5a3e00000000000000000000000000000000000000000000000000000000815261077d918f9185906004016163d4565b84600001516000015185600001516060015167ffffffffffffffff168e67ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8c8b815181106130ef576130ef61560b565b602002602001015186865a613104908e615cfd565b60405161311494939291906163fa565b60405180910390a45050505050505b600101612bf7565b8251600090815b8181101561131f5760006001888684602081106131515761315161560b565b61315e91901a601b6161c9565b8985815181106131705761317061560b565b602002602001015189868151811061318a5761318a61560b565b6020026020010151604051600081526020016040526040516131c8949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156131ea573d6000803e3d6000fd5b505060408051601f1981015160ff808e1660009081526003602090815285822073ffffffffffffffffffffffffffffffffffffffff85168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561325857613258615145565b600281111561326957613269615145565b905250905060018160200151600281111561328657613286615145565b146132bd576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615613300576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050613132565b604080518082019091526000808252602082015260006133408760200151613e20565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa1580156133d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f69190616431565b905073ffffffffffffffffffffffffffffffffffffffff81161580613458575061345673ffffffffffffffffffffffffffffffffffffffff82167faff2afbf000000000000000000000000000000000000000000000000000000006122a2565b155b156134a7576040517fae9b4ce900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161077d565b60045460009081906134e290899086907c0100000000000000000000000000000000000000000000000000000000900463ffffffff16613ed3565b9150915060008060006135de6040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018f6060015181526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018f6000015181526020018f6040015181526020018b81525060405160240161357a919061644e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f390775370000000000000000000000000000000000000000000000000000000017905287866113886084614023565b9250925092508261361d57816040517fe1cd550900000000000000000000000000000000000000000000000000000000815260040161077d9190614f60565b81516020146136655781516040517f78ef802400000000000000000000000000000000000000000000000000000000815260206004820152602481019190915260440161077d565b60008280602001905181019061367b9190616535565b90508673ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161461372a5760006136c68d8a6136c1868a615cfd565b613ed3565b509050868110806136e05750816136dd8883615cfd565b14155b15613728576040517fa966e21f00000000000000000000000000000000000000000000000000000000815260048101839052602481018890526044810182905260640161077d565b505b6040805180820190915273ffffffffffffffffffffffffffffffffffffffff9098168852602088015250949550505050505095945050505050565b6000613791827f01ffc9a7000000000000000000000000000000000000000000000000000000006137c9565b8015610e6157506137c2827fffffffff000000000000000000000000000000000000000000000000000000006137c9565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613882575060208210155b801561388e5750600081115b979650505050505050565b60005b81518110156107a95760ff8316600090815260036020526040812083519091908490849081106138ce576138ce61560b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560010161389c565b60005b8251811015610e0b57600083828151811061394c5761394c61560b565b602002602001015190506000600281111561396957613969615145565b60ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461010090041660028111156139b5576139b5615145565b146139ef5760046040517f367f56a200000000000000000000000000000000000000000000000000000000815260040161077d9190616292565b73ffffffffffffffffffffffffffffffffffffffff8116613a3c576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff168152602001846002811115613a6257613a62615145565b905260ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845282529091208351815493167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841681178255918401519092909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001617610100836002811115613b0757613b07615145565b02179055509050505080600101905061392f565b60ff811661060657600980547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905550565b815160208082015160409283015192516000938493613b94937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f9390929188910161654e565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d01519501519597613bdd9794969395929491939101616581565b604051602081830303815290604052805190602001208560400151805190602001208660a00151604051602001613c149190616693565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b600080613c7e858585614149565b67ffffffffffffffff8716600090815260086020908152604080832093835292905220549150505b949350505050565b60006002613cbd608085615d3f565b67ffffffffffffffff16613cd19190615d66565b90506000613cdf8585611f59565b905081613cee60016004615cfd565b901b191681836003811115613d0557613d05615145565b67ffffffffffffffff871660009081526007602052604081209190921b92909217918291613d34608088616206565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fa80036b4000000000000000000000000000000000000000000000000000000008152600090606090309063a80036b490613d9a90879087906004016166f3565b600060405180830381600087803b158015613db457600080fd5b505af1925050508015613dc5575060015b613e04573d808015613df3576040519150601f19603f3d011682016040523d82523d6000602084013e613df8565b606091505b50600392509050613e19565b50506040805160208101909152600081526002905b9250929050565b60008151602014613e5f57816040517f8d666f6000000000000000000000000000000000000000000000000000000000815260040161077d9190614f60565b600082806020019051810190613e759190616535565b905073ffffffffffffffffffffffffffffffffffffffff811180613e9a575061040081105b15610e6157826040517f8d666f6000000000000000000000000000000000000000000000000000000000815260040161077d9190614f60565b6000806000806000613f6f88604051602401613f0b919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905288886113886084614023565b92509250925082613fae57816040517fe1cd550900000000000000000000000000000000000000000000000000000000815260040161077d9190614f60565b6020825114613ff65781516040517f78ef802400000000000000000000000000000000000000000000000000000000815260206004820152602481019190915260440161077d565b8180602001905181019061400a9190616535565b6140148288615cfd565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff8111156140465761404661454a565b6040519080825280601f01601f191660200182016040528015614070576020820181803683370190505b509150863b6140a3577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a858110156140d6577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b859003604081048103871061410f577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156141325750835b808352806000602085013e50955095509592505050565b825182516000919081830361418a576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610101821180159061419e57506101018111155b6141d4576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82820101610100811115614235576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000361426257866000815181106142505761425061560b565b60200260200101519350505050614463565b60008167ffffffffffffffff81111561427d5761427d61454a565b6040519080825280602002602001820160405280156142a6578160200160208202803683370190505b50905060008080805b858110156143e95760006001821b8b81160361430a57888510156142f3578c5160018601958e9181106142e4576142e461560b565b6020026020010151905061432c565b85516001850194879181106142e4576142e461560b565b8b5160018401938d9181106143215761432161560b565b602002602001015190505b60008986101561435c578d5160018701968f91811061434d5761434d61560b565b6020026020010151905061437e565b86516001860195889181106143735761437361560b565b602002602001015190505b828511156143b8576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6143c2828261446a565b8784815181106143d4576143d461560b565b602090810291909101015250506001016142af565b5060018503821480156143fb57508683145b801561440657508581145b61443c576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360018603815181106144515761445161560b565b60200260200101519750505050505050505b9392505050565b60008183106144825761447d8284614488565b610e5e565b610e5e83835b604080516001602082015290810183905260608101829052600090608001613c52565b828054828255906000526020600020908101928215614525579160200282015b8281111561452557825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906144cb565b50614531929150614535565b5090565b5b808211156145315760008155600101614536565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561459c5761459c61454a565b60405290565b60405160a0810167ffffffffffffffff8111828210171561459c5761459c61454a565b60405160c0810167ffffffffffffffff8111828210171561459c5761459c61454a565b6040805190810167ffffffffffffffff8111828210171561459c5761459c61454a565b6040516060810167ffffffffffffffff8111828210171561459c5761459c61454a565b604051601f8201601f1916810167ffffffffffffffff811182821017156146575761465761454a565b604052919050565b600067ffffffffffffffff8211156146795761467961454a565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461060657600080fd5b803567ffffffffffffffff811681146146bd57600080fd5b919050565b801515811461060657600080fd5b80356146bd816146c2565b600067ffffffffffffffff8211156146f5576146f561454a565b50601f01601f191660200190565b600082601f83011261471457600080fd5b8135614727614722826146db565b61462e565b81815284602083860101111561473c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561476c57600080fd5b823567ffffffffffffffff8082111561478457600080fd5b818501915085601f83011261479857600080fd5b81356147a66147228261465f565b81815260059190911b830184019084810190888311156147c557600080fd5b8585015b8381101561486b578035858111156147e15760008081fd5b86016080818c03601f19018113156147f95760008081fd5b614801614579565b8983013561480e81614683565b8152604061481d8482016146a5565b8b830152606080850135614830816146c2565b8383015292840135928984111561484957600091508182fd5b6148578f8d86880101614703565b9083015250855250509186019186016147c9565b5098975050505050505050565b600060a0828403121561488a57600080fd5b6148926145a2565b9050813581526148a4602083016146a5565b60208201526148b5604083016146a5565b60408201526148c6606083016146a5565b60608201526148d7608083016146a5565b608082015292915050565b80356146bd81614683565b600082601f8301126148fe57600080fd5b8135602061490e6147228361465f565b82815260059290921b8401810191818101908684111561492d57600080fd5b8286015b8481101561229657803567ffffffffffffffff808211156149525760008081fd5b818901915060a080601f19848d0301121561496d5760008081fd5b6149756145a2565b87840135838111156149875760008081fd5b6149958d8a83880101614703565b825250604080850135848111156149ac5760008081fd5b6149ba8e8b83890101614703565b8a84015250606080860135858111156149d35760008081fd5b6149e18f8c838a0101614703565b83850152506080915081860135818401525082850135925083831115614a075760008081fd5b614a158d8a85880101614703565b908201528652505050918301918301614931565b60006101408284031215614a3c57600080fd5b614a446145c5565b9050614a508383614878565b815260a082013567ffffffffffffffff80821115614a6d57600080fd5b614a7985838601614703565b602084015260c0840135915080821115614a9257600080fd5b614a9e85838601614703565b6040840152614aaf60e085016148e2565b60608401526101008401356080840152610120840135915080821115614ad457600080fd5b50614ae1848285016148ed565b60a08301525092915050565b600082601f830112614afe57600080fd5b81356020614b0e6147228361465f565b82815260059290921b84018101918181019086841115614b2d57600080fd5b8286015b8481101561229657803567ffffffffffffffff811115614b515760008081fd5b614b5f8986838b0101614a29565b845250918301918301614b31565b600082601f830112614b7e57600080fd5b81356020614b8e6147228361465f565b82815260059290921b84018101918181019086841115614bad57600080fd5b8286015b8481101561229657803567ffffffffffffffff80821115614bd157600080fd5b818901915089603f830112614be557600080fd5b85820135614bf56147228261465f565b81815260059190911b830160400190878101908c831115614c1557600080fd5b604085015b83811015614c4e57803585811115614c3157600080fd5b614c408f6040838a0101614703565b845250918901918901614c1a565b50875250505092840192508301614bb1565b600082601f830112614c7157600080fd5b81356020614c816147228361465f565b8083825260208201915060208460051b870101935086841115614ca357600080fd5b602086015b848110156122965780358352918301918301614ca8565b600082601f830112614cd057600080fd5b81356020614ce06147228361465f565b82815260059290921b84018101918181019086841115614cff57600080fd5b8286015b8481101561229657803567ffffffffffffffff80821115614d245760008081fd5b818901915060a080601f19848d03011215614d3f5760008081fd5b614d476145a2565b614d528885016146a5565b815260408085013584811115614d685760008081fd5b614d768e8b83890101614aed565b8a8401525060608086013585811115614d8f5760008081fd5b614d9d8f8c838a0101614b6d565b8385015250608091508186013585811115614db85760008081fd5b614dc68f8c838a0101614c60565b9184019190915250919093013590830152508352918301918301614d03565b6000806040808486031215614df957600080fd5b833567ffffffffffffffff80821115614e1157600080fd5b614e1d87838801614cbf565b9450602091508186013581811115614e3457600080fd5b8601601f81018813614e4557600080fd5b8035614e536147228261465f565b81815260059190911b8201840190848101908a831115614e7257600080fd5b8584015b83811015614efe57803586811115614e8e5760008081fd5b8501603f81018d13614ea05760008081fd5b87810135614eb06147228261465f565b81815260059190911b82018a0190898101908f831115614ed05760008081fd5b928b01925b82841015614eee5783358252928a0192908a0190614ed5565b8652505050918601918601614e76565b50809750505050505050509250929050565b60005b83811015614f2b578181015183820152602001614f13565b50506000910152565b60008151808452614f4c816020860160208601614f10565b601f01601f19169290920160200192915050565b602081526000610e5e6020830184614f34565b8060608101831015610e6157600080fd5b60008083601f840112614f9657600080fd5b50813567ffffffffffffffff811115614fae57600080fd5b602083019150836020828501011115613e1957600080fd5b60008083601f840112614fd857600080fd5b50813567ffffffffffffffff811115614ff057600080fd5b6020830191508360208260051b8501011115613e1957600080fd5b60008060008060008060008060e0898b03121561502757600080fd5b6150318a8a614f73565b9750606089013567ffffffffffffffff8082111561504e57600080fd5b61505a8c838d01614f84565b909950975060808b013591508082111561507357600080fd5b61507f8c838d01614fc6565b909750955060a08b013591508082111561509857600080fd5b506150a58b828c01614fc6565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156150d357600080fd5b6150dd8585614f73565b9250606084013567ffffffffffffffff8111156150f957600080fd5b61510586828701614f84565b9497909650939450505050565b6000806040838503121561512557600080fd5b61512e836146a5565b915061513c602084016146a5565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061518457615184615145565b9052565b60208101610e618284615174565b6000602082840312156151a857600080fd5b813567ffffffffffffffff8111156151bf57600080fd5b820160a0818503121561446357600080fd5b803563ffffffff811681146146bd57600080fd5b600060a082840312156151f757600080fd5b6151ff6145a2565b823561520a81614683565b8152615218602084016151d1565b6020820152615229604084016151d1565b604082015261523a606084016151d1565b6060820152608083013561524d81614683565b60808201529392505050565b60008060006040848603121561526e57600080fd5b833567ffffffffffffffff8082111561528657600080fd5b61529287838801614a29565b945060208601359150808211156152a857600080fd5b5061510586828701614fc6565b803560ff811681146146bd57600080fd5b6000602082840312156152d857600080fd5b610e5e826152b5565b60008151808452602080850194506020840160005b8381101561532857815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016152f6565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a084015261538260e08401826152e1565b90506040840151601f198483030160c085015261539f82826152e1565b95945050505050565b600080604083850312156153bb57600080fd5b6153c4836146a5565b946020939093013593505050565b6000602082840312156153e457600080fd5b610e5e826146a5565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260208201511515604082015267ffffffffffffffff604083015116606082015260006060830151608080840152613ca660a0840182614f34565b60006020828403121561545a57600080fd5b813561446381614683565b600082601f83011261547657600080fd5b813560206154866147228361465f565b8083825260208201915060208460051b8701019350868411156154a857600080fd5b602086015b848110156122965780356154c081614683565b83529183019183016154ad565b600060208083850312156154e057600080fd5b823567ffffffffffffffff808211156154f857600080fd5b818501915085601f83011261550c57600080fd5b813561551a6147228261465f565b81815260059190911b8301840190848101908883111561553957600080fd5b8585015b8381101561486b5780358581111561555457600080fd5b860160c0818c03601f1901121561556b5760008081fd5b6155736145c5565b88820135815260406155868184016152b5565b8a83015260606155978185016152b5565b82840152608091506155aa8285016146d0565b9083015260a083810135898111156155c25760008081fd5b6155d08f8d83880101615465565b838501525060c08401359150888211156155ea5760008081fd5b6155f88e8c84870101615465565b908301525084525091860191860161553d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146146bd57600080fd5b600082601f83011261567757600080fd5b813560206156876147228361465f565b82815260069290921b840181019181810190868411156156a657600080fd5b8286015b8481101561229657604081890312156156c35760008081fd5b6156cb6145e8565b6156d4826146a5565b81526156e185830161563a565b818601528352918301916040016156aa565b600082601f83011261570457600080fd5b813560206157146147228361465f565b82815260059290921b8401810191818101908684111561573357600080fd5b8286015b8481101561229657803567ffffffffffffffff808211156157585760008081fd5b818901915060a080601f19848d030112156157735760008081fd5b61577b6145a2565b6157868885016146a5565b815260406157958186016146a5565b8983015260606157a68187016146a5565b8284015260809150818601358184015250828501359250838311156157cb5760008081fd5b6157d98d8a85880101614703565b908201528652505050918301918301615737565b600082601f8301126157fe57600080fd5b8135602061580e6147228361465f565b82815260069290921b8401810191818101908684111561582d57600080fd5b8286015b84811015612296576040818903121561584a5760008081fd5b6158526145e8565b813581528482013585820152835291830191604001615831565b6000602080838503121561587f57600080fd5b823567ffffffffffffffff8082111561589757600080fd5b90840190606082870312156158ab57600080fd5b6158b361460b565b8235828111156158c257600080fd5b830160408189038113156158d557600080fd5b6158dd6145e8565b8235858111156158ec57600080fd5b8301601f81018b136158fd57600080fd5b803561590b6147228261465f565b81815260069190911b8201890190898101908d83111561592a57600080fd5b928a01925b8284101561597a5785848f0312156159475760008081fd5b61594f6145e8565b843561595a81614683565b8152615967858d0161563a565b818d0152825292850192908a019061592f565b84525050508287013591508482111561599257600080fd5b61599e8a838501615666565b818801528352505082840135828111156159b757600080fd5b6159c3888286016156f3565b858301525060408301359350818411156159dc57600080fd5b6159e8878585016157ed565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b84811015615a8757858303601f190189528151805167ffffffffffffffff908116855285820151811686860152604080830151909116908501526060808201519085015260809081015160a091850182905290615a7381860183614f34565b9a86019a9450505090830190600101615a14565b5090979650505050505050565b60008151808452602080850194506020840160005b83811015615328578151805188528301518388015260409096019590820190600101615aa9565b604081526000615ae360408301856159f7565b828103602084015261539f8185615a94565b805160408084528151848201819052600092602091908201906060870190855b81811015615b6e578351805173ffffffffffffffffffffffffffffffffffffffff1684528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16858401529284019291850191600101615b15565b50508583015187820388850152805180835290840192506000918401905b80831015615bdd578351805167ffffffffffffffff1683528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1685830152928401926001929092019190850190615b8c565b50979650505050505050565b602081526000610e5e6020830184615af5565b600060208284031215615c0e57600080fd5b8151614463816146c2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115615c6957615c69615c19565b5092915050565b602081526000825160606020840152615c8c6080840182615af5565b90506020840151601f1980858403016040860152615caa83836159f7565b925060408601519150808584030160608601525061539f8282615a94565b600060208284031215615cda57600080fd5b813567ffffffffffffffff811115615cf157600080fd5b613ca684828501614cbf565b81810381811115610e6157610e61615c19565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680615d5a57615d5a615d10565b92169190910692915050565b8082028115828204841417610e6157610e61615c19565b805182526000602067ffffffffffffffff81840151168185015260408084015160a06040870152615db160a0870182614f34565b905060608501518682036060880152615dca8282614f34565b608087810151898303918a01919091528051808352908601935060009250908501905b80831015615bdd578351805173ffffffffffffffffffffffffffffffffffffffff16835286015186830152928501926001929092019190840190615ded565b602081526000610e5e6020830184615d7d565b608081526000615e526080830187615d7d565b61ffff95909516602083015250604081019290925273ffffffffffffffffffffffffffffffffffffffff16606090910152919050565b600080600060608486031215615e9d57600080fd5b8351615ea8816146c2565b602085015190935067ffffffffffffffff811115615ec557600080fd5b8401601f81018613615ed657600080fd5b8051615ee4614722826146db565b818152876020838501011115615ef957600080fd5b615f0a826020830160208601614f10565b809450505050604084015190509250925092565b600181811c90821680615f3257607f821691505b602082108103615f6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156107a9576000816000526020600020601f850160051c81016020861015615f9a5750805b601f850160051c820191505b81811015615fb957828155600101615fa6565b505050505050565b815167ffffffffffffffff811115615fdb57615fdb61454a565b615fef81615fe98454615f1e565b84615f71565b602080601f831160018114616042576000841561600c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555615fb9565b600085815260208120601f198616915b8281101561607157888601518255948401946001909101908401616052565b50858210156160ad57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835473ffffffffffffffffffffffffffffffffffffffff8116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c1660608501525060018085016080808601526000815461611c81615f1e565b8060a089015260c0600183166000811461613d5760018114616177576161a7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841660c08b015260c083151560051b8b010194506161a7565b85600052602060002060005b8481101561619e5781548c8201850152908801908901616183565b8b0160c0019550505b50929998505050505050505050565b80820180821115610e6157610e61615c19565b60ff8181168382160190811115610e6157610e61615c19565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff8084168061622157616221615d10565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261626257600080fd5b83018035915067ffffffffffffffff82111561627d57600080fd5b602001915036819003821315613e1957600080fd5b60208101600583106162a6576162a6615145565b91905290565b60ff8181168382160290811690818114615c6957615c69615c19565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b8181101561632d57845473ffffffffffffffffffffffffffffffffffffffff16835260019485019492840192016162fb565b50508481036060860152865180825290820192508187019060005b8181101561637a57825173ffffffffffffffffffffffffffffffffffffffff1685529383019391830191600101616348565b50505060ff85166080850152509050612298565b600067ffffffffffffffff80861683528085166020840152506060604083015261539f6060830184614f34565b828152604060208201526000613ca66040830184614f34565b67ffffffffffffffff84811682528316602082015260608101613ca66040830184615174565b84815261640a6020820185615174565b6080604082015260006164206080830185614f34565b905082606083015295945050505050565b60006020828403121561644357600080fd5b815161446381614683565b602081526000825161010080602085015261646d610120850183614f34565b9150602085015161648a604086018267ffffffffffffffff169052565b50604085015173ffffffffffffffffffffffffffffffffffffffff81166060860152506060850151608085015260808501516164de60a086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a0850151601f19808685030160c08701526164fb8483614f34565b935060c08701519150808685030160e08701526165188483614f34565b935060e08701519150808685030183870152506122988382614f34565b60006020828403121561654757600080fd5b5051919050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526122986080830184614f34565b86815260c06020820152600061659a60c0830188614f34565b73ffffffffffffffffffffffffffffffffffffffff9690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615a8757601f19868403018952815160a0815181865261662482870182614f34565b915050858201518582038787015261663c8282614f34565b915050604080830151868303828801526166568382614f34565b9250505060608083015181870152506080808301519250858203818701525061667f8183614f34565b9a86019a94505050908301906001016165fe565b602081526000610e5e60208301846165e1565b60008282518085526020808601955060208260051b8401016020860160005b84811015615a8757601f198684030189526166e1838351614f34565b988401989250908301906001016166c5565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e085015261675b610180850183614f34565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080868503016101008701526167988483614f34565b9350606088015191506167c461012087018373ffffffffffffffffffffffffffffffffffffffff169052565b60808801518387015260a08801519250808685030161016087015250506167eb82826165e1565b915050828103602084015261539f81856166a656fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go index f9e72dca96..614d720461 100644 --- a/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go +++ b/core/gethwrappers/ccip/generated/ping_pong_demo/ping_pong_demo.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var PingPongDemoMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200159d3803806200159d833981016040819052620000349162000263565b33806000846001600160a01b03811662000069576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000060565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fa57620000fa816200019f565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000170573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001969190620002a2565b505050620002cd565b336001600160a01b03821603620001f95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200026057600080fd5b50565b600080604083850312156200027757600080fd5b825162000284816200024a565b602084015190925062000297816200024a565b809150509250929050565b600060208284031215620002b557600080fd5b81518015158114620002c657600080fd5b9392505050565b6080516112a6620002f760003960008181610295015281816106860152610ab901526112a66000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638da5cb5b116100b2578063b187bd2611610081578063bee518a411610066578063bee518a4146102ef578063ca709a251461032d578063f2fde38b1461034b57600080fd5b8063b187bd26146102b9578063b5a11011146102dc57600080fd5b80638da5cb5b1461023f5780639d2aede51461025d578063ae90de5514610270578063b0f479a11461029357600080fd5b80632874d8bf11610109578063665ed537116100ee578063665ed5371461021157806379ba50971461022457806385572ffb1461022c57600080fd5b80632874d8bf146101ca5780632b6e5d63146101d257600080fd5b806301ffc9a71461013b57806316c38b3c14610163578063181f5a77146101785780631892b906146101b7575b600080fd5b61014e610149366004610cba565b61035e565b60405190151581526020015b60405180910390f35b610176610171366004610d03565b6103f7565b005b604080518082018252601281527f50696e67506f6e6744656d6f20312e352e3000000000000000000000000000006020820152905161015a9190610d89565b6101766101c5366004610db9565b610449565b6101766104a4565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b61017661021f366004610d03565b6104e0565b61017661056c565b61017661023a366004610dd4565b61066e565b60005473ffffffffffffffffffffffffffffffffffffffff166101ec565b61017661026b366004610e33565b6106f3565b60035474010000000000000000000000000000000000000000900460ff1661014e565b7f00000000000000000000000000000000000000000000000000000000000000006101ec565b60025474010000000000000000000000000000000000000000900460ff1661014e565b6101766102ea366004610e4e565b610742565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161015a565b60035473ffffffffffffffffffffffffffffffffffffffff166101ec565b610176610359366004610e33565b6107e4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb0000000000000000000000000000000000000000000000000000000014806103f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6103ff6107f5565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104516107f5565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104ac6107f5565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556104de6001610876565b565b6104e86107f5565b6003805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99061056190831515815260200190565b60405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106df576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024016105e9565b6106f06106eb82611084565b610b6f565b50565b6106fb6107f5565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61074a6107f5565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6107ec6107f5565b6106f081610bc5565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105e9565b806001166001036108b9576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a16108ed565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e0810160405160208183030381529060405281526020018360405160200161094591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052815260200160006040519080825280602002602001820160405280156109bf57816020015b60408051808201909152600080825260208201528152602001906001900390816109985790505b50815260035473ffffffffffffffffffffffffffffffffffffffff811660208084019190915260408051808201825262030d408082527401000000000000000000000000000000000000000090940460ff16151590830190815281516024810194909452511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf1000000000000000000000000000000000000000000000000000000000179052909101526001546040517f96f4e9f90000000000000000000000000000000000000000000000000000000081529192507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916396f4e9f991610b27917401000000000000000000000000000000000000000090910467ffffffffffffffff16908590600401611131565b6020604051808303816000875af1158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190611246565b505050565b60008160600151806020019051810190610b899190611246565b60025490915074010000000000000000000000000000000000000000900460ff16610bc157610bc1610bbc82600161125f565b610876565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105e9565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610ccc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610cfc57600080fd5b9392505050565b600060208284031215610d1557600080fd5b81358015158114610cfc57600080fd5b6000815180845260005b81811015610d4b57602081850181015186830182015201610d2f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610cfc6020830184610d25565b803567ffffffffffffffff81168114610db457600080fd5b919050565b600060208284031215610dcb57600080fd5b610cfc82610d9c565b600060208284031215610de657600080fd5b813567ffffffffffffffff811115610dfd57600080fd5b820160a08185031215610cfc57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610db457600080fd5b600060208284031215610e4557600080fd5b610cfc82610e0f565b60008060408385031215610e6157600080fd5b610e6a83610d9c565b9150610e7860208401610e0f565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610ed357610ed3610e81565b60405290565b60405160a0810167ffffffffffffffff81118282101715610ed357610ed3610e81565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610f4357610f43610e81565b604052919050565b600082601f830112610f5c57600080fd5b813567ffffffffffffffff811115610f7657610f76610e81565b610fa760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610efc565b818152846020838601011115610fbc57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610fea57600080fd5b8135602067ffffffffffffffff82111561100657611006610e81565b611014818360051b01610efc565b82815260069290921b8401810191818101908684111561103357600080fd5b8286015b8481101561107957604081890312156110505760008081fd5b611058610eb0565b61106182610e0f565b81528185013585820152835291830191604001611037565b509695505050505050565b600060a0823603121561109657600080fd5b61109e610ed9565b823581526110ae60208401610d9c565b6020820152604083013567ffffffffffffffff808211156110ce57600080fd5b6110da36838701610f4b565b604084015260608501359150808211156110f357600080fd5b6110ff36838701610f4b565b6060840152608085013591508082111561111857600080fd5b5061112536828601610fd9565b60808301525092915050565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261116060e0860182610d25565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087840301606088015261119b8383610d25565b6040890151888203830160808a01528051808352908601945060009350908501905b808410156111fc578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906111bd565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506112388187610d25565b9a9950505050505050505050565b60006020828403121561125857600080fd5b5051919050565b808201808211156103f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldFeeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"isFailedMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usePreFundedFeeTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isPreFunded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162004ccb38038062004ccb8339810160408190526200003491620005dc565b8181600182803380600081620000915760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c457620000c48162000154565b5050506001600160a01b038116620000ef576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b031991821617909155600780549286169290911682179055821515608052159050620001495760025462000149906001600160a01b038481169116600019620001ff565b5050505050620006d9565b336001600160a01b03821603620001ae5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000088565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8015806200027d5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027b91906200061b565b155b620002f15760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000088565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003499185916200034e16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200039d906001600160a01b0385169084906200041f565b805190915015620003495780806020019051810190620003be919062000635565b620003495760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000088565b606062000430848460008562000438565b949350505050565b6060824710156200049b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000088565b600080866001600160a01b03168587604051620004b9919062000686565b60006040518083038185875af1925050503d8060008114620004f8576040519150601f19603f3d011682016040523d82523d6000602084013e620004fd565b606091505b50909250905062000511878383876200051c565b979650505050505050565b606083156200059057825160000362000588576001600160a01b0385163b620005885760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000088565b508162000430565b620004308383815115620005a75781518083602001fd5b8060405162461bcd60e51b8152600401620000889190620006a4565b6001600160a01b0381168114620005d957600080fd5b50565b60008060408385031215620005f057600080fd5b8251620005fd81620005c3565b60208401519092506200061081620005c3565b809150509250929050565b6000602082840312156200062e57600080fd5b5051919050565b6000602082840312156200064857600080fd5b815180151581146200065957600080fd5b9392505050565b60005b838110156200067d57818101518382015260200162000663565b50506000910152565b600082516200069a81846020870162000660565b9190910192915050565b6020815260008251806020840152620006c581604085016020870162000660565b601f01601f19169190910160400192915050565b6080516145cf620006fc600039600081816103c0015261232f01526145cf6000f3fe6080604052600436106101c65760003560e01c806385572ffb116100f7578063bee518a411610095578063cf6730f811610064578063cf6730f8146105e6578063e4ca875414610606578063e89b448514610626578063f2fde38b1461064757600080fd5b8063bee518a414610530578063c851cc321461057b578063c89245d51461059b578063ca709a25146105bb57600080fd5b8063ae90de55116100d1578063ae90de5514610484578063b0f479a1146104b5578063b187bd26146104e0578063b5a110111461051057600080fd5b806385572ffb146104195780638da5cb5b146104395780639fe74e261461046457600080fd5b80635e35359e116101645780636d62d6331161013e5780636d62d6331461039157806372be9eb8146103b157806379ba5097146103e45780638462a2b9146103f957600080fd5b80635e35359e14610324578063665ed537146103445780636939cd971461036457600080fd5b8063181f5a77116101a0578063181f5a77146102495780632874d8bf146102955780632b6e5d63146102aa57806335f170ef146102f657600080fd5b80630a9094dc146101d25780630e958d6b1461020757806316c38b3c1461022757600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed36600461333f565b610667565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b506101f261022236600461336e565b61067a565b34801561023357600080fd5b50610247610242366004613401565b6106c5565b005b34801561025557600080fd5b50604080518082018252601681527f50696e67506f6e6744656d6f20312e362e302d64657600000000000000000000602082015290516101fe919061348c565b3480156102a157600080fd5b50610247610717565b3480156102b657600080fd5b5060085473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b34801561030257600080fd5b5061031661031136600461349f565b610753565b6040516101fe9291906134bc565b34801561033057600080fd5b5061024761033f36600461350c565b61087f565b34801561035057600080fd5b5061024761035f366004613401565b610954565b34801561037057600080fd5b5061038461037f36600461333f565b610bea565b6040516101fe91906135aa565b34801561039d57600080fd5b506102476103ac36600461363e565b610df5565b3480156103bd57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101f2565b3480156103f057600080fd5b5061024761100d565b34801561040557600080fd5b506102476104143660046136ba565b61110a565b34801561042557600080fd5b50610247610434366004613726565b61144b565b34801561044557600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166102d1565b34801561047057600080fd5b5061024761047f366004613761565b611642565b34801561049057600080fd5b506008547501000000000000000000000000000000000000000000900460ff166101f2565b3480156104c157600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102d1565b3480156104ec57600080fd5b5060085474010000000000000000000000000000000000000000900460ff166101f2565b34801561051c57600080fd5b5061024761052b3660046137a3565b6117fb565b34801561053c57600080fd5b5060075474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff90911681526020016101fe565b34801561058757600080fd5b506102476105963660046137d1565b611a03565b3480156105a757600080fd5b506102476105b63660046137d1565b611acf565b3480156105c757600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff166102d1565b3480156105f257600080fd5b50610247610601366004613726565b611c39565b34801561061257600080fd5b5061024761062136600461333f565b611dc4565b610639610634366004613923565b612092565b6040519081526020016101fe565b34801561065357600080fd5b506102476106623660046137d1565b6125cb565b60006106746005836125df565b92915050565b67ffffffffffffffff831660009081526003602052604080822090516002909101906106a99085908590613a30565b9081526040519081900360200190205460ff1690509392505050565b6106cd6125fa565b6008805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61071f6125fa565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055610751600161267b565b565b60036020526000908152604090208054819061076e90613a40565b80601f016020809104026020016040519081016040528092919081815260200182805461079a90613a40565b80156107e75780601f106107bc576101008083540402835291602001916107e7565b820191906000526020600020905b8154815290600101906020018083116107ca57829003601f168201915b5050505050908060010180546107fc90613a40565b80601f016020809104026020016040519081016040528092919081815260200182805461082890613a40565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050905082565b6108876125fa565b73ffffffffffffffffffffffffffffffffffffffff83166108c7576108c273ffffffffffffffffffffffffffffffffffffffff83168261279f565b6108e8565b6108e873ffffffffffffffffffffffffffffffffffffffff841683836128f9565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e8360405161094791815260200190565b60405180910390a3505050565b61095c6125fa565b600880547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000831515021790556002546007546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a589190613aa3565b905060008173ffffffffffffffffffffffffffffffffffffffff166306285c696040518163ffffffff1660e01b815260040161010060405180830381865afa158015610aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acc9190613ae7565b9050610b6e6040518060400160405280836060015167ffffffffffffffff1681526020018515158152506040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b60075474010000000000000000000000000000000000000000900467ffffffffffffffff16600090815260036020526040902060010190610baf9082613c01565b5060405183151581527f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99060200160405180910390a1505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610c5990613a40565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590613a40565b8015610cd25780601f10610ca757610100808354040283529160200191610cd2565b820191906000526020600020905b815481529060010190602001808311610cb557829003601f168201915b50505050508152602001600382018054610ceb90613a40565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1790613a40565b8015610d645780601f10610d3957610100808354040283529160200191610d64565b820191906000526020600020905b815481529060010190602001808311610d4757829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610de75760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610d92565b505050915250909392505050565b610dfd6125fa565b610e086005836125df565b610e46576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b600082815260046020818152604080842090920180548351818402810184019094528084529091849084015b82821015610ec75760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610e72565b50505060008581526004602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001690559293509050610f17600283018261328d565b610f2560038301600061328d565b610f336004830160006132c7565b50610f4190506005846129cd565b5060005b8151811015610fbb57610fb383838381518110610f6457610f64613d1b565b602002602001015160200151848481518110610f8257610f82613d1b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166128f99092919063ffffffff16565b600101610f45565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957906020015b60405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461108e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610e3d565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6111126125fa565b60005b818110156112a5576003600084848481811061113357611133613d1b565b90506020028101906111459190613d4a565b61115390602081019061349f565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061118a5761118a613d1b565b905060200281019061119c9190613d4a565b6111aa906020810190613d88565b6040516111b8929190613a30565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106111ff576111ff613d1b565b90506020028101906112119190613d4a565b61121f906020810190613d88565b60405161122d929190613a30565b604051809103902083838381811061124757611247613d1b565b90506020028101906112599190613d4a565b61126790602081019061349f565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a3600101611115565b5060005b83811015611444576001600360008787858181106112c9576112c9613d1b565b90506020028101906112db9190613d4a565b6112e990602081019061349f565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020186868481811061132057611320613d1b565b90506020028101906113329190613d4a565b611340906020810190613d88565b60405161134e929190613a30565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061139e5761139e613d1b565b90506020028101906113b09190613d4a565b6113be906020810190613d88565b6040516113cc929190613a30565b60405180910390208585838181106113e6576113e6613d1b565b90506020028101906113f89190613d4a565b61140690602081019061349f565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a36001016112a9565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff16331461149e576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610e3d565b6114ae604082016020830161349f565b67ffffffffffffffff8116600090815260036020526040902080546114d290613a40565b9050600003611519576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610e3d565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890611555908590600401613eef565b600060405180830381600087803b15801561156f57600080fd5b505af1925050508015611580575060015b611612573d8080156115ae576040519150601f19603f3d011682016040523d82523d6000602084013e6115b3565b606091505b506115c0600584356129d9565b508235600090815260046020526040902083906115dd8282614279565b50506040518335907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f9061100090849061348c565b6040518235907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050565b61164a6125fa565b60005b818110156117f657600083838381811061166957611669613d1b565b905060200281019061167b9190614373565b611684906143a7565b905080602001516116ef57805167ffffffffffffffff1660009081526003602052604081206116b29161328d565b805160405167ffffffffffffffff909116907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991690600090a26117ed565b80604001515160000361172e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080820151825167ffffffffffffffff166000908152600360205291909120906117599082613c01565b506060810151815167ffffffffffffffff166000908152600360205260409020600101906117879082613c01565b50806040015160405161179a9190614458565b6040518091039020816000015167ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a8721283606001516040516117e4919061348c565b60405180910390a35b5060010161164d565b505050565b6118036125fa565b73ffffffffffffffffffffffffffffffffffffffff8116158061182e575067ffffffffffffffff8216155b15611865576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff851690810291909117909155600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560009182526003602090815260409283902083519182019290925260019260029092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261195691614458565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff84166000908152600360205220906117f69082613c01565b611a0b6125fa565b73ffffffffffffffffffffffffffffffffffffffff8116611a58576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b611ad76125fa565b60075473ffffffffffffffffffffffffffffffffffffffff1615611b3857611b38611b1760025473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff169060006129e5565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015611be557611be5611ba560025473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612b67565b6040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67910160405180910390a15050565b333014611c72576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c82604082016020830161349f565b611c8f6040830183613d88565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350611ce692509050613a40565b15905080611d3c5750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611d279190614458565b9081526040519081900360200190205460ff16155b15611d7557806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610e3d919061348c565b60085474010000000000000000000000000000000000000000900460ff166117f6576117f6611da76060850185613d88565b810190611db4919061333f565b611dbf90600161446a565b61267b565b611dcf6005826125df565b611e08576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610e3d565b6000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff16938101939093526002810180549192840191611e4f90613a40565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7b90613a40565b8015611ec85780601f10611e9d57610100808354040283529160200191611ec8565b820191906000526020600020905b815481529060010190602001808311611eab57829003601f168201915b50505050508152602001600382018054611ee190613a40565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0d90613a40565b8015611f5a5780601f10611f2f57610100808354040283529160200191611f5a565b820191906000526020600020905b815481529060010190602001808311611f3d57829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611fdd5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611f88565b5050509152505060008381526004602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905591925061202f600283018261328d565b61203d60038301600061328d565b61204b6004830160006132c7565b5061205990506005836129cd565b5061206381612c6b565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff8316600090815260036020526040812080548591906120b990613a40565b9050600003612100576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610e3d565b6040805160a08101825267ffffffffffffffff871660009081526003602052918220805482919061213090613a40565b80601f016020809104026020016040519081016040528092919081815260200182805461215c90613a40565b80156121a95780601f1061217e576101008083540402835291602001916121a9565b820191906000526020600020905b81548152906001019060200180831161218c57829003601f168201915b50505091835250506020808201879052604080830189905260075473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8a16600090815260039092529020600101805460809092019161220a90613a40565b80601f016020809104026020016040519081016040528092919081815260200182805461223690613a40565b80156122835780601f1061225857610100808354040283529160200191612283565b820191906000526020600020905b81548152906001019060200180831161226657829003601f168201915b5050509190925250506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906320487ded906122ea908a90869060040161447d565b602060405180830381865afa158015612307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232b919061454a565b90507f0000000000000000000000000000000000000000000000000000000000000000158015612372575060075473ffffffffffffffffffffffffffffffffffffffff1615155b1561239c5760075461239c9073ffffffffffffffffffffffffffffffffffffffff16333084612cdd565b60005b86518110156124ef5761240f33308984815181106123bf576123bf613d1b565b6020026020010151602001518a85815181106123dd576123dd613d1b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612cdd909392919063ffffffff16565b600754875173ffffffffffffffffffffffffffffffffffffffff9091169088908390811061243f5761243f613d1b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16146124e75760025487516124e79173ffffffffffffffffffffffffffffffffffffffff169089908490811061249857612498613d1b565b6020026020010151602001518984815181106124b6576124b6613d1b565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff166129e59092919063ffffffff16565b60010161239f565b5060025460075473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f9911615612522576000612524565b825b89856040518463ffffffff1660e01b815260040161254392919061447d565b60206040518083038185885af1158015612561573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612586919061454a565b93507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a846040516125b991815260200190565b60405180910390a15050509392505050565b6125d36125fa565b6125dc81612d3b565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610e3d565b806001166001036126be576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a16126f2565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b60008160405160200161270791815260200190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181526007546000808552602085019093529093506117f6927401000000000000000000000000000000000000000090910467ffffffffffffffff1691612798565b60408051808201909152600080825260208201528152602001906001900390816127715790505b5083612092565b80471015612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610e3d565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612863576040519150601f19603f3d011682016040523d82523d6000602084013e612868565b606091505b50509050806117f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610e3d565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526117f69084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612e30565b60006125f38383612f3c565b60006125f3838361302f565b801580612a8557506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a83919061454a565b155b612b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610e3d565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526117f69084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640161294b565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c02919061454a565b612c0c919061446a565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260448101829052909150612c659085907f095ea7b3000000000000000000000000000000000000000000000000000000009060640161294b565b50505050565b612c736125fa565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f890612caf9084906004016135aa565b600060405180830381600087803b158015612cc957600080fd5b505af1158015611444573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612c659085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161294b565b3373ffffffffffffffffffffffffffffffffffffffff821603612dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610e3d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612e92826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661307e9092919063ffffffff16565b8051909150156117f65780806020019051810190612eb09190614563565b6117f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e3d565b60008181526001830160205260408120548015613025576000612f60600183614580565b8554909150600090612f7490600190614580565b9050818114612fd9576000866000018281548110612f9457612f94613d1b565b9060005260206000200154905080876000018481548110612fb757612fb7613d1b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fea57612fea614593565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610674565b6000915050610674565b600081815260018301602052604081205461307657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610674565b506000610674565b606061308d8484600085613095565b949350505050565b606082471015613127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610e3d565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516131509190614458565b60006040518083038185875af1925050503d806000811461318d576040519150601f19603f3d011682016040523d82523d6000602084013e613192565b606091505b50915091506131a3878383876131ae565b979650505050505050565b6060831561324457825160000361323d5773ffffffffffffffffffffffffffffffffffffffff85163b61323d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e3d565b508161308d565b61308d83838151156132595781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d919061348c565b50805461329990613a40565b6000825580601f106132a9575050565b601f0160209004906000526020600020908101906125dc91906132e8565b50805460008255600202906000526020600020908101906125dc9190613301565b5b808211156132fd57600081556001016132e9565b5090565b5b808211156132fd5780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201613302565b60006020828403121561335157600080fd5b5035919050565b67ffffffffffffffff811681146125dc57600080fd5b60008060006040848603121561338357600080fd5b833561338e81613358565b9250602084013567ffffffffffffffff808211156133ab57600080fd5b818601915086601f8301126133bf57600080fd5b8135818111156133ce57600080fd5b8760208285010111156133e057600080fd5b6020830194508093505050509250925092565b80151581146125dc57600080fd5b60006020828403121561341357600080fd5b81356125f3816133f3565b60005b83811015613439578181015183820152602001613421565b50506000910152565b6000815180845261345a81602086016020860161341e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125f36020830184613442565b6000602082840312156134b157600080fd5b81356125f381613358565b6040815260006134cf6040830185613442565b82810360208401526134e18185613442565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146125dc57600080fd5b60008060006060848603121561352157600080fd5b833561352c816134ea565b9250602084013561353c816134ea565b929592945050506040919091013590565b60008151808452602080850194506020840160005b8381101561359f578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613562565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a060608401526135e460c0840182613442565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808584030160808601526136208383613442565b925060808601519150808584030160a0860152506134e1828261354d565b6000806040838503121561365157600080fd5b823591506020830135613663816134ea565b809150509250929050565b60008083601f84011261368057600080fd5b50813567ffffffffffffffff81111561369857600080fd5b6020830191508360208260051b85010111156136b357600080fd5b9250929050565b600080600080604085870312156136d057600080fd5b843567ffffffffffffffff808211156136e857600080fd5b6136f48883890161366e565b9096509450602087013591508082111561370d57600080fd5b5061371a8782880161366e565b95989497509550505050565b60006020828403121561373857600080fd5b813567ffffffffffffffff81111561374f57600080fd5b820160a081850312156125f357600080fd5b6000806020838503121561377457600080fd5b823567ffffffffffffffff81111561378b57600080fd5b6137978582860161366e565b90969095509350505050565b600080604083850312156137b657600080fd5b82356137c181613358565b91506020830135613663816134ea565b6000602082840312156137e357600080fd5b81356125f3816134ea565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613840576138406137ee565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561388d5761388d6137ee565b604052919050565b600082601f8301126138a657600080fd5b813567ffffffffffffffff8111156138c0576138c06137ee565b6138f160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613846565b81815284602083860101111561390657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561393857600080fd5b833561394381613358565b925060208481013567ffffffffffffffff8082111561396157600080fd5b818701915087601f83011261397557600080fd5b813581811115613987576139876137ee565b613995848260051b01613846565b81815260069190911b8301840190848101908a8311156139b457600080fd5b938501935b82851015613a00576040858c0312156139d25760008081fd5b6139da61381d565b85356139e5816134ea565b815285870135878201528252604090940193908501906139b9565b965050506040870135925080831115613a1857600080fd5b5050613a2686828701613895565b9150509250925092565b8183823760009101908152919050565b600181811c90821680613a5457607f821691505b602082108103613a8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8051613a9e816134ea565b919050565b600060208284031215613ab557600080fd5b81516125f3816134ea565b8051613a9e81613358565b80516bffffffffffffffffffffffff81168114613a9e57600080fd5b6000610100808385031215613afb57600080fd5b6040519081019067ffffffffffffffff82118183101715613b1e57613b1e6137ee565b8160405283519150613b2f826134ea565b818152613b3e60208501613ac0565b6020820152613b4f60408501613ac0565b6040820152613b6060608501613ac0565b6060820152613b7160808501613acb565b6080820152613b8260a08501613a93565b60a0820152613b9360c08501613a93565b60c0820152613ba460e08501613a93565b60e0820152949350505050565b601f8211156117f6576000816000526020600020601f850160051c81016020861015613bda5750805b601f850160051c820191505b81811015613bf957828155600101613be6565b505050505050565b815167ffffffffffffffff811115613c1b57613c1b6137ee565b613c2f81613c298454613a40565b84613bb1565b602080601f831160018114613c825760008415613c4c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613bf9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613ccf57888601518255948401946001909101908401613cb0565b5085821015613d0b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613d7e57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613dbd57600080fd5b83018035915067ffffffffffffffff821115613dd857600080fd5b6020019150368190038213156136b357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e2257600080fd5b830160208101925035905067ffffffffffffffff811115613e4257600080fd5b8036038213156136b357600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b8581101561359f578135613ebd816134ea565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101613eaa565b602081528135602082015260006020830135613f0a81613358565b67ffffffffffffffff8082166040850152613f286040860186613ded565b925060a06060860152613f3f60c086018483613e51565b925050613f4f6060860186613ded565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080878603016080880152613f85858385613e51565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312613fbe57600080fd5b60209288019283019235915083821115613fd757600080fd5b8160061b3603831315613fe957600080fd5b8685030160a08701526131a3848284613e9a565b67ffffffffffffffff831115614015576140156137ee565b614029836140238354613a40565b83613bb1565b6000601f84116001811461407b57600085156140455750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355611444565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156140ca57868501358255602094850194600190920191016140aa565b5086821015614105577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8135614151816134ea565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b680100000000000000008311156141b7576141b76137ee565b8054838255808410156142445760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831683146141f8576141f8614117565b808616861461420957614209614117565b5060008360005260206000208360011b81018760011b820191505b8082101561423f578282558284830155600282019150614224565b505050505b5060008181526020812083915b85811015613bf9576142638383614146565b6040929092019160029190910190600101614251565b8135815560018101602083013561428f81613358565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008454161783556142cf6040860186613d88565b935091506142e1838360028701613ffd565b6142ee6060860186613d88565b93509150614300838360038701613ffd565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261433757600080fd5b91840191823591508082111561434c57600080fd5b506020820191508060061b360382131561436557600080fd5b612c6581836004860161419e565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613d7e57600080fd5b6000608082360312156143b957600080fd5b6040516080810167ffffffffffffffff82821081831117156143dd576143dd6137ee565b81604052843591506143ee82613358565b908252602084013590614400826133f3565b816020840152604085013591508082111561441a57600080fd5b61442636838701613895565b6040840152606085013591508082111561443f57600080fd5b5061444c36828601613895565b60608301525092915050565b60008251613d7e81846020870161341e565b8082018082111561067457610674614117565b67ffffffffffffffff83168152604060208201526000825160a060408401526144a960e0840182613442565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808584030160608601526144e58383613442565b92506040860151915080858403016080860152614502838361354d565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506145408282613442565b9695505050505050565b60006020828403121561455c57600080fd5b5051919050565b60006020828403121561457557600080fd5b81516125f3816133f3565b8181038181111561067457610674614117565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var PingPongDemoABI = PingPongDemoMetaData.ABI @@ -262,6 +262,28 @@ func (_PingPongDemo *PingPongDemoCallerSession) GetFeeToken() (common.Address, e return _PingPongDemo.Contract.GetFeeToken(&_PingPongDemo.CallOpts) } +func (_PingPongDemo *PingPongDemoCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getMessageContents", messageId) + + if err != nil { + return *new(ClientAny2EVMMessage), err + } + + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _PingPongDemo.Contract.GetMessageContents(&_PingPongDemo.CallOpts, messageId) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _PingPongDemo.Contract.GetMessageContents(&_PingPongDemo.CallOpts, messageId) +} + func (_PingPongDemo *PingPongDemoCaller) GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) { var out []interface{} err := _PingPongDemo.contract.Call(opts, &out, "getOutOfOrderExecution") @@ -564,30 +586,6 @@ func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpart(counterpartCh return _PingPongDemo.Contract.SetCounterpart(&_PingPongDemo.TransactOpts, counterpartChainSelector, counterpartAddress) } -func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _PingPongDemo.contract.Transact(opts, "setCounterpartAddress", addr) -} - -func (_PingPongDemo *PingPongDemoSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, addr) -} - -func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, addr) -} - -func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { - return _PingPongDemo.contract.Transact(opts, "setCounterpartChainSelector", chainSelector) -} - -func (_PingPongDemo *PingPongDemoSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector) -} - -func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector) -} - func (_PingPongDemo *PingPongDemoTransactor) SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) { return _PingPongDemo.contract.Transact(opts, "setOutOfOrderExecution", outOfOrderExecution) } @@ -636,8 +634,68 @@ func (_PingPongDemo *PingPongDemoTransactorSession) TransferOwnership(to common. return _PingPongDemo.Contract.TransferOwnership(&_PingPongDemo.TransactOpts, to) } -type PingPongDemoOutOfOrderExecutionChangeIterator struct { - Event *PingPongDemoOutOfOrderExecutionChange +func (_PingPongDemo *PingPongDemoTransactor) UpdateApprovedSenders(opts *bind.TransactOpts, adds []CCIPBaseApprovedSenderUpdate, removes []CCIPBaseApprovedSenderUpdate) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "updateApprovedSenders", adds, removes) +} + +func (_PingPongDemo *PingPongDemoSession) UpdateApprovedSenders(adds []CCIPBaseApprovedSenderUpdate, removes []CCIPBaseApprovedSenderUpdate) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateApprovedSenders(&_PingPongDemo.TransactOpts, adds, removes) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) UpdateApprovedSenders(adds []CCIPBaseApprovedSenderUpdate, removes []CCIPBaseApprovedSenderUpdate) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateApprovedSenders(&_PingPongDemo.TransactOpts, adds, removes) +} + +func (_PingPongDemo *PingPongDemoTransactor) UpdateFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "updateFeeToken", token) +} + +func (_PingPongDemo *PingPongDemoSession) UpdateFeeToken(token common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateFeeToken(&_PingPongDemo.TransactOpts, token) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) UpdateFeeToken(token common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateFeeToken(&_PingPongDemo.TransactOpts, token) +} + +func (_PingPongDemo *PingPongDemoTransactor) UpdateRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "updateRouter", newRouter) +} + +func (_PingPongDemo *PingPongDemoSession) UpdateRouter(newRouter common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateRouter(&_PingPongDemo.TransactOpts, newRouter) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) UpdateRouter(newRouter common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.UpdateRouter(&_PingPongDemo.TransactOpts, newRouter) +} + +func (_PingPongDemo *PingPongDemoTransactor) WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "withdrawTokens", token, to, amount) +} + +func (_PingPongDemo *PingPongDemoSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.Contract.WithdrawTokens(&_PingPongDemo.TransactOpts, token, to, amount) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) WithdrawTokens(token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _PingPongDemo.Contract.WithdrawTokens(&_PingPongDemo.TransactOpts, token, to, amount) +} + +func (_PingPongDemo *PingPongDemoTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PingPongDemo.contract.RawTransact(opts, nil) +} + +func (_PingPongDemo *PingPongDemoSession) Receive() (*types.Transaction, error) { + return _PingPongDemo.Contract.Receive(&_PingPongDemo.TransactOpts) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) Receive() (*types.Transaction, error) { + return _PingPongDemo.Contract.Receive(&_PingPongDemo.TransactOpts) +} + +type PingPongDemoApprovedSenderAddedIterator struct { + Event *PingPongDemoApprovedSenderAdded contract *bind.BoundContract event string @@ -648,7 +706,7 @@ type PingPongDemoOutOfOrderExecutionChangeIterator struct { fail error } -func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool { +func (it *PingPongDemoApprovedSenderAddedIterator) Next() bool { if it.fail != nil { return false @@ -657,7 +715,7 @@ func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoOutOfOrderExecutionChange) + it.Event = new(PingPongDemoApprovedSenderAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -672,7 +730,7 @@ func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoOutOfOrderExecutionChange) + it.Event = new(PingPongDemoApprovedSenderAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -687,32 +745,51 @@ func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool { } } -func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Error() error { +func (it *PingPongDemoApprovedSenderAddedIterator) Error() error { return it.fail } -func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Close() error { +func (it *PingPongDemoApprovedSenderAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoOutOfOrderExecutionChange struct { - IsOutOfOrder bool - Raw types.Log +type PingPongDemoApprovedSenderAdded struct { + DestChainSelector uint64 + Recipient common.Hash + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterApprovedSenderAdded(opts *bind.FilterOpts, destChainSelector []uint64, recipient [][]byte) (*PingPongDemoApprovedSenderAddedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OutOfOrderExecutionChange") + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ApprovedSenderAdded", destChainSelectorRule, recipientRule) if err != nil { return nil, err } - return &PingPongDemoOutOfOrderExecutionChangeIterator{contract: _PingPongDemo.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil + return &PingPongDemoApprovedSenderAddedIterator{contract: _PingPongDemo.contract, event: "ApprovedSenderAdded", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchApprovedSenderAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoApprovedSenderAdded, destChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OutOfOrderExecutionChange") + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ApprovedSenderAdded", destChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -722,8 +799,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOutOfOrderExecutionChange(opts * select { case log := <-logs: - event := new(PingPongDemoOutOfOrderExecutionChange) - if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { + event := new(PingPongDemoApprovedSenderAdded) + if err := _PingPongDemo.contract.UnpackLog(event, "ApprovedSenderAdded", log); err != nil { return err } event.Raw = log @@ -744,17 +821,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOutOfOrderExecutionChange(opts * }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*PingPongDemoOutOfOrderExecutionChange, error) { - event := new(PingPongDemoOutOfOrderExecutionChange) - if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseApprovedSenderAdded(log types.Log) (*PingPongDemoApprovedSenderAdded, error) { + event := new(PingPongDemoApprovedSenderAdded) + if err := _PingPongDemo.contract.UnpackLog(event, "ApprovedSenderAdded", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoOwnershipTransferRequestedIterator struct { - Event *PingPongDemoOwnershipTransferRequested +type PingPongDemoApprovedSenderRemovedIterator struct { + Event *PingPongDemoApprovedSenderRemoved contract *bind.BoundContract event string @@ -765,7 +842,7 @@ type PingPongDemoOwnershipTransferRequestedIterator struct { fail error } -func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { +func (it *PingPongDemoApprovedSenderRemovedIterator) Next() bool { if it.fail != nil { return false @@ -774,7 +851,7 @@ func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferRequested) + it.Event = new(PingPongDemoApprovedSenderRemoved) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -789,7 +866,7 @@ func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferRequested) + it.Event = new(PingPongDemoApprovedSenderRemoved) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -804,51 +881,51 @@ func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { } } -func (it *PingPongDemoOwnershipTransferRequestedIterator) Error() error { +func (it *PingPongDemoApprovedSenderRemovedIterator) Error() error { return it.fail } -func (it *PingPongDemoOwnershipTransferRequestedIterator) Close() error { +func (it *PingPongDemoApprovedSenderRemovedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoOwnershipTransferRequested struct { - From common.Address - To common.Address - Raw types.Log +type PingPongDemoApprovedSenderRemoved struct { + DestChainSelector uint64 + Recipient common.Hash + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterApprovedSenderRemoved(opts *bind.FilterOpts, destChainSelector []uint64, recipient [][]byte) (*PingPongDemoApprovedSenderRemovedIterator, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) } - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ApprovedSenderRemoved", destChainSelectorRule, recipientRule) if err != nil { return nil, err } - return &PingPongDemoOwnershipTransferRequestedIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil + return &PingPongDemoApprovedSenderRemovedIterator{contract: _PingPongDemo.contract, event: "ApprovedSenderRemoved", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchApprovedSenderRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoApprovedSenderRemoved, destChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) } - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ApprovedSenderRemoved", destChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -858,8 +935,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts select { case log := <-logs: - event := new(PingPongDemoOwnershipTransferRequested) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + event := new(PingPongDemoApprovedSenderRemoved) + if err := _PingPongDemo.contract.UnpackLog(event, "ApprovedSenderRemoved", log); err != nil { return err } event.Raw = log @@ -880,17 +957,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferRequested(log types.Log) (*PingPongDemoOwnershipTransferRequested, error) { - event := new(PingPongDemoOwnershipTransferRequested) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseApprovedSenderRemoved(log types.Log) (*PingPongDemoApprovedSenderRemoved, error) { + event := new(PingPongDemoApprovedSenderRemoved) + if err := _PingPongDemo.contract.UnpackLog(event, "ApprovedSenderRemoved", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoOwnershipTransferredIterator struct { - Event *PingPongDemoOwnershipTransferred +type PingPongDemoCCIPRouterModifiedIterator struct { + Event *PingPongDemoCCIPRouterModified contract *bind.BoundContract event string @@ -901,7 +978,7 @@ type PingPongDemoOwnershipTransferredIterator struct { fail error } -func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { +func (it *PingPongDemoCCIPRouterModifiedIterator) Next() bool { if it.fail != nil { return false @@ -910,7 +987,7 @@ func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferred) + it.Event = new(PingPongDemoCCIPRouterModified) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -925,7 +1002,7 @@ func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoOwnershipTransferred) + it.Event = new(PingPongDemoCCIPRouterModified) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -940,51 +1017,51 @@ func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { } } -func (it *PingPongDemoOwnershipTransferredIterator) Error() error { +func (it *PingPongDemoCCIPRouterModifiedIterator) Error() error { return it.fail } -func (it *PingPongDemoOwnershipTransferredIterator) Close() error { +func (it *PingPongDemoCCIPRouterModifiedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoOwnershipTransferred struct { - From common.Address - To common.Address - Raw types.Log +type PingPongDemoCCIPRouterModified struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferredIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterCCIPRouterModified(opts *bind.FilterOpts, oldRouter []common.Address, newRouter []common.Address) (*PingPongDemoCCIPRouterModifiedIterator, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) + var oldRouterRule []interface{} + for _, oldRouterItem := range oldRouter { + oldRouterRule = append(oldRouterRule, oldRouterItem) } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var newRouterRule []interface{} + for _, newRouterItem := range newRouter { + newRouterRule = append(newRouterRule, newRouterItem) } - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "CCIPRouterModified", oldRouterRule, newRouterRule) if err != nil { return nil, err } - return &PingPongDemoOwnershipTransferredIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &PingPongDemoCCIPRouterModifiedIterator{contract: _PingPongDemo.contract, event: "CCIPRouterModified", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchCCIPRouterModified(opts *bind.WatchOpts, sink chan<- *PingPongDemoCCIPRouterModified, oldRouter []common.Address, newRouter []common.Address) (event.Subscription, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) + var oldRouterRule []interface{} + for _, oldRouterItem := range oldRouter { + oldRouterRule = append(oldRouterRule, oldRouterItem) } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var newRouterRule []interface{} + for _, newRouterItem := range newRouter { + newRouterRule = append(newRouterRule, newRouterItem) } - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "CCIPRouterModified", oldRouterRule, newRouterRule) if err != nil { return nil, err } @@ -994,8 +1071,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind. select { case log := <-logs: - event := new(PingPongDemoOwnershipTransferred) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(PingPongDemoCCIPRouterModified) + if err := _PingPongDemo.contract.UnpackLog(event, "CCIPRouterModified", log); err != nil { return err } event.Raw = log @@ -1016,17 +1093,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind. }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferred(log types.Log) (*PingPongDemoOwnershipTransferred, error) { - event := new(PingPongDemoOwnershipTransferred) - if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseCCIPRouterModified(log types.Log) (*PingPongDemoCCIPRouterModified, error) { + event := new(PingPongDemoCCIPRouterModified) + if err := _PingPongDemo.contract.UnpackLog(event, "CCIPRouterModified", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoPingIterator struct { - Event *PingPongDemoPing +type PingPongDemoChainAddedIterator struct { + Event *PingPongDemoChainAdded contract *bind.BoundContract event string @@ -1037,7 +1114,7 @@ type PingPongDemoPingIterator struct { fail error } -func (it *PingPongDemoPingIterator) Next() bool { +func (it *PingPongDemoChainAddedIterator) Next() bool { if it.fail != nil { return false @@ -1046,7 +1123,7 @@ func (it *PingPongDemoPingIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoPing) + it.Event = new(PingPongDemoChainAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1061,7 +1138,7 @@ func (it *PingPongDemoPingIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoPing) + it.Event = new(PingPongDemoChainAdded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1076,32 +1153,52 @@ func (it *PingPongDemoPingIterator) Next() bool { } } -func (it *PingPongDemoPingIterator) Error() error { +func (it *PingPongDemoChainAddedIterator) Error() error { return it.fail } -func (it *PingPongDemoPingIterator) Close() error { +func (it *PingPongDemoChainAddedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoPing struct { - PingPongCount *big.Int - Raw types.Log +type PingPongDemoChainAdded struct { + RemoteChainSelector uint64 + Recipient common.Hash + ExtraArgsBytes []byte + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterPing(opts *bind.FilterOpts) (*PingPongDemoPingIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*PingPongDemoChainAddedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Ping") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } - return &PingPongDemoPingIterator{contract: _PingPongDemo.contract, event: "Ping", logs: logs, sub: sub}, nil + return &PingPongDemoChainAddedIterator{contract: _PingPongDemo.contract, event: "ChainAdded", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *PingPongDemoPing) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Ping") + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ChainAdded", remoteChainSelectorRule, recipientRule) if err != nil { return nil, err } @@ -1111,8 +1208,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink select { case log := <-logs: - event := new(PingPongDemoPing) - if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { + event := new(PingPongDemoChainAdded) + if err := _PingPongDemo.contract.UnpackLog(event, "ChainAdded", log); err != nil { return err } event.Raw = log @@ -1133,17 +1230,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParsePing(log types.Log) (*PingPongDemoPing, error) { - event := new(PingPongDemoPing) - if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseChainAdded(log types.Log) (*PingPongDemoChainAdded, error) { + event := new(PingPongDemoChainAdded) + if err := _PingPongDemo.contract.UnpackLog(event, "ChainAdded", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoPongIterator struct { - Event *PingPongDemoPong +type PingPongDemoChainRemovedIterator struct { + Event *PingPongDemoChainRemoved contract *bind.BoundContract event string @@ -1154,7 +1251,7 @@ type PingPongDemoPongIterator struct { fail error } -func (it *PingPongDemoPongIterator) Next() bool { +func (it *PingPongDemoChainRemovedIterator) Next() bool { if it.fail != nil { return false @@ -1163,7 +1260,7 @@ func (it *PingPongDemoPongIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoPong) + it.Event = new(PingPongDemoChainRemoved) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1178,7 +1275,7 @@ func (it *PingPongDemoPongIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoPong) + it.Event = new(PingPongDemoChainRemoved) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1193,32 +1290,42 @@ func (it *PingPongDemoPongIterator) Next() bool { } } -func (it *PingPongDemoPongIterator) Error() error { +func (it *PingPongDemoChainRemovedIterator) Error() error { return it.fail } -func (it *PingPongDemoPongIterator) Close() error { +func (it *PingPongDemoChainRemovedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoPong struct { - PingPongCount *big.Int - Raw types.Log +type PingPongDemoChainRemoved struct { + RemoveChainSelector uint64 + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterPong(opts *bind.FilterOpts) (*PingPongDemoPongIterator, error) { +func (_PingPongDemo *PingPongDemoFilterer) FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*PingPongDemoChainRemovedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Pong") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } - return &PingPongDemoPongIterator{contract: _PingPongDemo.contract, event: "Pong", logs: logs, sub: sub}, nil + return &PingPongDemoChainRemovedIterator{contract: _PingPongDemo.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchPong(opts *bind.WatchOpts, sink chan<- *PingPongDemoPong) (event.Subscription, error) { +func (_PingPongDemo *PingPongDemoFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainRemoved, removeChainSelector []uint64) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Pong") + var removeChainSelectorRule []interface{} + for _, removeChainSelectorItem := range removeChainSelector { + removeChainSelectorRule = append(removeChainSelectorRule, removeChainSelectorItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "ChainRemoved", removeChainSelectorRule) if err != nil { return nil, err } @@ -1228,8 +1335,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchPong(opts *bind.WatchOpts, sink select { case log := <-logs: - event := new(PingPongDemoPong) - if err := _PingPongDemo.contract.UnpackLog(event, "Pong", log); err != nil { + event := new(PingPongDemoChainRemoved) + if err := _PingPongDemo.contract.UnpackLog(event, "ChainRemoved", log); err != nil { return err } event.Raw = log @@ -1250,17 +1357,17 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchPong(opts *bind.WatchOpts, sink }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParsePong(log types.Log) (*PingPongDemoPong, error) { - event := new(PingPongDemoPong) - if err := _PingPongDemo.contract.UnpackLog(event, "Pong", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseChainRemoved(log types.Log) (*PingPongDemoChainRemoved, error) { + event := new(PingPongDemoChainRemoved) + if err := _PingPongDemo.contract.UnpackLog(event, "ChainRemoved", log); err != nil { return nil, err } event.Raw = log return event, nil } -type PingPongDemoTokensWithdrawnByOwnerIterator struct { - Event *PingPongDemoTokensWithdrawnByOwner +type PingPongDemoFeeTokenUpdatedIterator struct { + Event *PingPongDemoFeeTokenUpdated contract *bind.BoundContract event string @@ -1271,7 +1378,7 @@ type PingPongDemoTokensWithdrawnByOwnerIterator struct { fail error } -func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Next() bool { +func (it *PingPongDemoFeeTokenUpdatedIterator) Next() bool { if it.fail != nil { return false @@ -1280,7 +1387,7 @@ func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(PingPongDemoTokensWithdrawnByOwner) + it.Event = new(PingPongDemoFeeTokenUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1295,7 +1402,7 @@ func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(PingPongDemoTokensWithdrawnByOwner) + it.Event = new(PingPongDemoFeeTokenUpdated) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1310,52 +1417,33 @@ func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Next() bool { } } -func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Error() error { +func (it *PingPongDemoFeeTokenUpdatedIterator) Error() error { return it.fail } -func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Close() error { +func (it *PingPongDemoFeeTokenUpdatedIterator) Close() error { it.sub.Unsubscribe() return nil } -type PingPongDemoTokensWithdrawnByOwner struct { - Token common.Address - To common.Address - Amount *big.Int - Raw types.Log +type PingPongDemoFeeTokenUpdated struct { + OldFeeToken common.Address + NewFeeToken common.Address + Raw types.Log } -func (_PingPongDemo *PingPongDemoFilterer) FilterTokensWithdrawnByOwner(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*PingPongDemoTokensWithdrawnByOwnerIterator, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +func (_PingPongDemo *PingPongDemoFilterer) FilterFeeTokenUpdated(opts *bind.FilterOpts) (*PingPongDemoFeeTokenUpdatedIterator, error) { - logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "FeeTokenUpdated") if err != nil { return nil, err } - return &PingPongDemoTokensWithdrawnByOwnerIterator{contract: _PingPongDemo.contract, event: "TokensWithdrawnByOwner", logs: logs, sub: sub}, nil + return &PingPongDemoFeeTokenUpdatedIterator{contract: _PingPongDemo.contract, event: "FeeTokenUpdated", logs: logs, sub: sub}, nil } -func (_PingPongDemo *PingPongDemoFilterer) WatchTokensWithdrawnByOwner(opts *bind.WatchOpts, sink chan<- *PingPongDemoTokensWithdrawnByOwner, token []common.Address, to []common.Address) (event.Subscription, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +func (_PingPongDemo *PingPongDemoFilterer) WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenUpdated) (event.Subscription, error) { - logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "FeeTokenUpdated") if err != nil { return nil, err } @@ -1365,8 +1453,8 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchTokensWithdrawnByOwner(opts *bin select { case log := <-logs: - event := new(PingPongDemoTokensWithdrawnByOwner) - if err := _PingPongDemo.contract.UnpackLog(event, "TokensWithdrawnByOwner", log); err != nil { + event := new(PingPongDemoFeeTokenUpdated) + if err := _PingPongDemo.contract.UnpackLog(event, "FeeTokenUpdated", log); err != nil { return err } event.Raw = log @@ -1387,25 +1475,1434 @@ func (_PingPongDemo *PingPongDemoFilterer) WatchTokensWithdrawnByOwner(opts *bin }), nil } -func (_PingPongDemo *PingPongDemoFilterer) ParseTokensWithdrawnByOwner(log types.Log) (*PingPongDemoTokensWithdrawnByOwner, error) { - event := new(PingPongDemoTokensWithdrawnByOwner) - if err := _PingPongDemo.contract.UnpackLog(event, "TokensWithdrawnByOwner", log); err != nil { +func (_PingPongDemo *PingPongDemoFilterer) ParseFeeTokenUpdated(log types.Log) (*PingPongDemoFeeTokenUpdated, error) { + event := new(PingPongDemoFeeTokenUpdated) + if err := _PingPongDemo.contract.UnpackLog(event, "FeeTokenUpdated", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SChainConfigs struct { - Recipient []byte - ExtraArgsBytes []byte +type PingPongDemoMessageAbandonedIterator struct { + Event *PingPongDemoMessageAbandoned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error } -func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, error) { - switch log.Topics[0] { - case _PingPongDemo.abi.Events["OutOfOrderExecutionChange"].ID: - return _PingPongDemo.ParseOutOfOrderExecutionChange(log) - case _PingPongDemo.abi.Events["OwnershipTransferRequested"].ID: +func (it *PingPongDemoMessageAbandonedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageAbandoned) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageAbandoned) + 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() + } +} + +func (it *PingPongDemoMessageAbandonedIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageAbandonedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageAbandoned struct { + MessageId [32]byte + TokenReceiver common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageAbandoned(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageAbandonedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageAbandoned", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageAbandonedIterator{contract: _PingPongDemo.contract, event: "MessageAbandoned", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageAbandoned(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAbandoned, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageAbandoned", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageAbandoned) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageAbandoned", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageAbandoned(log types.Log) (*PingPongDemoMessageAbandoned, error) { + event := new(PingPongDemoMessageAbandoned) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageAbandoned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageFailedIterator struct { + Event *PingPongDemoMessageFailed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageFailedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageFailed) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageFailed) + 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() + } +} + +func (it *PingPongDemoMessageFailedIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageFailedIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageFailedIterator{contract: _PingPongDemo.contract, event: "MessageFailed", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageFailed, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageFailed", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageFailed) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageFailed", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageFailed(log types.Log) (*PingPongDemoMessageFailed, error) { + event := new(PingPongDemoMessageFailed) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageRecoveredIterator struct { + Event *PingPongDemoMessageRecovered + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageRecoveredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageRecovered) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageRecovered) + 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() + } +} + +func (it *PingPongDemoMessageRecoveredIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageRecoveredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageRecovered struct { + MessageId [32]byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageRecoveredIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageRecoveredIterator{contract: _PingPongDemo.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageRecovered, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageRecovered) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageRecovered", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageRecovered(log types.Log) (*PingPongDemoMessageRecovered, error) { + event := new(PingPongDemoMessageRecovered) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageRecovered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageSentIterator struct { + Event *PingPongDemoMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageSent) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageSent) + 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() + } +} + +func (it *PingPongDemoMessageSentIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageSent struct { + MessageId [32]byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageSent(opts *bind.FilterOpts) (*PingPongDemoMessageSentIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return &PingPongDemoMessageSentIterator{contract: _PingPongDemo.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageSent) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSent", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageSent(log types.Log) (*PingPongDemoMessageSent, error) { + event := new(PingPongDemoMessageSent) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoMessageSucceededIterator struct { + Event *PingPongDemoMessageSucceeded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoMessageSucceededIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageSucceeded) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoMessageSucceeded) + 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() + } +} + +func (it *PingPongDemoMessageSucceededIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoMessageSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoMessageSucceeded struct { + MessageId [32]byte + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageSucceededIterator, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return &PingPongDemoMessageSucceededIterator{contract: _PingPongDemo.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { + + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoMessageSucceeded) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSucceeded", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseMessageSucceeded(log types.Log) (*PingPongDemoMessageSucceeded, error) { + event := new(PingPongDemoMessageSucceeded) + if err := _PingPongDemo.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOutOfOrderExecutionChangeIterator struct { + Event *PingPongDemoOutOfOrderExecutionChange + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOutOfOrderExecutionChange) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOutOfOrderExecutionChange) + 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() + } +} + +func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOutOfOrderExecutionChange struct { + IsOutOfOrder bool + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OutOfOrderExecutionChange") + if err != nil { + return nil, err + } + return &PingPongDemoOutOfOrderExecutionChangeIterator{contract: _PingPongDemo.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OutOfOrderExecutionChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOutOfOrderExecutionChange) + if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*PingPongDemoOutOfOrderExecutionChange, error) { + event := new(PingPongDemoOutOfOrderExecutionChange) + if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOwnershipTransferRequestedIterator struct { + Event *PingPongDemoOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferRequested) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferRequested) + 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() + } +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoOwnershipTransferRequestedIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOwnershipTransferRequested) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferRequested(log types.Log) (*PingPongDemoOwnershipTransferRequested, error) { + event := new(PingPongDemoOwnershipTransferRequested) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOwnershipTransferredIterator struct { + Event *PingPongDemoOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferred) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferred) + 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() + } +} + +func (it *PingPongDemoOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoOwnershipTransferredIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOwnershipTransferred) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferred(log types.Log) (*PingPongDemoOwnershipTransferred, error) { + event := new(PingPongDemoOwnershipTransferred) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoPingIterator struct { + Event *PingPongDemoPing + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoPingIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPing) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPing) + 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() + } +} + +func (it *PingPongDemoPingIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoPingIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoPing struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterPing(opts *bind.FilterOpts) (*PingPongDemoPingIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Ping") + if err != nil { + return nil, err + } + return &PingPongDemoPingIterator{contract: _PingPongDemo.contract, event: "Ping", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *PingPongDemoPing) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Ping") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoPing) + if err := _PingPongDemo.contract.UnpackLog(event, "Ping", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParsePing(log types.Log) (*PingPongDemoPing, error) { + event := new(PingPongDemoPing) + if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoPongIterator struct { + Event *PingPongDemoPong + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoPongIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPong) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPong) + 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() + } +} + +func (it *PingPongDemoPongIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoPongIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoPong struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterPong(opts *bind.FilterOpts) (*PingPongDemoPongIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Pong") + if err != nil { + return nil, err + } + return &PingPongDemoPongIterator{contract: _PingPongDemo.contract, event: "Pong", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchPong(opts *bind.WatchOpts, sink chan<- *PingPongDemoPong) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Pong") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoPong) + if err := _PingPongDemo.contract.UnpackLog(event, "Pong", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParsePong(log types.Log) (*PingPongDemoPong, error) { + event := new(PingPongDemoPong) + if err := _PingPongDemo.contract.UnpackLog(event, "Pong", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoTokensWithdrawnByOwnerIterator struct { + Event *PingPongDemoTokensWithdrawnByOwner + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoTokensWithdrawnByOwner) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoTokensWithdrawnByOwner) + 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() + } +} + +func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoTokensWithdrawnByOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoTokensWithdrawnByOwner struct { + Token common.Address + To common.Address + Amount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterTokensWithdrawnByOwner(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*PingPongDemoTokensWithdrawnByOwnerIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoTokensWithdrawnByOwnerIterator{contract: _PingPongDemo.contract, event: "TokensWithdrawnByOwner", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchTokensWithdrawnByOwner(opts *bind.WatchOpts, sink chan<- *PingPongDemoTokensWithdrawnByOwner, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoTokensWithdrawnByOwner) + if err := _PingPongDemo.contract.UnpackLog(event, "TokensWithdrawnByOwner", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseTokensWithdrawnByOwner(log types.Log) (*PingPongDemoTokensWithdrawnByOwner, error) { + event := new(PingPongDemoTokensWithdrawnByOwner) + if err := _PingPongDemo.contract.UnpackLog(event, "TokensWithdrawnByOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SChainConfigs struct { + Recipient []byte + ExtraArgsBytes []byte +} + +func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _PingPongDemo.abi.Events["ApprovedSenderAdded"].ID: + return _PingPongDemo.ParseApprovedSenderAdded(log) + case _PingPongDemo.abi.Events["ApprovedSenderRemoved"].ID: + return _PingPongDemo.ParseApprovedSenderRemoved(log) + case _PingPongDemo.abi.Events["CCIPRouterModified"].ID: + return _PingPongDemo.ParseCCIPRouterModified(log) + case _PingPongDemo.abi.Events["ChainAdded"].ID: + return _PingPongDemo.ParseChainAdded(log) + case _PingPongDemo.abi.Events["ChainRemoved"].ID: + return _PingPongDemo.ParseChainRemoved(log) + case _PingPongDemo.abi.Events["FeeTokenUpdated"].ID: + return _PingPongDemo.ParseFeeTokenUpdated(log) + case _PingPongDemo.abi.Events["MessageAbandoned"].ID: + return _PingPongDemo.ParseMessageAbandoned(log) + case _PingPongDemo.abi.Events["MessageFailed"].ID: + return _PingPongDemo.ParseMessageFailed(log) + case _PingPongDemo.abi.Events["MessageRecovered"].ID: + return _PingPongDemo.ParseMessageRecovered(log) + case _PingPongDemo.abi.Events["MessageSent"].ID: + return _PingPongDemo.ParseMessageSent(log) + case _PingPongDemo.abi.Events["MessageSucceeded"].ID: + return _PingPongDemo.ParseMessageSucceeded(log) + case _PingPongDemo.abi.Events["OutOfOrderExecutionChange"].ID: + return _PingPongDemo.ParseOutOfOrderExecutionChange(log) + case _PingPongDemo.abi.Events["OwnershipTransferRequested"].ID: return _PingPongDemo.ParseOwnershipTransferRequested(log) case _PingPongDemo.abi.Events["OwnershipTransferred"].ID: return _PingPongDemo.ParseOwnershipTransferred(log) @@ -1421,6 +2918,50 @@ func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, } } +func (PingPongDemoApprovedSenderAdded) Topic() common.Hash { + return common.HexToHash("0x72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e7") +} + +func (PingPongDemoApprovedSenderRemoved) Topic() common.Hash { + return common.HexToHash("0x021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce9") +} + +func (PingPongDemoCCIPRouterModified) Topic() common.Hash { + return common.HexToHash("0x3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c8") +} + +func (PingPongDemoChainAdded) Topic() common.Hash { + return common.HexToHash("0x1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a87212") +} + +func (PingPongDemoChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (PingPongDemoFeeTokenUpdated) Topic() common.Hash { + return common.HexToHash("0x91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67") +} + +func (PingPongDemoMessageAbandoned) Topic() common.Hash { + return common.HexToHash("0xd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957") +} + +func (PingPongDemoMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (PingPongDemoMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (PingPongDemoMessageSent) Topic() common.Hash { + return common.HexToHash("0x54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a") +} + +func (PingPongDemoMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + func (PingPongDemoOutOfOrderExecutionChange) Topic() common.Hash { return common.HexToHash("0x05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd9") } @@ -1456,6 +2997,8 @@ type PingPongDemoInterface interface { GetFeeToken(opts *bind.CallOpts) (common.Address, error) + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) GetRouter(opts *bind.CallOpts) (common.Address, error) @@ -1492,10 +3035,6 @@ type PingPongDemoInterface interface { SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) - SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) - - SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) - SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) @@ -1504,6 +3043,82 @@ type PingPongDemoInterface interface { TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + UpdateApprovedSenders(opts *bind.TransactOpts, adds []CCIPBaseApprovedSenderUpdate, removes []CCIPBaseApprovedSenderUpdate) (*types.Transaction, error) + + UpdateFeeToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + UpdateRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + WithdrawTokens(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterApprovedSenderAdded(opts *bind.FilterOpts, destChainSelector []uint64, recipient [][]byte) (*PingPongDemoApprovedSenderAddedIterator, error) + + WatchApprovedSenderAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoApprovedSenderAdded, destChainSelector []uint64, recipient [][]byte) (event.Subscription, error) + + ParseApprovedSenderAdded(log types.Log) (*PingPongDemoApprovedSenderAdded, error) + + FilterApprovedSenderRemoved(opts *bind.FilterOpts, destChainSelector []uint64, recipient [][]byte) (*PingPongDemoApprovedSenderRemovedIterator, error) + + WatchApprovedSenderRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoApprovedSenderRemoved, destChainSelector []uint64, recipient [][]byte) (event.Subscription, error) + + ParseApprovedSenderRemoved(log types.Log) (*PingPongDemoApprovedSenderRemoved, error) + + FilterCCIPRouterModified(opts *bind.FilterOpts, oldRouter []common.Address, newRouter []common.Address) (*PingPongDemoCCIPRouterModifiedIterator, error) + + WatchCCIPRouterModified(opts *bind.WatchOpts, sink chan<- *PingPongDemoCCIPRouterModified, oldRouter []common.Address, newRouter []common.Address) (event.Subscription, error) + + ParseCCIPRouterModified(log types.Log) (*PingPongDemoCCIPRouterModified, error) + + FilterChainAdded(opts *bind.FilterOpts, remoteChainSelector []uint64, recipient [][]byte) (*PingPongDemoChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainAdded, remoteChainSelector []uint64, recipient [][]byte) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*PingPongDemoChainAdded, error) + + FilterChainRemoved(opts *bind.FilterOpts, removeChainSelector []uint64) (*PingPongDemoChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *PingPongDemoChainRemoved, removeChainSelector []uint64) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*PingPongDemoChainRemoved, error) + + FilterFeeTokenUpdated(opts *bind.FilterOpts) (*PingPongDemoFeeTokenUpdatedIterator, error) + + WatchFeeTokenUpdated(opts *bind.WatchOpts, sink chan<- *PingPongDemoFeeTokenUpdated) (event.Subscription, error) + + ParseFeeTokenUpdated(log types.Log) (*PingPongDemoFeeTokenUpdated, error) + + FilterMessageAbandoned(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageAbandonedIterator, error) + + WatchMessageAbandoned(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageAbandoned, messageId [][32]byte) (event.Subscription, error) + + ParseMessageAbandoned(log types.Log) (*PingPongDemoMessageAbandoned, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*PingPongDemoMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*PingPongDemoMessageRecovered, error) + + FilterMessageSent(opts *bind.FilterOpts) (*PingPongDemoMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSent) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*PingPongDemoMessageSent, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*PingPongDemoMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *PingPongDemoMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*PingPongDemoMessageSucceeded, error) + FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error) diff --git a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go index 34fc401129..59665eace0 100644 --- a/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go +++ b/core/gethwrappers/ccip/generated/self_funded_ping_pong/self_funded_ping_pong.go @@ -56,8 +56,8 @@ type ClientEVMTokenAmount struct { } var SelfFundedPingPongMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200190938038062001909833981016040819052620000349162000291565b828233806000846001600160a01b0381166200006b576040516335fdcccd60e21b8152600060048201526024015b60405180910390fd5b6001600160a01b039081166080528216620000c95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000604482015260640162000062565b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000fc57620000fc81620001cd565b50506002805460ff60a01b1916905550600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af115801562000172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001989190620002ea565b505050806002620001aa919062000315565b600360156101000a81548160ff021916908360ff16021790555050505062000347565b336001600160a01b03821603620002275760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000062565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200028e57600080fd5b50565b600080600060608486031215620002a757600080fd5b8351620002b48162000278565b6020850151909350620002c78162000278565b604085015190925060ff81168114620002df57600080fd5b809150509250925092565b600060208284031215620002fd57600080fd5b815180151581146200030e57600080fd5b9392505050565b60ff81811683821602908116908181146200034057634e487b7160e01b600052601160045260246000fd5b5092915050565b60805161159162000378600039600081816102f301528181610728015281816108180152610d0901526115916000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638f491cba116100d8578063b5a110111161008c578063e6c725f511610066578063e6c725f5146103a9578063ef686d8e146103da578063f2fde38b146103ed57600080fd5b8063b5a110111461033a578063bee518a41461034d578063ca709a251461038b57600080fd5b8063ae90de55116100bd578063ae90de55146102ce578063b0f479a1146102f1578063b187bd261461031757600080fd5b80638f491cba146102a85780639d2aede5146102bb57600080fd5b80632b6e5d631161012f57806379ba50971161011457806379ba50971461026f57806385572ffb146102775780638da5cb5b1461028a57600080fd5b80632b6e5d631461021d578063665ed5371461025c57600080fd5b8063181f5a7711610160578063181f5a77146101b95780631892b906146102025780632874d8bf1461021557600080fd5b806301ffc9a71461017c57806316c38b3c146101a4575b600080fd5b61018f61018a366004610f0b565b610400565b60405190151581526020015b60405180910390f35b6101b76101b2366004610f54565b610499565b005b6101f56040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e352e30000000000000000081525081565b60405161019b9190610fda565b6101b761021036600461100a565b6104eb565b6101b7610546565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101b761026a366004610f54565b610582565b6101b761060e565b6101b7610285366004611025565b610710565b60005473ffffffffffffffffffffffffffffffffffffffff16610237565b6101b76102b6366004611060565b610795565b6101b76102c936600461109b565b610977565b60035474010000000000000000000000000000000000000000900460ff1661018f565b7f0000000000000000000000000000000000000000000000000000000000000000610237565b60025474010000000000000000000000000000000000000000900460ff1661018f565b6101b76103483660046110b8565b6109c6565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161019b565b60035473ffffffffffffffffffffffffffffffffffffffff16610237565b6003547501000000000000000000000000000000000000000000900460ff1660405160ff909116815260200161019b565b6101b76103e83660046110ef565b610a68565b6101b76103fb36600461109b565b610aeb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061049357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6104a1610afc565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104f3610afc565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b61054e610afc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556105806001610b7d565b565b61058a610afc565b6003805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99061060390831515815260200190565b60405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff163314610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610781576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240161068b565b61079261078d82611317565b610dc0565b50565b6003547501000000000000000000000000000000000000000000900460ff1615806107dd57506003547501000000000000000000000000000000000000000000900460ff1681105b156107e55750565b600354600190610811907501000000000000000000000000000000000000000000900460ff16836113c4565b11610792577f00000000000000000000000000000000000000000000000000000000000000006001546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906113ff565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a150565b61097f610afc565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6109ce610afc565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b610a70610afc565b600380547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf390602001610603565b610af3610afc565b61079281610e16565b60005473ffffffffffffffffffffffffffffffffffffffff163314610580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161068b565b80600116600103610bc0576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1610bf4565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b610bfd81610795565b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001610c5591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015610ccf57816020015b6040805180820190915260008082526020820152815260200190600190039081610ca85790505b50815260035473ffffffffffffffffffffffffffffffffffffffff16602080830191909152604080519182018152600082529091015290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600160149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401610d7892919061141c565b6020604051808303816000875af1158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb9190611531565b505050565b60008160600151806020019051810190610dda9190611531565b60025490915074010000000000000000000000000000000000000000900460ff16610e1257610e12610e0d82600161154a565b610b7d565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161068b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610f1d57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4d57600080fd5b9392505050565b600060208284031215610f6657600080fd5b81358015158114610f4d57600080fd5b6000815180845260005b81811015610f9c57602081850181015186830182015201610f80565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610f4d6020830184610f76565b803567ffffffffffffffff8116811461100557600080fd5b919050565b60006020828403121561101c57600080fd5b610f4d82610fed565b60006020828403121561103757600080fd5b813567ffffffffffffffff81111561104e57600080fd5b820160a08185031215610f4d57600080fd5b60006020828403121561107257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461079257600080fd5b6000602082840312156110ad57600080fd5b8135610f4d81611079565b600080604083850312156110cb57600080fd5b6110d483610fed565b915060208301356110e481611079565b809150509250929050565b60006020828403121561110157600080fd5b813560ff81168114610f4d57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561116457611164611112565b60405290565b60405160a0810167ffffffffffffffff8111828210171561116457611164611112565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156111d4576111d4611112565b604052919050565b600082601f8301126111ed57600080fd5b813567ffffffffffffffff81111561120757611207611112565b61123860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161118d565b81815284602083860101111561124d57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261127b57600080fd5b8135602067ffffffffffffffff82111561129757611297611112565b6112a5818360051b0161118d565b82815260069290921b840181019181810190868411156112c457600080fd5b8286015b8481101561130c57604081890312156112e15760008081fd5b6112e9611141565b81356112f481611079565b815281850135858201528352918301916040016112c8565b509695505050505050565b600060a0823603121561132957600080fd5b61133161116a565b8235815261134160208401610fed565b6020820152604083013567ffffffffffffffff8082111561136157600080fd5b61136d368387016111dc565b6040840152606085013591508082111561138657600080fd5b611392368387016111dc565b606084015260808501359150808211156113ab57600080fd5b506113b83682860161126a565b60808301525092915050565b6000826113fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006020828403121561141157600080fd5b8151610f4d81611079565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261144b60e0860182610f76565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808784030160608801526114868383610f76565b6040890151888203830160808a01528051808352908601945060009350908501905b808410156114e7578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906114a8565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506115238187610f76565b9a9950505050505050505050565b60006020828403121561154357600080fd5b5051919050565b80820180821115610493577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"roundTripsBeforeFunding\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageNotFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"}],\"name\":\"ApprovedSenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"CCIPRouterModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"removeChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"CountIncrBeforeFundingSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldFeeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Funded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenReceiver\",\"type\":\"address\"}],\"name\":\"MessageAbandoned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"MessageFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"MessageSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"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\"}],\"name\":\"TokensWithdrawnByOwner\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"abandonFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ChainUpdate[]\",\"name\":\"chains\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"fundPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCountIncrBeforeFunding\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"getMessageContents\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"senderAddr\",\"type\":\"bytes\"}],\"name\":\"isApprovedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"isFailedMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"name\":\"retryFailedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"s_chainConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgsBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"countIncrBeforeFunding\",\"type\":\"uint8\"}],\"name\":\"setCountIncrBeforeFunding\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPBase.ApprovedSenderUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"}],\"name\":\"updateApprovedSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateFeeToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"updateRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"usePreFundedFeeTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isPreFunded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620051ca380380620051ca83398101604081905262000034916200060a565b82828181600182803380600081620000935760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c657620000c68162000182565b5050506001600160a01b038116620000f1576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b039283166001600160a01b0319918216179091556007805492861692909116821790558215156080521590506200014b576002546200014b906001600160a01b0384811691166000196200022d565b50505050508060026200015f919062000663565b600860166101000a81548160ff021916908360ff16021790555050505062000753565b336001600160a01b03821603620001dc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008a565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b801580620002ab5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a9919062000695565b155b6200031f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016200008a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620003779185916200037c16565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620003cb906001600160a01b0385169084906200044d565b805190915015620003775780806020019051810190620003ec9190620006af565b620003775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200008a565b60606200045e848460008562000466565b949350505050565b606082471015620004c95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200008a565b600080866001600160a01b03168587604051620004e7919062000700565b60006040518083038185875af1925050503d806000811462000526576040519150601f19603f3d011682016040523d82523d6000602084013e6200052b565b606091505b5090925090506200053f878383876200054a565b979650505050505050565b60608315620005be578251600003620005b6576001600160a01b0385163b620005b65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200008a565b50816200045e565b6200045e8383815115620005d55781518083602001fd5b8060405162461bcd60e51b81526004016200008a91906200071e565b6001600160a01b03811681146200060757600080fd5b50565b6000806000606084860312156200062057600080fd5b83516200062d81620005f1565b60208501519093506200064081620005f1565b604085015190925060ff811681146200065857600080fd5b809150509250925092565b60ff81811683821602908116908181146200068e57634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215620006a857600080fd5b5051919050565b600060208284031215620006c257600080fd5b81518015158114620006d357600080fd5b9392505050565b60005b83811015620006f7578181015183820152602001620006dd565b50506000910152565b6000825162000714818460208701620006da565b9190910192915050565b60208152600082518060208401526200073f816040850160208701620006da565b601f01601f19169190910160400192915050565b608051614a5462000776600039600081816103eb01526125b70152614a546000f3fe6080604052600436106101e75760003560e01c80638f491cba11610102578063c89245d511610095578063e6c725f511610064578063e6c725f514610671578063e89b4485146106b0578063ef686d8e146106d1578063f2fde38b146106f157600080fd5b8063c89245d5146105e6578063ca709a2514610606578063cf6730f814610631578063e4ca87541461065157600080fd5b8063b187bd26116100d1578063b187bd261461052b578063b5a110111461055b578063bee518a41461057b578063c851cc32146105c657600080fd5b80638f491cba1461048f5780639fe74e26146104af578063ae90de55146104cf578063b0f479a11461050057600080fd5b8063665ed5371161017a57806379ba50971161014957806379ba50971461040f5780638462a2b91461042457806385572ffb146104445780638da5cb5b1461046457600080fd5b8063665ed5371461036f5780636939cd971461038f5780636d62d633146103bc57806372be9eb8146103dc57600080fd5b80632874d8bf116101b65780632874d8bf146102c05780632b6e5d63146102d557806335f170ef146103215780635e35359e1461034f57600080fd5b80630a9094dc146101f35780630e958d6b1461022857806316c38b3c14610248578063181f5a771461026a57600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021361020e366004613766565b610711565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b50610213610243366004613795565b610724565b34801561025457600080fd5b50610268610263366004613828565b61076f565b005b34801561027657600080fd5b506102b36040518060400160405280601881526020017f53656c6646756e64656450696e67506f6e6720312e352e30000000000000000081525081565b60405161021f91906138b3565b3480156102cc57600080fd5b506102686107c1565b3480156102e157600080fd5b5060085473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161021f565b34801561032d57600080fd5b5061034161033c3660046138c6565b6107fd565b60405161021f9291906138e3565b34801561035b57600080fd5b5061026861036a366004613933565b610929565b34801561037b57600080fd5b5061026861038a366004613828565b6109fe565b34801561039b57600080fd5b506103af6103aa366004613766565b610c94565b60405161021f91906139d1565b3480156103c857600080fd5b506102686103d7366004613a65565b610e9f565b3480156103e857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610213565b34801561041b57600080fd5b506102686110b7565b34801561043057600080fd5b5061026861043f366004613ae1565b6111b4565b34801561045057600080fd5b5061026861045f366004613b4d565b6114f5565b34801561047057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166102fc565b34801561049b57600080fd5b506102686104aa366004613766565b6116ec565b3480156104bb57600080fd5b506102686104ca366004613b88565b6118ca565b3480156104db57600080fd5b506008547501000000000000000000000000000000000000000000900460ff16610213565b34801561050c57600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff166102fc565b34801561053757600080fd5b5060085474010000000000000000000000000000000000000000900460ff16610213565b34801561056757600080fd5b50610268610576366004613bca565b611a83565b34801561058757600080fd5b5060075474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161021f565b3480156105d257600080fd5b506102686105e1366004613bf8565b611c8b565b3480156105f257600080fd5b50610268610601366004613bf8565b611d57565b34801561061257600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff166102fc565b34801561063d57600080fd5b5061026861064c366004613b4d565b611ec1565b34801561065d57600080fd5b5061026861066c366004613766565b61204c565b34801561067d57600080fd5b50600854760100000000000000000000000000000000000000000000900460ff1660405160ff909116815260200161021f565b6106c36106be366004613d4a565b61231a565b60405190815260200161021f565b3480156106dd57600080fd5b506102686106ec366004613e57565b612853565b3480156106fd57600080fd5b5061026861070c366004613bf8565b6128dd565b600061071e6005836128ee565b92915050565b67ffffffffffffffff831660009081526003602052604080822090516002909101906107539085908590613e7a565b9081526040519081900360200190205460ff1690509392505050565b610777612909565b6008805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6107c9612909565b600880547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556107fb600161298a565b565b60036020526000908152604090208054819061081890613e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461084490613e8a565b80156108915780601f1061086657610100808354040283529160200191610891565b820191906000526020600020905b81548152906001019060200180831161087457829003601f168201915b5050505050908060010180546108a690613e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546108d290613e8a565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b5050505050905082565b610931612909565b73ffffffffffffffffffffffffffffffffffffffff83166109715761096c73ffffffffffffffffffffffffffffffffffffffff831682612bc6565b610992565b61099273ffffffffffffffffffffffffffffffffffffffff84168383612d20565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6832d9be2410a86571981e1e60fd4c1f9ea2a1034d6102a2b7d6c5e480adf02e836040516109f191815260200190565b60405180910390a3505050565b610a06612909565b600880547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000831515021790556002546007546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015610ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b029190613eed565b905060008173ffffffffffffffffffffffffffffffffffffffff166306285c696040518163ffffffff1660e01b815260040161010060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190613f31565b9050610c186040518060400160405280836060015167ffffffffffffffff1681526020018515158152506040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b60075474010000000000000000000000000000000000000000900467ffffffffffffffff16600090815260036020526040902060010190610c59908261404b565b5060405183151581527f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99060200160405180910390a1505050565b6040805160a08082018352600080835260208084018290526060848601819052808501819052608085015285825260048152908490208451928301855280548352600181015467ffffffffffffffff1691830191909152600281018054939492939192840191610d0390613e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2f90613e8a565b8015610d7c5780601f10610d5157610100808354040283529160200191610d7c565b820191906000526020600020905b815481529060010190602001808311610d5f57829003601f168201915b50505050508152602001600382018054610d9590613e8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc190613e8a565b8015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015610e915760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610e3c565b505050915250909392505050565b610ea7612909565b610eb26005836128ee565b610ef0576040517fb6e78260000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b600082815260046020818152604080842090920180548351818402810184019094528084529091849084015b82821015610f715760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101610f1c565b50505060008581526004602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001690559293509050610fc160028301826136b4565b610fcf6003830160006136b4565b610fdd6004830160006136ee565b50610feb9050600584612df4565b5060005b81518110156110655761105d8383838151811061100e5761100e614165565b60200260200101516020015184848151811061102c5761102c614165565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612d209092919063ffffffff16565b600101610fef565b5060405173ffffffffffffffffffffffffffffffffffffffff8316815283907fd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957906020015b60405180910390a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610ee7565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6111bc612909565b60005b8181101561134f57600360008484848181106111dd576111dd614165565b90506020028101906111ef9190614194565b6111fd9060208101906138c6565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020183838381811061123457611234614165565b90506020028101906112469190614194565b6112549060208101906141d2565b604051611262929190613e7a565b90815260405190819003602001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558282828181106112a9576112a9614165565b90506020028101906112bb9190614194565b6112c99060208101906141d2565b6040516112d7929190613e7a565b60405180910390208383838181106112f1576112f1614165565b90506020028101906113039190614194565b6113119060208101906138c6565b67ffffffffffffffff167f021290bab0d93f4d9a243bd430e45dd4bc8238451e9abbba6fab4463677dfce960405160405180910390a36001016111bf565b5060005b838110156114ee5760016003600087878581811061137357611373614165565b90506020028101906113859190614194565b6113939060208101906138c6565b67ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206002018686848181106113ca576113ca614165565b90506020028101906113dc9190614194565b6113ea9060208101906141d2565b6040516113f8929190613e7a565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905584848281811061144857611448614165565b905060200281019061145a9190614194565b6114689060208101906141d2565b604051611476929190613e7a565b604051809103902085858381811061149057611490614165565b90506020028101906114a29190614194565b6114b09060208101906138c6565b67ffffffffffffffff167f72d9f73bb7cb11065e15df29d61e803a0eba356d509a7025a6f51ebdea07f9e760405160405180910390a3600101611353565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611548576040517fd7f73334000000000000000000000000000000000000000000000000000000008152336004820152602401610ee7565b61155860408201602083016138c6565b67ffffffffffffffff81166000908152600360205260409020805461157c90613e8a565b90506000036115c3576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610ee7565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906115ff908590600401614339565b600060405180830381600087803b15801561161957600080fd5b505af192505050801561162a575060015b6116bc573d808015611658576040519150601f19603f3d011682016040523d82523d6000602084013e61165d565b606091505b5061166a60058435612e00565b5082356000908152600460205260409020839061168782826146c3565b50506040518335907f55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f906110aa9084906138b3565b6040518235907fdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f90600090a25050565b600854760100000000000000000000000000000000000000000000900460ff1615806117365750600854760100000000000000000000000000000000000000000000900460ff1681105b1561173e5750565b60085460019061176b90760100000000000000000000000000000000000000000000900460ff16836147bd565b116118c75760025473ffffffffffffffffffffffffffffffffffffffff166007546040517fa8d87a3b0000000000000000000000000000000000000000000000000000000081527401000000000000000000000000000000000000000090910467ffffffffffffffff16600482015273ffffffffffffffffffffffffffffffffffffffff919091169063a8d87a3b90602401602060405180830381865afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190613eed565b73ffffffffffffffffffffffffffffffffffffffff1663eff7cc486040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561188557600080fd5b505af1158015611899573d6000803e3d6000fd5b50506040517f302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c925060009150a15b50565b6118d2612909565b60005b81811015611a7e5760008383838181106118f1576118f1614165565b905060200281019061190391906147f8565b61190c9061482c565b9050806020015161197757805167ffffffffffffffff16600090815260036020526040812061193a916136b4565b805160405167ffffffffffffffff909116907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991690600090a2611a75565b8060400151516000036119b6576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080820151825167ffffffffffffffff166000908152600360205291909120906119e1908261404b565b506060810151815167ffffffffffffffff16600090815260036020526040902060010190611a0f908261404b565b508060400151604051611a2291906148dd565b6040518091039020816000015167ffffffffffffffff167f1ced5bcae649ed29cebfa0010298ad6794bf3822e8cb754a6eee5353a9a872128360600151604051611a6c91906138b3565b60405180910390a35b506001016118d5565b505050565b611a8b612909565b73ffffffffffffffffffffffffffffffffffffffff81161580611ab6575067ffffffffffffffff8216155b15611aed576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff851690810291909117909155600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560009182526003602090815260409283902083519182019290925260019260029092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611bde916148dd565b908152604080516020928190038301812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169415159490941790935573ffffffffffffffffffffffffffffffffffffffff84169183019190915201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291815267ffffffffffffffff8416600090815260036020522090611a7e908261404b565b611c93612909565b73ffffffffffffffffffffffffffffffffffffffff8116611ce0576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f3672b589036f39ac008505b790fcb05d484d70b65680ec64c089a3c173fdc4c890600090a35050565b611d5f612909565b60075473ffffffffffffffffffffffffffffffffffffffff1615611dc057611dc0611d9f60025473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff16906000612e0c565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355169015611e6d57611e6d611e2d60025473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612f8e565b6040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f91a03e1d689caf891fe531c01e290f7b718f9c6a3af6726d6d837d2b7bd82e67910160405180910390a15050565b333014611efa576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f0a60408201602083016138c6565b611f1760408301836141d2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525067ffffffffffffffff861681526003602052604090208054909350611f6e92509050613e8a565b15905080611fc45750600360008367ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060020181604051611faf91906148dd565b9081526040519081900360200190205460ff16155b15611ffd57806040517f5075bb38000000000000000000000000000000000000000000000000000000008152600401610ee791906138b3565b60085474010000000000000000000000000000000000000000900460ff16611a7e57611a7e61202f60608501856141d2565b81019061203c9190613766565b6120479060016148ef565b61298a565b6120576005826128ee565b612090576040517fb6e7826000000000000000000000000000000000000000000000000000000000815260048101829052602401610ee7565b6000818152600460209081526040808320815160a08101835281548152600182015467ffffffffffffffff169381019390935260028101805491928401916120d790613e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461210390613e8a565b80156121505780601f1061212557610100808354040283529160200191612150565b820191906000526020600020905b81548152906001019060200180831161213357829003601f168201915b5050505050815260200160038201805461216990613e8a565b80601f016020809104026020016040519081016040528092919081815260200182805461219590613e8a565b80156121e25780601f106121b7576101008083540402835291602001916121e2565b820191906000526020600020905b8154815290600101906020018083116121c557829003601f168201915b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156122655760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101612210565b5050509152505060008381526004602052604081208181556001810180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001690559192506122b760028301826136b4565b6122c56003830160006136b4565b6122d36004830160006136ee565b506122e19050600583612df4565b506122eb81613092565b60405182907fef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad90600090a25050565b67ffffffffffffffff83166000908152600360205260408120805485919061234190613e8a565b9050600003612388576040517fd79f2ea400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610ee7565b6040805160a08101825267ffffffffffffffff87166000908152600360205291822080548291906123b890613e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546123e490613e8a565b80156124315780601f1061240657610100808354040283529160200191612431565b820191906000526020600020905b81548152906001019060200180831161241457829003601f168201915b50505091835250506020808201879052604080830189905260075473ffffffffffffffffffffffffffffffffffffffff16606084015267ffffffffffffffff8a16600090815260039092529020600101805460809092019161249290613e8a565b80601f01602080910402602001604051908101604052809291908181526020018280546124be90613e8a565b801561250b5780601f106124e05761010080835404028352916020019161250b565b820191906000526020600020905b8154815290600101906020018083116124ee57829003601f168201915b5050509190925250506002546040517f20487ded00000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906320487ded90612572908a908690600401614902565b602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b391906149cf565b90507f00000000000000000000000000000000000000000000000000000000000000001580156125fa575060075473ffffffffffffffffffffffffffffffffffffffff1615155b15612624576007546126249073ffffffffffffffffffffffffffffffffffffffff16333084613104565b60005b865181101561277757612697333089848151811061264757612647614165565b6020026020010151602001518a858151811061266557612665614165565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16613104909392919063ffffffff16565b600754875173ffffffffffffffffffffffffffffffffffffffff909116908890839081106126c7576126c7614165565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161461276f57600254875161276f9173ffffffffffffffffffffffffffffffffffffffff169089908490811061272057612720614165565b60200260200101516020015189848151811061273e5761273e614165565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16612e0c9092919063ffffffff16565b600101612627565b5060025460075473ffffffffffffffffffffffffffffffffffffffff918216916396f4e9f99116156127aa5760006127ac565b825b89856040518463ffffffff1660e01b81526004016127cb929190614902565b60206040518083038185885af11580156127e9573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061280e91906149cf565b93507f54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a8460405161284191815260200190565b60405180910390a15050509392505050565b61285b612909565b600880547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff1676010000000000000000000000000000000000000000000060ff8416908102919091179091556040519081527f4768dbf8645b24c54f2887651545d24f748c0d0d1d4c689eb810fb19f0befcf39060200160405180910390a150565b6128e5612909565b6118c781613162565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610ee7565b806001166001036129cd576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a1612a01565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b612a0a816116ec565b6040805160a0810190915260085473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e08101604051602081830303815290604052815260200183604051602001612a6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905281526020016000604051908082528060200260200182016040528015612adc57816020015b6040805180820190915260008082526020820152815260200190600190039081612ab55790505b50815260075473ffffffffffffffffffffffffffffffffffffffff1660208083019190915260408051918201815260008252909101529050612b3360025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166396f4e9f9600760149054906101000a900467ffffffffffffffff16836040518363ffffffff1660e01b8152600401612b83929190614902565b6020604051808303816000875af1158015612ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e91906149cf565b80471015612c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ee7565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612c8a576040519150601f19603f3d011682016040523d82523d6000602084013e612c8f565b606091505b5050905080611a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ee7565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611a7e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613257565b60006129028383613363565b60006129028383613456565b801580612eac57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015612e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eaa91906149cf565b155b612f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610ee7565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611a7e9084907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612d72565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015613005573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302991906149cf565b61303391906148ef565b60405173ffffffffffffffffffffffffffffffffffffffff851660248201526044810182905290915061308c9085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612d72565b50505050565b61309a612909565b6040517fcf6730f8000000000000000000000000000000000000000000000000000000008152309063cf6730f8906130d69084906004016139d1565b600060405180830381600087803b1580156130f057600080fd5b505af11580156114ee573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261308c9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612d72565b3373ffffffffffffffffffffffffffffffffffffffff8216036131e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610ee7565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006132b9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134a59092919063ffffffff16565b805190915015611a7e57808060200190518101906132d791906149e8565b611a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ee7565b6000818152600183016020526040812054801561344c576000613387600183614a05565b855490915060009061339b90600190614a05565b90508181146134005760008660000182815481106133bb576133bb614165565b90600052602060002001549050808760000184815481106133de576133de614165565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061341157613411614a18565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061071e565b600091505061071e565b600081815260018301602052604081205461349d5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561071e565b50600061071e565b60606134b484846000856134bc565b949350505050565b60608247101561354e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ee7565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161357791906148dd565b60006040518083038185875af1925050503d80600081146135b4576040519150601f19603f3d011682016040523d82523d6000602084013e6135b9565b606091505b50915091506135ca878383876135d5565b979650505050505050565b6060831561366b5782516000036136645773ffffffffffffffffffffffffffffffffffffffff85163b613664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ee7565b50816134b4565b6134b483838151156136805781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee791906138b3565b5080546136c090613e8a565b6000825580601f106136d0575050565b601f0160209004906000526020600020908101906118c7919061370f565b50805460008255600202906000526020600020908101906118c79190613728565b5b808211156137245760008155600101613710565b5090565b5b808211156137245780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201613729565b60006020828403121561377857600080fd5b5035919050565b67ffffffffffffffff811681146118c757600080fd5b6000806000604084860312156137aa57600080fd5b83356137b58161377f565b9250602084013567ffffffffffffffff808211156137d257600080fd5b818601915086601f8301126137e657600080fd5b8135818111156137f557600080fd5b87602082850101111561380757600080fd5b6020830194508093505050509250925092565b80151581146118c757600080fd5b60006020828403121561383a57600080fd5b81356129028161381a565b60005b83811015613860578181015183820152602001613848565b50506000910152565b60008151808452613881816020860160208601613845565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129026020830184613869565b6000602082840312156138d857600080fd5b81356129028161377f565b6040815260006138f66040830185613869565b82810360208401526139088185613869565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118c757600080fd5b60008060006060848603121561394857600080fd5b833561395381613911565b9250602084013561396381613911565b929592945050506040919091013590565b60008151808452602080850194506020840160005b838110156139c6578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101613989565b509495945050505050565b602081528151602082015267ffffffffffffffff60208301511660408201526000604083015160a06060840152613a0b60c0840182613869565b905060608401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080858403016080860152613a478383613869565b925060808601519150808584030160a0860152506139088282613974565b60008060408385031215613a7857600080fd5b823591506020830135613a8a81613911565b809150509250929050565b60008083601f840112613aa757600080fd5b50813567ffffffffffffffff811115613abf57600080fd5b6020830191508360208260051b8501011115613ada57600080fd5b9250929050565b60008060008060408587031215613af757600080fd5b843567ffffffffffffffff80821115613b0f57600080fd5b613b1b88838901613a95565b90965094506020870135915080821115613b3457600080fd5b50613b4187828801613a95565b95989497509550505050565b600060208284031215613b5f57600080fd5b813567ffffffffffffffff811115613b7657600080fd5b820160a0818503121561290257600080fd5b60008060208385031215613b9b57600080fd5b823567ffffffffffffffff811115613bb257600080fd5b613bbe85828601613a95565b90969095509350505050565b60008060408385031215613bdd57600080fd5b8235613be88161377f565b91506020830135613a8a81613911565b600060208284031215613c0a57600080fd5b813561290281613911565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613c6757613c67613c15565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613cb457613cb4613c15565b604052919050565b600082601f830112613ccd57600080fd5b813567ffffffffffffffff811115613ce757613ce7613c15565b613d1860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613c6d565b818152846020838601011115613d2d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613d5f57600080fd5b8335613d6a8161377f565b925060208481013567ffffffffffffffff80821115613d8857600080fd5b818701915087601f830112613d9c57600080fd5b813581811115613dae57613dae613c15565b613dbc848260051b01613c6d565b81815260069190911b8301840190848101908a831115613ddb57600080fd5b938501935b82851015613e27576040858c031215613df95760008081fd5b613e01613c44565b8535613e0c81613911565b81528587013587820152825260409094019390850190613de0565b965050506040870135925080831115613e3f57600080fd5b5050613e4d86828701613cbc565b9150509250925092565b600060208284031215613e6957600080fd5b813560ff8116811461290257600080fd5b8183823760009101908152919050565b600181811c90821680613e9e57607f821691505b602082108103613ed7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8051613ee881613911565b919050565b600060208284031215613eff57600080fd5b815161290281613911565b8051613ee88161377f565b80516bffffffffffffffffffffffff81168114613ee857600080fd5b6000610100808385031215613f4557600080fd5b6040519081019067ffffffffffffffff82118183101715613f6857613f68613c15565b8160405283519150613f7982613911565b818152613f8860208501613f0a565b6020820152613f9960408501613f0a565b6040820152613faa60608501613f0a565b6060820152613fbb60808501613f15565b6080820152613fcc60a08501613edd565b60a0820152613fdd60c08501613edd565b60c0820152613fee60e08501613edd565b60e0820152949350505050565b601f821115611a7e576000816000526020600020601f850160051c810160208610156140245750805b601f850160051c820191505b8181101561404357828155600101614030565b505050505050565b815167ffffffffffffffff81111561406557614065613c15565b614079816140738454613e8a565b84613ffb565b602080601f8311600181146140cc57600084156140965750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614043565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614119578886015182559484019460019091019084016140fa565b508582101561415557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126141c857600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261420757600080fd5b83018035915067ffffffffffffffff82111561422257600080fd5b602001915036819003821315613ada57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261426c57600080fd5b830160208101925035905067ffffffffffffffff81111561428c57600080fd5b803603821315613ada57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156139c657813561430781613911565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016142f4565b6020815281356020820152600060208301356143548161377f565b67ffffffffffffffff80821660408501526143726040860186614237565b925060a0606086015261438960c08601848361429b565b9250506143996060860186614237565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808786030160808801526143cf85838561429b565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe188360301831261440857600080fd5b6020928801928301923591508382111561442157600080fd5b8160061b360383131561443357600080fd5b8685030160a08701526135ca8482846142e4565b67ffffffffffffffff83111561445f5761445f613c15565b6144738361446d8354613e8a565b83613ffb565b6000601f8411600181146144c5576000851561448f5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556114ee565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561451457868501358255602094850194600190920191016144f4565b508682101561454f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b813561459b81613911565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b6801000000000000000083111561460157614601613c15565b80548382558084101561468e5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461464257614642614561565b808616861461465357614653614561565b5060008360005260206000208360011b81018760011b820191505b8082101561468957828255828483015560028201915061466e565b505050505b5060008181526020812083915b85811015614043576146ad8383614590565b604092909201916002919091019060010161469b565b813581556001810160208301356146d98161377f565b67ffffffffffffffff8082167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000084541617835561471960408601866141d2565b9350915061472b838360028701614447565b61473860608601866141d2565b9350915061474a838360038701614447565b608085013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301831261478157600080fd5b91840191823591508082111561479657600080fd5b506020820191508060061b36038213156147af57600080fd5b61308c8183600486016145e8565b6000826147f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126141c857600080fd5b60006080823603121561483e57600080fd5b6040516080810167ffffffffffffffff828210818311171561486257614862613c15565b81604052843591506148738261377f565b9082526020840135906148858261381a565b816020840152604085013591508082111561489f57600080fd5b6148ab36838701613cbc565b604084015260608501359150808211156148c457600080fd5b506148d136828601613cbc565b60608301525092915050565b600082516141c8818460208701613845565b8082018082111561071e5761071e614561565b67ffffffffffffffff83168152604060208201526000825160a0604084015261492e60e0840182613869565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08085840301606086015261496a8383613869565b925060408601519150808584030160808601526149878383613974565b925073ffffffffffffffffffffffffffffffffffffffff60608701511660a086015260808601519150808584030160c0860152506149c58282613869565b9695505050505050565b6000602082840312156149e157600080fd5b5051919050565b6000602082840312156149fa57600080fd5b81516129028161381a565b8181038181111561071e5761071e614561565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var SelfFundedPingPongABI = SelfFundedPingPongMetaData.ABI @@ -284,6 +284,28 @@ func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetFeeToken() (commo return _SelfFundedPingPong.Contract.GetFeeToken(&_SelfFundedPingPong.CallOpts) } +func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) { + var out []interface{} + err := _SelfFundedPingPong.contract.Call(opts, &out, "getMessageContents", messageId) + + if err != nil { + return *new(ClientAny2EVMMessage), err + } + + out0 := *abi.ConvertType(out[0], new(ClientAny2EVMMessage)).(*ClientAny2EVMMessage) + + return out0, err + +} + +func (_SelfFundedPingPong *SelfFundedPingPongSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _SelfFundedPingPong.Contract.GetMessageContents(&_SelfFundedPingPong.CallOpts, messageId) +} + +func (_SelfFundedPingPong *SelfFundedPingPongCallerSession) GetMessageContents(messageId [32]byte) (ClientAny2EVMMessage, error) { + return _SelfFundedPingPong.Contract.GetMessageContents(&_SelfFundedPingPong.CallOpts, messageId) +} + func (_SelfFundedPingPong *SelfFundedPingPongCaller) GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) { var out []interface{} err := _SelfFundedPingPong.contract.Call(opts, &out, "getOutOfOrderExecution") @@ -610,30 +632,6 @@ func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpart(c return _SelfFundedPingPong.Contract.SetCounterpart(&_SelfFundedPingPong.TransactOpts, counterpartChainSelector, counterpartAddress) } -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setCounterpartAddress", addr) -} - -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartAddress(&_SelfFundedPingPong.TransactOpts, addr) -} - -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartAddress(&_SelfFundedPingPong.TransactOpts, addr) -} - -func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { - return _SelfFundedPingPong.contract.Transact(opts, "setCounterpartChainSelector", chainSelector) -} - -func (_SelfFundedPingPong *SelfFundedPingPongSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, chainSelector) -} - -func (_SelfFundedPingPong *SelfFundedPingPongTransactorSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { - return _SelfFundedPingPong.Contract.SetCounterpartChainSelector(&_SelfFundedPingPong.TransactOpts, chainSelector) -} - func (_SelfFundedPingPong *SelfFundedPingPongTransactor) SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) { return _SelfFundedPingPong.contract.Transact(opts, "setOutOfOrderExecution", outOfOrderExecution) } @@ -1765,8 +1763,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseFunded(log types.Log return event, nil } -type SelfFundedPingPongOutOfOrderExecutionChangeIterator struct { - Event *SelfFundedPingPongOutOfOrderExecutionChange +type SelfFundedPingPongMessageAbandonedIterator struct { + Event *SelfFundedPingPongMessageAbandoned contract *bind.BoundContract event string @@ -1777,7 +1775,7 @@ type SelfFundedPingPongOutOfOrderExecutionChangeIterator struct { fail error } -func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Next() bool { +func (it *SelfFundedPingPongMessageAbandonedIterator) Next() bool { if it.fail != nil { return false @@ -1786,7 +1784,7 @@ func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongOutOfOrderExecutionChange) + it.Event = new(SelfFundedPingPongMessageAbandoned) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1801,7 +1799,7 @@ func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongOutOfOrderExecutionChange) + it.Event = new(SelfFundedPingPongMessageAbandoned) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1816,32 +1814,43 @@ func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Next() bool { } } -func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Error() error { +func (it *SelfFundedPingPongMessageAbandonedIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Close() error { +func (it *SelfFundedPingPongMessageAbandonedIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongOutOfOrderExecutionChange struct { - IsOutOfOrder bool - Raw types.Log +type SelfFundedPingPongMessageAbandoned struct { + MessageId [32]byte + TokenReceiver common.Address + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*SelfFundedPingPongOutOfOrderExecutionChangeIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageAbandoned(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageAbandonedIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OutOfOrderExecutionChange") + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageAbandoned", messageIdRule) if err != nil { return nil, err } - return &SelfFundedPingPongOutOfOrderExecutionChangeIterator{contract: _SelfFundedPingPong.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageAbandonedIterator{contract: _SelfFundedPingPong.contract, event: "MessageAbandoned", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOutOfOrderExecutionChange) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageAbandoned(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAbandoned, messageId [][32]byte) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OutOfOrderExecutionChange") + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageAbandoned", messageIdRule) if err != nil { return nil, err } @@ -1851,8 +1860,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOutOfOrderExecutionC select { case log := <-logs: - event := new(SelfFundedPingPongOutOfOrderExecutionChange) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { + event := new(SelfFundedPingPongMessageAbandoned) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAbandoned", log); err != nil { return err } event.Raw = log @@ -1873,17 +1882,17 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOutOfOrderExecutionC }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*SelfFundedPingPongOutOfOrderExecutionChange, error) { - event := new(SelfFundedPingPongOutOfOrderExecutionChange) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageAbandoned(log types.Log) (*SelfFundedPingPongMessageAbandoned, error) { + event := new(SelfFundedPingPongMessageAbandoned) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageAbandoned", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SelfFundedPingPongOwnershipTransferRequestedIterator struct { - Event *SelfFundedPingPongOwnershipTransferRequested +type SelfFundedPingPongMessageFailedIterator struct { + Event *SelfFundedPingPongMessageFailed contract *bind.BoundContract event string @@ -1894,7 +1903,7 @@ type SelfFundedPingPongOwnershipTransferRequestedIterator struct { fail error } -func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Next() bool { +func (it *SelfFundedPingPongMessageFailedIterator) Next() bool { if it.fail != nil { return false @@ -1903,7 +1912,7 @@ func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongOwnershipTransferRequested) + it.Event = new(SelfFundedPingPongMessageFailed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1918,7 +1927,7 @@ func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongOwnershipTransferRequested) + it.Event = new(SelfFundedPingPongMessageFailed) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1933,51 +1942,43 @@ func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Next() bool { } } -func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Error() error { +func (it *SelfFundedPingPongMessageFailedIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Close() error { +func (it *SelfFundedPingPongMessageFailedIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongOwnershipTransferRequested struct { - From common.Address - To common.Address - Raw types.Log +type SelfFundedPingPongMessageFailed struct { + MessageId [32]byte + Reason []byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*SelfFundedPingPongOwnershipTransferRequestedIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageFailedIterator, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) } - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageFailed", messageIdRule) if err != nil { return nil, err } - return &SelfFundedPingPongOwnershipTransferRequestedIterator{contract: _SelfFundedPingPong.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageFailedIterator{contract: _SelfFundedPingPong.contract, event: "MessageFailed", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageFailed, messageId [][32]byte) (event.Subscription, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) } - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageFailed", messageIdRule) if err != nil { return nil, err } @@ -1987,8 +1988,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferReq select { case log := <-logs: - event := new(SelfFundedPingPongOwnershipTransferRequested) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + event := new(SelfFundedPingPongMessageFailed) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageFailed", log); err != nil { return err } event.Raw = log @@ -2009,17 +2010,17 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferReq }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOwnershipTransferRequested(log types.Log) (*SelfFundedPingPongOwnershipTransferRequested, error) { - event := new(SelfFundedPingPongOwnershipTransferRequested) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageFailed(log types.Log) (*SelfFundedPingPongMessageFailed, error) { + event := new(SelfFundedPingPongMessageFailed) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageFailed", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SelfFundedPingPongOwnershipTransferredIterator struct { - Event *SelfFundedPingPongOwnershipTransferred +type SelfFundedPingPongMessageRecoveredIterator struct { + Event *SelfFundedPingPongMessageRecovered contract *bind.BoundContract event string @@ -2030,7 +2031,7 @@ type SelfFundedPingPongOwnershipTransferredIterator struct { fail error } -func (it *SelfFundedPingPongOwnershipTransferredIterator) Next() bool { +func (it *SelfFundedPingPongMessageRecoveredIterator) Next() bool { if it.fail != nil { return false @@ -2039,7 +2040,7 @@ func (it *SelfFundedPingPongOwnershipTransferredIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongOwnershipTransferred) + it.Event = new(SelfFundedPingPongMessageRecovered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2054,7 +2055,7 @@ func (it *SelfFundedPingPongOwnershipTransferredIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongOwnershipTransferred) + it.Event = new(SelfFundedPingPongMessageRecovered) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2069,51 +2070,42 @@ func (it *SelfFundedPingPongOwnershipTransferredIterator) Next() bool { } } -func (it *SelfFundedPingPongOwnershipTransferredIterator) Error() error { +func (it *SelfFundedPingPongMessageRecoveredIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongOwnershipTransferredIterator) Close() error { +func (it *SelfFundedPingPongMessageRecoveredIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongOwnershipTransferred struct { - From common.Address - To common.Address - Raw types.Log +type SelfFundedPingPongMessageRecovered struct { + MessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*SelfFundedPingPongOwnershipTransferredIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageRecoveredIterator, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) } - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageRecovered", messageIdRule) if err != nil { return nil, err } - return &SelfFundedPingPongOwnershipTransferredIterator{contract: _SelfFundedPingPong.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageRecoveredIterator{contract: _SelfFundedPingPong.contract, event: "MessageRecovered", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageRecovered, messageId [][32]byte) (event.Subscription, error) { - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) } - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageRecovered", messageIdRule) if err != nil { return nil, err } @@ -2123,8 +2115,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferred select { case log := <-logs: - event := new(SelfFundedPingPongOwnershipTransferred) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + event := new(SelfFundedPingPongMessageRecovered) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageRecovered", log); err != nil { return err } event.Raw = log @@ -2145,17 +2137,17 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferred }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOwnershipTransferred(log types.Log) (*SelfFundedPingPongOwnershipTransferred, error) { - event := new(SelfFundedPingPongOwnershipTransferred) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageRecovered(log types.Log) (*SelfFundedPingPongMessageRecovered, error) { + event := new(SelfFundedPingPongMessageRecovered) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageRecovered", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SelfFundedPingPongPingIterator struct { - Event *SelfFundedPingPongPing +type SelfFundedPingPongMessageSentIterator struct { + Event *SelfFundedPingPongMessageSent contract *bind.BoundContract event string @@ -2166,7 +2158,7 @@ type SelfFundedPingPongPingIterator struct { fail error } -func (it *SelfFundedPingPongPingIterator) Next() bool { +func (it *SelfFundedPingPongMessageSentIterator) Next() bool { if it.fail != nil { return false @@ -2175,7 +2167,7 @@ func (it *SelfFundedPingPongPingIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongPing) + it.Event = new(SelfFundedPingPongMessageSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2190,7 +2182,7 @@ func (it *SelfFundedPingPongPingIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongPing) + it.Event = new(SelfFundedPingPongMessageSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2205,32 +2197,32 @@ func (it *SelfFundedPingPongPingIterator) Next() bool { } } -func (it *SelfFundedPingPongPingIterator) Error() error { +func (it *SelfFundedPingPongMessageSentIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongPingIterator) Close() error { +func (it *SelfFundedPingPongMessageSentIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongPing struct { - PingPongCount *big.Int - Raw types.Log +type SelfFundedPingPongMessageSent struct { + MessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterPing(opts *bind.FilterOpts) (*SelfFundedPingPongPingIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageSentIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "Ping") + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageSent") if err != nil { return nil, err } - return &SelfFundedPingPongPingIterator{contract: _SelfFundedPingPong.contract, event: "Ping", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageSentIterator{contract: _SelfFundedPingPong.contract, event: "MessageSent", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongPing) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "Ping") + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageSent") if err != nil { return nil, err } @@ -2240,8 +2232,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPing(opts *bind.Watc select { case log := <-logs: - event := new(SelfFundedPingPongPing) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "Ping", log); err != nil { + event := new(SelfFundedPingPongMessageSent) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSent", log); err != nil { return err } event.Raw = log @@ -2262,17 +2254,17 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPing(opts *bind.Watc }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParsePing(log types.Log) (*SelfFundedPingPongPing, error) { - event := new(SelfFundedPingPongPing) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "Ping", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageSent(log types.Log) (*SelfFundedPingPongMessageSent, error) { + event := new(SelfFundedPingPongMessageSent) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSent", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SelfFundedPingPongPongIterator struct { - Event *SelfFundedPingPongPong +type SelfFundedPingPongMessageSucceededIterator struct { + Event *SelfFundedPingPongMessageSucceeded contract *bind.BoundContract event string @@ -2283,7 +2275,7 @@ type SelfFundedPingPongPongIterator struct { fail error } -func (it *SelfFundedPingPongPongIterator) Next() bool { +func (it *SelfFundedPingPongMessageSucceededIterator) Next() bool { if it.fail != nil { return false @@ -2292,7 +2284,7 @@ func (it *SelfFundedPingPongPongIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongPong) + it.Event = new(SelfFundedPingPongMessageSucceeded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2307,7 +2299,7 @@ func (it *SelfFundedPingPongPongIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongPong) + it.Event = new(SelfFundedPingPongMessageSucceeded) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2322,32 +2314,42 @@ func (it *SelfFundedPingPongPongIterator) Next() bool { } } -func (it *SelfFundedPingPongPongIterator) Error() error { +func (it *SelfFundedPingPongMessageSucceededIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongPongIterator) Close() error { +func (it *SelfFundedPingPongMessageSucceededIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongPong struct { - PingPongCount *big.Int - Raw types.Log +type SelfFundedPingPongMessageSucceeded struct { + MessageId [32]byte + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterPong(opts *bind.FilterOpts) (*SelfFundedPingPongPongIterator, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageSucceededIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "Pong") + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "MessageSucceeded", messageIdRule) if err != nil { return nil, err } - return &SelfFundedPingPongPongIterator{contract: _SelfFundedPingPong.contract, event: "Pong", logs: logs, sub: sub}, nil + return &SelfFundedPingPongMessageSucceededIterator{contract: _SelfFundedPingPong.contract, event: "MessageSucceeded", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPong(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongPong) (event.Subscription, error) { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSucceeded, messageId [][32]byte) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "Pong") + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "MessageSucceeded", messageIdRule) if err != nil { return nil, err } @@ -2357,8 +2359,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPong(opts *bind.Watc select { case log := <-logs: - event := new(SelfFundedPingPongPong) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "Pong", log); err != nil { + event := new(SelfFundedPingPongMessageSucceeded) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { return err } event.Raw = log @@ -2379,17 +2381,17 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPong(opts *bind.Watc }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParsePong(log types.Log) (*SelfFundedPingPongPong, error) { - event := new(SelfFundedPingPongPong) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "Pong", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseMessageSucceeded(log types.Log) (*SelfFundedPingPongMessageSucceeded, error) { + event := new(SelfFundedPingPongMessageSucceeded) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "MessageSucceeded", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SelfFundedPingPongTokensWithdrawnByOwnerIterator struct { - Event *SelfFundedPingPongTokensWithdrawnByOwner +type SelfFundedPingPongOutOfOrderExecutionChangeIterator struct { + Event *SelfFundedPingPongOutOfOrderExecutionChange contract *bind.BoundContract event string @@ -2400,7 +2402,7 @@ type SelfFundedPingPongTokensWithdrawnByOwnerIterator struct { fail error } -func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Next() bool { +func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Next() bool { if it.fail != nil { return false @@ -2409,7 +2411,7 @@ func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongTokensWithdrawnByOwner) + it.Event = new(SelfFundedPingPongOutOfOrderExecutionChange) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2424,7 +2426,7 @@ func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(SelfFundedPingPongTokensWithdrawnByOwner) + it.Event = new(SelfFundedPingPongOutOfOrderExecutionChange) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2439,52 +2441,32 @@ func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Next() bool { } } -func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Error() error { +func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Error() error { return it.fail } -func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Close() error { +func (it *SelfFundedPingPongOutOfOrderExecutionChangeIterator) Close() error { it.sub.Unsubscribe() return nil } -type SelfFundedPingPongTokensWithdrawnByOwner struct { - Token common.Address - To common.Address - Amount *big.Int - Raw types.Log +type SelfFundedPingPongOutOfOrderExecutionChange struct { + IsOutOfOrder bool + Raw types.Log } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterTokensWithdrawnByOwner(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*SelfFundedPingPongTokensWithdrawnByOwnerIterator, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*SelfFundedPingPongOutOfOrderExecutionChangeIterator, error) { - logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OutOfOrderExecutionChange") if err != nil { return nil, err } - return &SelfFundedPingPongTokensWithdrawnByOwnerIterator{contract: _SelfFundedPingPong.contract, event: "TokensWithdrawnByOwner", logs: logs, sub: sub}, nil + return &SelfFundedPingPongOutOfOrderExecutionChangeIterator{contract: _SelfFundedPingPong.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchTokensWithdrawnByOwner(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongTokensWithdrawnByOwner, token []common.Address, to []common.Address) (event.Subscription, error) { - - var tokenRule []interface{} - for _, tokenItem := range token { - tokenRule = append(tokenRule, tokenItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOutOfOrderExecutionChange) (event.Subscription, error) { - logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OutOfOrderExecutionChange") if err != nil { return nil, err } @@ -2494,8 +2476,8 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchTokensWithdrawnByOwn select { case log := <-logs: - event := new(SelfFundedPingPongTokensWithdrawnByOwner) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "TokensWithdrawnByOwner", log); err != nil { + event := new(SelfFundedPingPongOutOfOrderExecutionChange) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { return err } event.Raw = log @@ -2516,38 +2498,691 @@ func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchTokensWithdrawnByOwn }), nil } -func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseTokensWithdrawnByOwner(log types.Log) (*SelfFundedPingPongTokensWithdrawnByOwner, error) { - event := new(SelfFundedPingPongTokensWithdrawnByOwner) - if err := _SelfFundedPingPong.contract.UnpackLog(event, "TokensWithdrawnByOwner", log); err != nil { +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*SelfFundedPingPongOutOfOrderExecutionChange, error) { + event := new(SelfFundedPingPongOutOfOrderExecutionChange) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { return nil, err } event.Raw = log return event, nil } -type SChainConfigs struct { - Recipient []byte - ExtraArgsBytes []byte +type SelfFundedPingPongOwnershipTransferRequestedIterator struct { + Event *SelfFundedPingPongOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error } -func (_SelfFundedPingPong *SelfFundedPingPong) ParseLog(log types.Log) (generated.AbigenLog, error) { - switch log.Topics[0] { - case _SelfFundedPingPong.abi.Events["ApprovedSenderAdded"].ID: - return _SelfFundedPingPong.ParseApprovedSenderAdded(log) - case _SelfFundedPingPong.abi.Events["ApprovedSenderRemoved"].ID: - return _SelfFundedPingPong.ParseApprovedSenderRemoved(log) - case _SelfFundedPingPong.abi.Events["CCIPRouterModified"].ID: - return _SelfFundedPingPong.ParseCCIPRouterModified(log) - case _SelfFundedPingPong.abi.Events["ChainAdded"].ID: - return _SelfFundedPingPong.ParseChainAdded(log) - case _SelfFundedPingPong.abi.Events["ChainRemoved"].ID: - return _SelfFundedPingPong.ParseChainRemoved(log) - case _SelfFundedPingPong.abi.Events["CountIncrBeforeFundingSet"].ID: - return _SelfFundedPingPong.ParseCountIncrBeforeFundingSet(log) +func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongOwnershipTransferRequested) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongOwnershipTransferRequested) + 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() + } +} + +func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*SelfFundedPingPongOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &SelfFundedPingPongOwnershipTransferRequestedIterator{contract: _SelfFundedPingPong.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongOwnershipTransferRequested) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOwnershipTransferRequested(log types.Log) (*SelfFundedPingPongOwnershipTransferRequested, error) { + event := new(SelfFundedPingPongOwnershipTransferRequested) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongOwnershipTransferredIterator struct { + Event *SelfFundedPingPongOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongOwnershipTransferred) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongOwnershipTransferred) + 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() + } +} + +func (it *SelfFundedPingPongOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*SelfFundedPingPongOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &SelfFundedPingPongOwnershipTransferredIterator{contract: _SelfFundedPingPong.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongOwnershipTransferred) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferred", 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 +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseOwnershipTransferred(log types.Log) (*SelfFundedPingPongOwnershipTransferred, error) { + event := new(SelfFundedPingPongOwnershipTransferred) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongPingIterator struct { + Event *SelfFundedPingPongPing + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongPingIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongPing) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongPing) + 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() + } +} + +func (it *SelfFundedPingPongPingIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongPingIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongPing struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterPing(opts *bind.FilterOpts) (*SelfFundedPingPongPingIterator, error) { + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "Ping") + if err != nil { + return nil, err + } + return &SelfFundedPingPongPingIterator{contract: _SelfFundedPingPong.contract, event: "Ping", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongPing) (event.Subscription, error) { + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "Ping") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongPing) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "Ping", 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 +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParsePing(log types.Log) (*SelfFundedPingPongPing, error) { + event := new(SelfFundedPingPongPing) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "Ping", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongPongIterator struct { + Event *SelfFundedPingPongPong + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongPongIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongPong) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongPong) + 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() + } +} + +func (it *SelfFundedPingPongPongIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongPongIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongPong struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterPong(opts *bind.FilterOpts) (*SelfFundedPingPongPongIterator, error) { + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "Pong") + if err != nil { + return nil, err + } + return &SelfFundedPingPongPongIterator{contract: _SelfFundedPingPong.contract, event: "Pong", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchPong(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongPong) (event.Subscription, error) { + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "Pong") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongPong) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "Pong", 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 +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParsePong(log types.Log) (*SelfFundedPingPongPong, error) { + event := new(SelfFundedPingPongPong) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "Pong", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SelfFundedPingPongTokensWithdrawnByOwnerIterator struct { + Event *SelfFundedPingPongTokensWithdrawnByOwner + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongTokensWithdrawnByOwner) + 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 + } + } + + select { + case log := <-it.logs: + it.Event = new(SelfFundedPingPongTokensWithdrawnByOwner) + 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() + } +} + +func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Error() error { + return it.fail +} + +func (it *SelfFundedPingPongTokensWithdrawnByOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type SelfFundedPingPongTokensWithdrawnByOwner struct { + Token common.Address + To common.Address + Amount *big.Int + Raw types.Log +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) FilterTokensWithdrawnByOwner(opts *bind.FilterOpts, token []common.Address, to []common.Address) (*SelfFundedPingPongTokensWithdrawnByOwnerIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.FilterLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + if err != nil { + return nil, err + } + return &SelfFundedPingPongTokensWithdrawnByOwnerIterator{contract: _SelfFundedPingPong.contract, event: "TokensWithdrawnByOwner", logs: logs, sub: sub}, nil +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) WatchTokensWithdrawnByOwner(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongTokensWithdrawnByOwner, token []common.Address, to []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _SelfFundedPingPong.contract.WatchLogs(opts, "TokensWithdrawnByOwner", tokenRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(SelfFundedPingPongTokensWithdrawnByOwner) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "TokensWithdrawnByOwner", 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 +} + +func (_SelfFundedPingPong *SelfFundedPingPongFilterer) ParseTokensWithdrawnByOwner(log types.Log) (*SelfFundedPingPongTokensWithdrawnByOwner, error) { + event := new(SelfFundedPingPongTokensWithdrawnByOwner) + if err := _SelfFundedPingPong.contract.UnpackLog(event, "TokensWithdrawnByOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type SChainConfigs struct { + Recipient []byte + ExtraArgsBytes []byte +} + +func (_SelfFundedPingPong *SelfFundedPingPong) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _SelfFundedPingPong.abi.Events["ApprovedSenderAdded"].ID: + return _SelfFundedPingPong.ParseApprovedSenderAdded(log) + case _SelfFundedPingPong.abi.Events["ApprovedSenderRemoved"].ID: + return _SelfFundedPingPong.ParseApprovedSenderRemoved(log) + case _SelfFundedPingPong.abi.Events["CCIPRouterModified"].ID: + return _SelfFundedPingPong.ParseCCIPRouterModified(log) + case _SelfFundedPingPong.abi.Events["ChainAdded"].ID: + return _SelfFundedPingPong.ParseChainAdded(log) + case _SelfFundedPingPong.abi.Events["ChainRemoved"].ID: + return _SelfFundedPingPong.ParseChainRemoved(log) + case _SelfFundedPingPong.abi.Events["CountIncrBeforeFundingSet"].ID: + return _SelfFundedPingPong.ParseCountIncrBeforeFundingSet(log) case _SelfFundedPingPong.abi.Events["FeeTokenUpdated"].ID: return _SelfFundedPingPong.ParseFeeTokenUpdated(log) case _SelfFundedPingPong.abi.Events["Funded"].ID: return _SelfFundedPingPong.ParseFunded(log) + case _SelfFundedPingPong.abi.Events["MessageAbandoned"].ID: + return _SelfFundedPingPong.ParseMessageAbandoned(log) + case _SelfFundedPingPong.abi.Events["MessageFailed"].ID: + return _SelfFundedPingPong.ParseMessageFailed(log) + case _SelfFundedPingPong.abi.Events["MessageRecovered"].ID: + return _SelfFundedPingPong.ParseMessageRecovered(log) + case _SelfFundedPingPong.abi.Events["MessageSent"].ID: + return _SelfFundedPingPong.ParseMessageSent(log) + case _SelfFundedPingPong.abi.Events["MessageSucceeded"].ID: + return _SelfFundedPingPong.ParseMessageSucceeded(log) case _SelfFundedPingPong.abi.Events["OutOfOrderExecutionChange"].ID: return _SelfFundedPingPong.ParseOutOfOrderExecutionChange(log) case _SelfFundedPingPong.abi.Events["OwnershipTransferRequested"].ID: @@ -2598,6 +3233,26 @@ func (SelfFundedPingPongFunded) Topic() common.Hash { return common.HexToHash("0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c") } +func (SelfFundedPingPongMessageAbandoned) Topic() common.Hash { + return common.HexToHash("0xd5038100bd3dc9631d3c3f4f61a3e53e9d466f40c47af9897292c7b35e32a957") +} + +func (SelfFundedPingPongMessageFailed) Topic() common.Hash { + return common.HexToHash("0x55bc02a9ef6f146737edeeb425738006f67f077e7138de3bf84a15bde1a5b56f") +} + +func (SelfFundedPingPongMessageRecovered) Topic() common.Hash { + return common.HexToHash("0xef3bf8c64bc480286c4f3503b870ceb23e648d2d902e31fb7bb46680da6de8ad") +} + +func (SelfFundedPingPongMessageSent) Topic() common.Hash { + return common.HexToHash("0x54791b38f3859327992a1ca0590ad3c0f08feba98d1a4f56ab0dca74d203392a") +} + +func (SelfFundedPingPongMessageSucceeded) Topic() common.Hash { + return common.HexToHash("0xdf6958669026659bac75ba986685e11a7d271284989f565f2802522663e9a70f") +} + func (SelfFundedPingPongOutOfOrderExecutionChange) Topic() common.Hash { return common.HexToHash("0x05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd9") } @@ -2635,6 +3290,8 @@ type SelfFundedPingPongInterface interface { GetFeeToken(opts *bind.CallOpts) (common.Address, error) + GetMessageContents(opts *bind.CallOpts, messageId [32]byte) (ClientAny2EVMMessage, error) + GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) GetRouter(opts *bind.CallOpts) (common.Address, error) @@ -2675,10 +3332,6 @@ type SelfFundedPingPongInterface interface { SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) - SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) - - SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) - SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) @@ -2745,6 +3398,36 @@ type SelfFundedPingPongInterface interface { ParseFunded(log types.Log) (*SelfFundedPingPongFunded, error) + FilterMessageAbandoned(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageAbandonedIterator, error) + + WatchMessageAbandoned(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageAbandoned, messageId [][32]byte) (event.Subscription, error) + + ParseMessageAbandoned(log types.Log) (*SelfFundedPingPongMessageAbandoned, error) + + FilterMessageFailed(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageFailedIterator, error) + + WatchMessageFailed(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageFailed, messageId [][32]byte) (event.Subscription, error) + + ParseMessageFailed(log types.Log) (*SelfFundedPingPongMessageFailed, error) + + FilterMessageRecovered(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageRecoveredIterator, error) + + WatchMessageRecovered(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageRecovered, messageId [][32]byte) (event.Subscription, error) + + ParseMessageRecovered(log types.Log) (*SelfFundedPingPongMessageRecovered, error) + + FilterMessageSent(opts *bind.FilterOpts) (*SelfFundedPingPongMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSent) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*SelfFundedPingPongMessageSent, error) + + FilterMessageSucceeded(opts *bind.FilterOpts, messageId [][32]byte) (*SelfFundedPingPongMessageSucceededIterator, error) + + WatchMessageSucceeded(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongMessageSucceeded, messageId [][32]byte) (event.Subscription, error) + + ParseMessageSucceeded(log types.Log) (*SelfFundedPingPongMessageSucceeded, error) + FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*SelfFundedPingPongOutOfOrderExecutionChangeIterator, error) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *SelfFundedPingPongOutOfOrderExecutionChange) (event.Subscription, error) diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index c91e66bd69..ce6b6d6252 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -1,16 +1,16 @@ GETH_VERSION: 1.13.8 arm_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/solc/v0.8.24/RMN/RMN.bin 1a0abacf84def916519013f713b667f106434a091af8b9f441e12cc90aa2cdf8 arm_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 -ccipClient: ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin 4fa80572165c135051c8f90db530de2da2ffd5f99101cc59e50fa61f2aabccf2 -ccipClientWithACK: ../../../contracts/solc/v0.8.24/CCIPClientWithACK/CCIPClientWithACK.abi ../../../contracts/solc/v0.8.24/CCIPClientWithACK/CCIPClientWithACK.bin 928d49f02f9aef05f27072ebe6de798a655f5b6e48fbe5be7dba185888d60384 -ccipReceiver: ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.abi ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.bin 74f2cedde31d15d881087da352f82668cfc4a11bce6b6a0af6f8fd0c0718cae5 -ccipReceiverWithACK: ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.abi ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.bin 4eb6ce9f4b68c766b2c01f37d12a39a89bfa7636330ddc19b9d038de2f76e795 -ccipSender: ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.abi ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.bin 3e74689a26f094eddf4d2fc8ae16b799dcf8732a2de116748f43f93fba3093e7 burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.bin 1e60c28ad796a220a38043b369dec8d9bffe23e1c7d9895760e30672872afd06 burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin 3e8e3358f0bb520af069a7d37ea625940a88461a54418b1d5925eabced8c74df burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin 717c079d5d13300cf3c3ee871c6e5bf9af904411f204fb081a9f3b263cca1391 burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 6333d0314d0bd29e75ea5e05fe62a4516ade0c6db91c30b6f93645035db52ed8 burn_with_from_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.bin 08ed1235dda921ce8841b26aa18d0c0f36db4884779dd7670857159801b6d597 +ccipClient: ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.abi ../../../contracts/solc/v0.8.24/CCIPClient/CCIPClient.bin 4fa80572165c135051c8f90db530de2da2ffd5f99101cc59e50fa61f2aabccf2 +ccipClientWithACK: ../../../contracts/solc/v0.8.24/CCIPClientWithACK/CCIPClientWithACK.abi ../../../contracts/solc/v0.8.24/CCIPClientWithACK/CCIPClientWithACK.bin 928d49f02f9aef05f27072ebe6de798a655f5b6e48fbe5be7dba185888d60384 +ccipReceiver: ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.abi ../../../contracts/solc/v0.8.24/CCIPReceiver/CCIPReceiver.bin 74f2cedde31d15d881087da352f82668cfc4a11bce6b6a0af6f8fd0c0718cae5 +ccipReceiverWithACK: ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.abi ../../../contracts/solc/v0.8.24/CCIPReceiverWithACK/CCIPReceiverWithACK.bin 4eb6ce9f4b68c766b2c01f37d12a39a89bfa7636330ddc19b9d038de2f76e795 +ccipSender: ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.abi ../../../contracts/solc/v0.8.24/CCIPSender/CCIPSender.bin 3e74689a26f094eddf4d2fc8ae16b799dcf8732a2de116748f43f93fba3093e7 ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin 75955a3dcfd66b308be07eda54d6036cc79e87d3cdcf3c5c3115813c55912af8 ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 9e21d63b5a3ea8776dbfa068effcb70e77d3fcc44bc6af3a6a6870f5c4bfe212 commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin 274d87db70b643e00ab0a7e7845bb4b791f3b613bfc87708d33fc5a8369e2a41 @@ -29,11 +29,10 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin 0b541232e49727e947dc164eadf35963c66e67576f21baa0ecaa06a8833148ed multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 6b56e0114a4d50797d30a34aecc2641ef340451d0c3fcb9d729bba4df2435122 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 -ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 5531cf7b66f8f88c49207d8f16f0e7f06b1833ab178471939f1c05c871a16328 -self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 1f41c4136108601c04e9cca14af74a9b3c2f4be82898043f9695542d708940ca ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin 9254b35a86f00fde7b7193a033ca58f6521a66e87b9cf9da6ce5660082e79f5d -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 2d1cdfd810e2fde409610f4d188889e62a41c8baceb8948849c9a78623a252b6 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 4dfdadeb92c5577971c8aaf70c48f119f56b383ca3eed0c8962fc81d58debd92 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin c37096aaa0369ad988e94c300ba62917e17fcc71a3c1aa3e9b8420f21c0591d2 +ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin 9464c687c7c55705a5f2a21903d06de0c49f104eb602e76d4af0c1a2c1031f69 price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2 registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353 report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 4b9252c443c87ceb7f5ac3b9d100e572fead010f7c39543315052677a3a2c597 @@ -41,6 +40,7 @@ rmn_contract: ../../../contracts/solc/v0.8.24/RMN/RMN.abi ../../../contracts/sol rmn_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin be6840d9646195c37f6fa3f95e1cb67218d04d2cebf72e698377b0a7b9cd76f4 router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 2e4f0a7826c8abb49d882bb49fc5ff20a186dbd3137624b9097ffed903ae4888 +self_funded_ping_pong: ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.abi ../../../contracts/solc/v0.8.24/SelfFundedPingPong/SelfFundedPingPong.bin 3790adbc68fb1ce8deaa2f46892682ef48bddf034403151bfab711136ad50ff4 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin 942be7d1681ac102e0615bee13f76838ebb0b261697cf1270d2bf82c12e57aeb token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 7c01fd89f5153baa4d7409d14beabb3f861abfbf8880d3c6d06802cc398570f9 usdc_token_pool: ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin 8e7eae4c7277ce4a0092cca815c046cc49094028c23d2d113de9335fa4358030