From 6ffa59d2853e45e2e11d2bb7e3feeec33718bd3b Mon Sep 17 00:00:00 2001 From: Suryansh <39276431+0xsuryansh@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:50:25 +0530 Subject: [PATCH 1/2] rename CCIPSendRequested to CCIPMessageSent (#1409) --- contracts/src/v0.8/ccip/onRamp/OnRamp.sol | 4 +- .../src/v0.8/ccip/test/NonceManager.t.sol | 8 +-- .../MultiOnRampTokenPoolReentrancy.t.sol | 4 +- .../v0.8/ccip/test/e2e/MultiRampsEnd2End.sol | 2 +- .../src/v0.8/ccip/test/onRamp/OnRamp.t.sol | 20 +++---- .../ccip/generated/onramp/onramp.go | 54 +++++++++---------- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 7 files changed, 47 insertions(+), 47 deletions(-) diff --git a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol index 21b2f8efb0..677ec1a191 100644 --- a/contracts/src/v0.8/ccip/onRamp/OnRamp.sol +++ b/contracts/src/v0.8/ccip/onRamp/OnRamp.sol @@ -48,7 +48,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { event FeePaid(address indexed feeToken, uint256 feeValueJuels); event FeeTokenWithdrawn(address indexed feeAggregator, address indexed feeToken, uint256 amount); /// RMN depends on this event, if changing, please notify the RMN maintainers. - event CCIPSendRequested(uint64 indexed destChainSelector, Internal.EVM2AnyRampMessage message); + event CCIPMessageSent(uint64 indexed destChainSelector, Internal.EVM2AnyRampMessage message); event AllowListAdminSet(address indexed allowListAdmin); event AllowListSendersAdded(uint64 indexed destChainSelector, address[] senders); event AllowListSendersRemoved(uint64 indexed destChainSelector, address[] senders); @@ -243,7 +243,7 @@ contract OnRamp is IEVM2AnyOnRampClient, ITypeAndVersion, OwnerIsCreator { // Emit message request // This must happen after any pool events as some tokens (e.g. USDC) emit events that we expect to precede this // event in the offchain code. - emit CCIPSendRequested(destChainSelector, newMessage); + emit CCIPMessageSent(destChainSelector, newMessage); return newMessage.header.messageId; } diff --git a/contracts/src/v0.8/ccip/test/NonceManager.t.sol b/contracts/src/v0.8/ccip/test/NonceManager.t.sol index 69afc7104e..8c61ba5d21 100644 --- a/contracts/src/v0.8/ccip/test/NonceManager.t.sol +++ b/contracts/src/v0.8/ccip/test/NonceManager.t.sol @@ -265,7 +265,7 @@ contract NonceManager_OnRampUpgrade is OnRampSetup { Client.EVM2AnyMessage memory message = _generateEmptyMessage(); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, OWNER); } @@ -292,14 +292,14 @@ contract NonceManager_OnRampUpgrade is OnRampSetup { // new onramp nonce should start from 2, while sequence number start from 1 vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, startNonce + 2, FEE_AMOUNT, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, startNonce + 2, FEE_AMOUNT, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, OWNER); assertEq(startNonce + 2, s_outboundNonceManager.getOutboundNonce(DEST_CHAIN_SELECTOR, OWNER)); // after another send, nonce should be 3, and sequence number be 2 vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 2, startNonce + 3, FEE_AMOUNT, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 2, startNonce + 3, FEE_AMOUNT, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, OWNER); assertEq(startNonce + 3, s_outboundNonceManager.getOutboundNonce(DEST_CHAIN_SELECTOR, OWNER)); @@ -314,7 +314,7 @@ contract NonceManager_OnRampUpgrade is OnRampSetup { address newSender = address(1234567); // new onramp nonce should start from 1 for new sender vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, newSender)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, FEE_AMOUNT, newSender)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, FEE_AMOUNT, newSender); } } diff --git a/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol b/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol index 0eea71eacc..5161aba883 100644 --- a/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol +++ b/contracts/src/v0.8/ccip/test/attacks/onRamp/MultiOnRampTokenPoolReentrancy.t.sol @@ -107,9 +107,9 @@ contract MultiOnRampTokenPoolReentrancy is OnRampSetup { Internal.EVM2AnyRampMessage memory msgEvent2 = _messageToEvent(message2, 2, 2, expectedFee, address(s_facadeClient)); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent2); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, msgEvent2); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent1); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, msgEvent1); s_facadeClient.send(amount); } diff --git a/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol b/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol index b22e4db9d4..c3c1b311ee 100644 --- a/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol +++ b/contracts/src/v0.8/ccip/test/e2e/MultiRampsEnd2End.sol @@ -251,7 +251,7 @@ contract MultiRampsE2E is OnRampSetup, OffRampSetup { ); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, msgEvent); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, msgEvent); vm.resumeGasMetering(); router.ccipSend(DEST_CHAIN_SELECTOR, message); diff --git a/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol index a6f4205ee1..f49a196603 100644 --- a/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/onRamp/OnRamp.t.sol @@ -144,7 +144,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } @@ -180,7 +180,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { vm.expectEmit(); // We expect the message to be emitted with strict = false. - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } @@ -193,7 +193,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { vm.expectEmit(); // We expect the message to be emitted with strict = false. - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } @@ -205,7 +205,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } @@ -219,7 +219,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } @@ -233,7 +233,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { IERC20(s_sourceFeeToken).transferFrom(OWNER, address(s_onRamp), feeAmount); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } @@ -246,7 +246,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { uint64 sequenceNumberBefore = s_onRamp.getExpectedNextSequenceNumber(DEST_CHAIN_SELECTOR) - 1; vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, OWNER); @@ -268,7 +268,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { uint64 sequenceNumberBefore = s_onRamp.getExpectedNextSequenceNumber(DEST_CHAIN_SELECTOR) - 1; vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, i, i, 0, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, 0, OWNER); @@ -353,7 +353,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { vm.expectEmit(); emit OnRamp.FeePaid(s_sourceFeeToken, feeTokenAmount); vm.expectEmit(false, false, false, true); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, expectedEvent); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, expectedEvent); // Assert the message Id is correct assertEq( @@ -375,7 +375,7 @@ contract OnRamp_forwardFromRouter is OnRampSetup { s_outboundMessageValidator.setMessageIdValidationState(keccak256(abi.encode(message)), false); vm.expectEmit(); - emit OnRamp.CCIPSendRequested(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); + emit OnRamp.CCIPMessageSent(DEST_CHAIN_SELECTOR, _messageToEvent(message, 1, 1, feeAmount, OWNER)); s_onRamp.forwardFromRouter(DEST_CHAIN_SELECTOR, message, feeAmount, OWNER); } diff --git a/core/gethwrappers/ccip/generated/onramp/onramp.go b/core/gethwrappers/ccip/generated/onramp/onramp.go index bd07c18f3a..61c35f6c4d 100644 --- a/core/gethwrappers/ccip/generated/onramp/onramp.go +++ b/core/gethwrappers/ccip/generated/onramp/onramp.go @@ -97,8 +97,8 @@ type OnRampStaticConfig struct { } var OnRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"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\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"}],\"name\":\"FeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"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\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowListConfigArgs[]\",\"name\":\"allowListConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"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\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101006040523480156200001257600080fd5b506040516200402938038062004029833981016040819052620000359162000665565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d8162000390565b5050506200079f565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060408101516001600160a01b0316155b1562000273576040516306b7c75960e31b815260040160405180910390fd5b8051600280546001600160a01b03199081166001600160a01b0393841617909155602080840180516003805485169186169190911790556040808601805160048054871691881691909117905560608088018051600580549098169089161790965582516080808201855280516001600160401b031680835260a080518b16848a0190815260c080518d16868a0190815260e080518f169789019788528a5195865292518e169b85019b909b5299518c169783019790975292518a169381019390935289518916908301529351871693810193909352518516928201929092529151909216918101919091527f23a1adf8ad7fad6091a4803227af2cee848c01a7c812404cade7c25636925e32906101000160405180910390a150565b60005b8151811015620004cf576000828281518110620003b457620003b462000789565b602002602001015190506000838381518110620003d557620003d562000789565b6020026020010151600001519050806001600160401b03166000036200041a5760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6001600160401b03818116600081815260066020908152604091829020868201518154600160481b600160e81b0319811669010000000000000000006001600160a01b03909316928302908117808555865192891691909816178152928301526801000000000000000090940460ff161515918101919091527fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a250505080600101905062000393565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200050e576200050e620004d3565b60405290565b604080519081016001600160401b03811182821017156200050e576200050e620004d3565b604051601f8201601f191681016001600160401b0381118282101715620005645762000564620004d3565b604052919050565b80516001600160401b03811681146200058457600080fd5b919050565b6001600160a01b03811681146200059f57600080fd5b50565b600082601f830112620005b457600080fd5b815160206001600160401b03821115620005d257620005d2620004d3565b620005e2818360051b0162000539565b82815260069290921b840181019181810190868411156200060257600080fd5b8286015b848110156200065a5760408189031215620006215760008081fd5b6200062b62000514565b62000636826200056c565b815284820151620006478162000589565b8186015283529183019160400162000606565b509695505050505050565b60008060008385036101208112156200067d57600080fd5b60808112156200068c57600080fd5b62000696620004e9565b620006a1866200056c565b81526020860151620006b38162000589565b60208201526040860151620006c88162000589565b60408201526060860151620006dd8162000589565b606082015293506080607f1982011215620006f757600080fd5b5062000702620004e9565b6080850151620007128162000589565b815260a0850151620007248162000589565b602082015260c0850151620007398162000589565b604082015260e08501516200074e8162000589565b60608201526101008501519092506001600160401b038111156200077157600080fd5b6200077f86828701620005a2565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051613811620008186000396000818161022c01528181610c790152611ba10152600081816101f0015281816112480152611b7a0152600081816101b4015281816105de0152611b500152600081816101840152818161116e0152818161164b0152611b2301526138116000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806379ba5097116100b2578063a6f3ab6c11610081578063df0aa9e911610066578063df0aa9e91461052d578063f2fde38b14610540578063fbca3b741461055357600080fd5b8063a6f3ab6c146104cd578063d77d5ed0146104e057600080fd5b806379ba50971461045b5780638da5cb5b146104635780639041be3d14610481578063972b4612146104ad57600080fd5b806334adf4941161010957806348a98aa4116100ee57806348a98aa4146103045780636def4ce71461033c5780637437ff9f146103db57600080fd5b806334adf494146102e95780633a019940146102fc57600080fd5b80630242cf601461013b57806306285c6914610150578063181f5a771461027f57806320487ded146102c8575b600080fd5b61014e610149366004612696565b610566565b005b61026960408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b6040516102769190612759565b60405180910390f35b6102bb6040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b604051610276919061281e565b6102db6102d6366004612849565b61057a565b604051908152602001610276565b61014e6102f7366004612899565b610733565b61014e610a06565b61031761031236600461290e565b610c31565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610276565b61039f61034a366004612947565b67ffffffffffffffff9081166000908152600660205260409020549081169168010000000000000000820460ff16916901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6040805167ffffffffffffffff9094168452911515602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610276565b61044e604080516080810182526000808252602082018190529181018290526060810191909152506040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff908116825260035481166020830152600454811692820192909252600554909116606082015290565b6040516102769190612964565b61014e610ce6565b60005473ffffffffffffffffffffffffffffffffffffffff16610317565b61049461048f366004612947565b610de3565b60405167ffffffffffffffff9091168152602001610276565b6104c06104bb366004612947565b610e0c565b60405161027691906129ad565b61014e6104db366004612a17565b610e34565b6103176104ee366004612947565b67ffffffffffffffff166000908152600660205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6102db61053b366004612a7e565b610e45565b61014e61054e366004612aea565b6116fe565b6104c0610561366004612947565b61170f565b61056e611743565b610577816117c6565b50565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106499190612b15565b15610691576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd906106e99086908690600401612c46565b602060405180830381865afa158015610706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072a9190612d8f565b90505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a35760055473ffffffffffffffffffffffffffffffffffffffff1633146107a3576040517f905d7d9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a015760008383838181106107c2576107c2612da8565b90506020028101906107d49190612dd7565b6107dd90612e88565b805167ffffffffffffffff1660009081526006602090815260409091209082015181547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000009115801592909202178255919250906109545760005b8260400151518110156108fd5760008360400151828151811061086757610867612da8565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108e65783516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610688565b6108f3600184018261193d565b5050600101610842565b506040820151511561095457816000015167ffffffffffffffff167f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc3281836040015160405161094b91906129ad565b60405180910390a25b60005b8260600151518110156109a0576109978360600151828151811061097d5761097d612da8565b60200260200101518360010161195f90919063ffffffff16565b50600101610957565b50606082015151156109f757816000015167ffffffffffffffff167fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d42158683606001516040516109ee91906129ad565b60405180910390a25b50506001016107a6565b505050565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa158015610a75573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610abb9190810190612f1b565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b8251811015610a01576000838281518110610af757610af7612da8565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b969190612d8f565b90508015610c2757610bbf73ffffffffffffffffffffffffffffffffffffffff83168583611981565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e83604051610c1e91815260200190565b60405180910390a35b5050600101610ada565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072a9190612faa565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610688565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff808216600090815260066020526040812054909161072d91166001612ff6565b67ffffffffffffffff8116600090815260066020526040902060609061072d90600101611a0e565b610e3c611743565b61057781611a22565b67ffffffffffffffff8416600090815260066020526040812073ffffffffffffffffffffffffffffffffffffffff8316610eab576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900460ff1615610f1c57610ece6001820184611c04565b610f1c576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610688565b80546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610f79576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff16801561101f576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690610fec908a908a90600401612c46565b600060405180830381600087803b15801561100657600080fd5b505af115801561101a573d6000803e3d6000fd5b505050505b506002546000908190819073ffffffffffffffffffffffffffffffffffffffff1663c4276bfc8a61105660808c0160608d01612aea565b8a61106460808e018e613017565b6040518663ffffffff1660e01b815260040161108495949392919061307c565b600060405180830381865afa1580156110a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110e79190810190613144565b919450925090506110fe6080890160608a01612aea565b73ffffffffffffffffffffffffffffffffffffffff167f075a2720282fdf622141dae0b048ef90a21a7e57c134c76912d19d006b3b3f6f8460405161114591815260200190565b60405180910390a2604080516101a081019091526000610100820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101208501528c811661014085015287549293928392916101608401918a9187916111ba911661319e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168152602001866112ba576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8f16600482015273ffffffffffffffffffffffffffffffffffffffff8c811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015611291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b591906131c5565b6112bd565b60005b67ffffffffffffffff1681525081526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018a80602001906112fb9190613017565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200161133f8b80613017565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020810184905260400161139060808c0160608d01612aea565b73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018a80604001906113c191906131e2565b905067ffffffffffffffff8111156113db576113db612570565b60405190808252806020026020018201604052801561143e57816020015b61142b6040518060a0016040528060608152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816113f95790505b509052905060005b61145360408b018b6131e2565b9050811015611502576114d961146c60408c018c6131e2565b8381811061147c5761147c612da8565b905060400201803603810190611492919061324a565b8c61149d8d80613017565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611c33915050565b8260e0015182815181106114ef576114ef612da8565b6020908102919091010152600101611446565b5060025460e082015160009173ffffffffffffffffffffffffffffffffffffffff169063085318f8908d9061153a60408f018f6131e2565b6040518563ffffffff1660e01b81526004016115599493929190613361565b600060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115bc9190810190613397565b905060005b8260e0015151811015611615578181815181106115e0576115e0612da8565b60200260200101518360e0015182815181106115fe576115fe612da8565b6020908102919091010151608001526001016115c1565b50604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c1660608201523060808201526116a590839060a00160405160208183030381529060405280519060200120611f59565b82515260405167ffffffffffffffff8c16907fcae3d9f68a9ed33d0a770e9bcc6fc25d4041dd6391e6cd8015546547a3c93140906116e4908590613448565b60405180910390a25051519450505050505b949350505050565b611706611743565b61057781612059565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633146117c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610688565b565b60005b81518110156119395760008282815181106117e6576117e6612da8565b60200260200101519050600083838151811061180457611804612da8565b60200260200101516000015190508067ffffffffffffffff16600003611862576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610688565b67ffffffffffffffff8181166000818152600660209081526040918290208682015181547fffffff0000000000000000000000000000000000000000ffffffffffffffffff8116690100000000000000000073ffffffffffffffffffffffffffffffffffffffff909316928302908117808555865192891691909816178152928301526801000000000000000090940460ff161515918101919091527fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a25050508060010190506117c9565b5050565b600061072a8373ffffffffffffffffffffffffffffffffffffffff841661214e565b600061072a8373ffffffffffffffffffffffffffffffffffffffff841661219d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a01908490612297565b60606000611a1b836123a3565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff161580611a5e5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b15611a95576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602080840151600380548416918516919091179055604080850151600480548516918616919091179055606080860151600580549095169086161790935580516080810182527f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681527f00000000000000000000000000000000000000000000000000000000000000008516928101929092527f00000000000000000000000000000000000000000000000000000000000000008416828201527f00000000000000000000000000000000000000000000000000000000000000009093169181019190915290517f23a1adf8ad7fad6091a4803227af2cee848c01a7c812404cade7c25636925e3291611bf9918490613596565b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561072a565b611c656040518060a0016040528060608152602001606081526020016060815260200160008152602001606081525090565b8460200151600003611ca3576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611cb3858760000151610c31565b905073ffffffffffffffffffffffffffffffffffffffff81161580611d8357506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d819190612b15565b155b15611dd55785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610688565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b8152600401611e749190613635565b6000604051808303816000875af1158015611e93573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ed991908101906136ab565b6040805160a0810190915273ffffffffffffffffffffffffffffffffffffffff841660c08201529091508060e0810160405160208183030381529060405281526020018260000151815260200182602001518152602001886020015181526020016040518060200160405280600081525081525092505050949350505050565b60008060001b82846020015185606001518660000151606001518760000151608001518860a001518960c00151604051602001611f9b9695949392919061373c565b604051602081830303815290604052805190602001208560400151805190602001208660e00151604051602001611fd2919061379d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808c0151805190840120928501989098529183019590955260608201939093529384015260a083015260c082015260e00160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff8216036120d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610688565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120546121955750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561072d565b50600061072d565b600081815260018301602052604081205480156122865760006121c16001836137b0565b85549091506000906121d5906001906137b0565b905080821461223a5760008660000182815481106121f5576121f5612da8565b906000526020600020015490508087600001848154811061221857612218612da8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061224b5761224b6137c3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061072d565b600091505061072d565b5092915050565b60006122f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123ff9092919063ffffffff16565b805190915015610a0157808060200190518101906123179190612b15565b610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610688565b6060816000018054806020026020016040519081016040528092919081815260200182805480156123f357602002820191906000526020600020905b8154815260200190600101908083116123df575b50505050509050919050565b60606116f68484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161243391906137f2565b60006040518083038185875af1925050503d8060008114612470576040519150601f19603f3d011682016040523d82523d6000602084013e612475565b606091505b509150915061248687838387612491565b979650505050505050565b606083156125275782516000036125205773ffffffffffffffffffffffffffffffffffffffff85163b612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610688565b50816116f6565b6116f6838381511561253c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610688919061281e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156125c2576125c2612570565b60405290565b6040516080810167ffffffffffffffff811182821017156125c2576125c2612570565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561263257612632612570565b604052919050565b600067ffffffffffffffff82111561265457612654612570565b5060051b60200190565b67ffffffffffffffff8116811461057757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461057757600080fd5b600060208083850312156126a957600080fd5b823567ffffffffffffffff8111156126c057600080fd5b8301601f810185136126d157600080fd5b80356126e46126df8261263a565b6125eb565b81815260069190911b8201830190838101908783111561270357600080fd5b928401925b8284101561248657604084890312156127215760008081fd5b61272961259f565b84356127348161265e565b81528486013561274381612674565b8187015282526040939093019290840190612708565b6080810161072d828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b838110156127cb5781810151838201526020016127b3565b50506000910152565b600081518084526127ec8160208601602086016127b0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061072a60208301846127d4565b600060a0828403121561284357600080fd5b50919050565b6000806040838503121561285c57600080fd5b82356128678161265e565b9150602083013567ffffffffffffffff81111561288357600080fd5b61288f85828601612831565b9150509250929050565b600080602083850312156128ac57600080fd5b823567ffffffffffffffff808211156128c457600080fd5b818501915085601f8301126128d857600080fd5b8135818111156128e757600080fd5b8660208260051b85010111156128fc57600080fd5b60209290920196919550909350505050565b6000806040838503121561292157600080fd5b823561292c8161265e565b9150602083013561293c81612674565b809150509250929050565b60006020828403121561295957600080fd5b8135611a1b8161265e565b6080810161072d8284805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182169084015260408083015182169084015260609182015116910152565b6020808252825182820181905260009190848201906040850190845b818110156129fb57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016129c9565b50909695505050505050565b8035612a1281612674565b919050565b600060808284031215612a2957600080fd5b612a316125c8565b8235612a3c81612674565b81526020830135612a4c81612674565b60208201526040830135612a5f81612674565b60408201526060830135612a7281612674565b60608201529392505050565b60008060008060808587031215612a9457600080fd5b8435612a9f8161265e565b9350602085013567ffffffffffffffff811115612abb57600080fd5b612ac787828801612831565b935050604085013591506060850135612adf81612674565b939692955090935050565b600060208284031215612afc57600080fd5b8135611a1b81612674565b801515811461057757600080fd5b600060208284031215612b2757600080fd5b8151611a1b81612b07565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b6757600080fd5b830160208101925035905067ffffffffffffffff811115612b8757600080fd5b803603821315612b9657600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612c3b578135612c0981612674565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612bf6565b509495945050505050565b600067ffffffffffffffff808516835260406020840152612c678485612b32565b60a06040860152612c7c60e086018284612b9d565b915050612c8c6020860186612b32565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878503016060880152612cc2848385612b9d565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612cfb57600080fd5b60209288019283019235915084821115612d1457600080fd5b8160061b3603831315612d2657600080fd5b80878503016080880152612d3b848385612be6565b9450612d4960608901612a07565b73ffffffffffffffffffffffffffffffffffffffff811660a08901529350612d746080890189612b32565b94509250808786030160c08801525050612486838383612b9d565b600060208284031215612da157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612e0b57600080fd5b9190910192915050565b600082601f830112612e2657600080fd5b81356020612e366126df8361263a565b8083825260208201915060208460051b870101935086841115612e5857600080fd5b602086015b84811015612e7d578035612e7081612674565b8352918301918301612e5d565b509695505050505050565b600060808236031215612e9a57600080fd5b612ea26125c8565b8235612ead8161265e565b81526020830135612ebd81612b07565b6020820152604083013567ffffffffffffffff80821115612edd57600080fd5b612ee936838701612e15565b60408401526060850135915080821115612f0257600080fd5b50612f0f36828601612e15565b60608301525092915050565b60006020808385031215612f2e57600080fd5b825167ffffffffffffffff811115612f4557600080fd5b8301601f81018513612f5657600080fd5b8051612f646126df8261263a565b81815260059190911b82018301908381019087831115612f8357600080fd5b928401925b82841015612486578351612f9b81612674565b82529284019290840190612f88565b600060208284031215612fbc57600080fd5b8151611a1b81612674565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561229057612290612fc7565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261304c57600080fd5b83018035915067ffffffffffffffff82111561306757600080fd5b602001915036819003821315612b9657600080fd5b67ffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff85166020820152836040820152608060608201526000612486608083018486612b9d565b600082601f8301126130d357600080fd5b815167ffffffffffffffff8111156130ed576130ed612570565b61311e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016125eb565b81815284602083860101111561313357600080fd5b6116f68260208301602087016127b0565b60008060006060848603121561315957600080fd5b83519250602084015161316b81612b07565b604085015190925067ffffffffffffffff81111561318857600080fd5b613194868287016130c2565b9150509250925092565b600067ffffffffffffffff8083168181036131bb576131bb612fc7565b6001019392505050565b6000602082840312156131d757600080fd5b8151611a1b8161265e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261321757600080fd5b83018035915067ffffffffffffffff82111561323257600080fd5b6020019150600681901b3603821315612b9657600080fd5b60006040828403121561325c57600080fd5b61326461259f565b823561326f81612674565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b84811015613354577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a081518186526132e5828701826127d4565b91505085820151858203878701526132fd82826127d4565b9150506040808301518683038288015261331783826127d4565b9250505060608083015181870152506080808301519250858203818701525061334081836127d4565b9a86019a94505050908301906001016132a1565b5090979650505050505050565b67ffffffffffffffff851681526060602082015260006133846060830186613284565b8281036040840152612486818587612be6565b600060208083850312156133aa57600080fd5b825167ffffffffffffffff808211156133c257600080fd5b818501915085601f8301126133d657600080fd5b81516133e46126df8261263a565b81815260059190911b8301840190848101908883111561340357600080fd5b8585015b8381101561343b5780518581111561341f5760008081fd5b61342d8b89838a01016130c2565b845250918601918601613407565b5098975050505050505050565b6020815261349960208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b600060208301516134c260c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101808060e08501526134df6101a08501836127d4565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030161010087015261351c84836127d4565b935060808701519150808685030161012087015261353a84836127d4565b935060a0870151915061356661014087018373ffffffffffffffffffffffffffffffffffffffff169052565b60c087015161016087015260e087015191508086850301838701525061358c8382613284565b9695505050505050565b61010081016135ee828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff90811660808401526020840151811660a08401526040840151811660c084015260608401511660e0830152611a1b565b602081526000825160a0602084015261365160c08401826127d4565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b6000602082840312156136bd57600080fd5b815167ffffffffffffffff808211156136d557600080fd5b90830190604082860312156136e957600080fd5b6136f161259f565b82518281111561370057600080fd5b61370c878286016130c2565b82525060208301518281111561372157600080fd5b61372d878286016130c2565b60208301525095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835260c0602084015261376c60c08401896127d4565b67ffffffffffffffff97881660408501529590961660608301525091909316608082015260a0019190915292915050565b60208152600061072a6020830184613284565b8181038181111561072d5761072d612fc7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612e0b8184602087016127b056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"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\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"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[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"}],\"name\":\"FeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"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\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowListConfigArgs[]\",\"name\":\"allowListConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowListEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"contractIRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowListAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"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\":[],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b506040516200402938038062004029833981016040819052620000359162000665565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000186565b505083516001600160401b031615905080620000e6575060208301516001600160a01b0316155b80620000fd575060408301516001600160a01b0316155b8062000114575060608301516001600160a01b0316155b1562000133576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e052620001728262000231565b6200017d8162000390565b5050506200079f565b336001600160a01b03821603620001e05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316158062000254575060408101516001600160a01b0316155b1562000273576040516306b7c75960e31b815260040160405180910390fd5b8051600280546001600160a01b03199081166001600160a01b0393841617909155602080840180516003805485169186169190911790556040808601805160048054871691881691909117905560608088018051600580549098169089161790965582516080808201855280516001600160401b031680835260a080518b16848a0190815260c080518d16868a0190815260e080518f169789019788528a5195865292518e169b85019b909b5299518c169783019790975292518a169381019390935289518916908301529351871693810193909352518516928201929092529151909216918101919091527f23a1adf8ad7fad6091a4803227af2cee848c01a7c812404cade7c25636925e32906101000160405180910390a150565b60005b8151811015620004cf576000828281518110620003b457620003b462000789565b602002602001015190506000838381518110620003d557620003d562000789565b6020026020010151600001519050806001600160401b03166000036200041a5760405163c35aa79d60e01b81526001600160401b038216600482015260240162000083565b6001600160401b03818116600081815260066020908152604091829020868201518154600160481b600160e81b0319811669010000000000000000006001600160a01b03909316928302908117808555865192891691909816178152928301526801000000000000000090940460ff161515918101919091527fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a250505080600101905062000393565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200050e576200050e620004d3565b60405290565b604080519081016001600160401b03811182821017156200050e576200050e620004d3565b604051601f8201601f191681016001600160401b0381118282101715620005645762000564620004d3565b604052919050565b80516001600160401b03811681146200058457600080fd5b919050565b6001600160a01b03811681146200059f57600080fd5b50565b600082601f830112620005b457600080fd5b815160206001600160401b03821115620005d257620005d2620004d3565b620005e2818360051b0162000539565b82815260069290921b840181019181810190868411156200060257600080fd5b8286015b848110156200065a5760408189031215620006215760008081fd5b6200062b62000514565b62000636826200056c565b815284820151620006478162000589565b8186015283529183019160400162000606565b509695505050505050565b60008060008385036101208112156200067d57600080fd5b60808112156200068c57600080fd5b62000696620004e9565b620006a1866200056c565b81526020860151620006b38162000589565b60208201526040860151620006c88162000589565b60408201526060860151620006dd8162000589565b606082015293506080607f1982011215620006f757600080fd5b5062000702620004e9565b6080850151620007128162000589565b815260a0850151620007248162000589565b602082015260c0850151620007398162000589565b604082015260e08501516200074e8162000589565b60608201526101008501519092506001600160401b038111156200077157600080fd5b6200077f86828701620005a2565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051613811620008186000396000818161022c01528181610c790152611ba10152600081816101f0015281816112480152611b7a0152600081816101b4015281816105de0152611b500152600081816101840152818161116e0152818161164b0152611b2301526138116000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806379ba5097116100b2578063a6f3ab6c11610081578063df0aa9e911610066578063df0aa9e91461052d578063f2fde38b14610540578063fbca3b741461055357600080fd5b8063a6f3ab6c146104cd578063d77d5ed0146104e057600080fd5b806379ba50971461045b5780638da5cb5b146104635780639041be3d14610481578063972b4612146104ad57600080fd5b806334adf4941161010957806348a98aa4116100ee57806348a98aa4146103045780636def4ce71461033c5780637437ff9f146103db57600080fd5b806334adf494146102e95780633a019940146102fc57600080fd5b80630242cf601461013b57806306285c6914610150578063181f5a771461027f57806320487ded146102c8575b600080fd5b61014e610149366004612696565b610566565b005b61026960408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b6040516102769190612759565b60405180910390f35b6102bb6040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b604051610276919061281e565b6102db6102d6366004612849565b61057a565b604051908152602001610276565b61014e6102f7366004612899565b610733565b61014e610a06565b61031761031236600461290e565b610c31565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610276565b61039f61034a366004612947565b67ffffffffffffffff9081166000908152600660205260409020549081169168010000000000000000820460ff16916901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6040805167ffffffffffffffff9094168452911515602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610276565b61044e604080516080810182526000808252602082018190529181018290526060810191909152506040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff908116825260035481166020830152600454811692820192909252600554909116606082015290565b6040516102769190612964565b61014e610ce6565b60005473ffffffffffffffffffffffffffffffffffffffff16610317565b61049461048f366004612947565b610de3565b60405167ffffffffffffffff9091168152602001610276565b6104c06104bb366004612947565b610e0c565b60405161027691906129ad565b61014e6104db366004612a17565b610e34565b6103176104ee366004612947565b67ffffffffffffffff166000908152600660205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6102db61053b366004612a7e565b610e45565b61014e61054e366004612aea565b6116fe565b6104c0610561366004612947565b61170f565b61056e611743565b610577816117c6565b50565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106499190612b15565b15610691576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd906106e99086908690600401612c46565b602060405180830381865afa158015610706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072a9190612d8f565b90505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a35760055473ffffffffffffffffffffffffffffffffffffffff1633146107a3576040517f905d7d9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a015760008383838181106107c2576107c2612da8565b90506020028101906107d49190612dd7565b6107dd90612e88565b805167ffffffffffffffff1660009081526006602090815260409091209082015181547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000009115801592909202178255919250906109545760005b8260400151518110156108fd5760008360400151828151811061086757610867612da8565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108e65783516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610688565b6108f3600184018261193d565b5050600101610842565b506040820151511561095457816000015167ffffffffffffffff167f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc3281836040015160405161094b91906129ad565b60405180910390a25b60005b8260600151518110156109a0576109978360600151828151811061097d5761097d612da8565b60200260200101518360010161195f90919063ffffffff16565b50600101610957565b50606082015151156109f757816000015167ffffffffffffffff167fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d42158683606001516040516109ee91906129ad565b60405180910390a25b50506001016107a6565b505050565b600254604080517fcdc73d51000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163cdc73d5191600480830192869291908290030181865afa158015610a75573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610abb9190810190612f1b565b60045490915073ffffffffffffffffffffffffffffffffffffffff1660005b8251811015610a01576000838281518110610af757610af7612da8565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b969190612d8f565b90508015610c2757610bbf73ffffffffffffffffffffffffffffffffffffffff83168583611981565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e83604051610c1e91815260200190565b60405180910390a35b5050600101610ada565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015610cc2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072a9190612faa565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610688565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff808216600090815260066020526040812054909161072d91166001612ff6565b67ffffffffffffffff8116600090815260066020526040902060609061072d90600101611a0e565b610e3c611743565b61057781611a22565b67ffffffffffffffff8416600090815260066020526040812073ffffffffffffffffffffffffffffffffffffffff8316610eab576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900460ff1615610f1c57610ece6001820184611c04565b610f1c576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610688565b80546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610f79576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff16801561101f576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690610fec908a908a90600401612c46565b600060405180830381600087803b15801561100657600080fd5b505af115801561101a573d6000803e3d6000fd5b505050505b506002546000908190819073ffffffffffffffffffffffffffffffffffffffff1663c4276bfc8a61105660808c0160608d01612aea565b8a61106460808e018e613017565b6040518663ffffffff1660e01b815260040161108495949392919061307c565b600060405180830381865afa1580156110a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110e79190810190613144565b919450925090506110fe6080890160608a01612aea565b73ffffffffffffffffffffffffffffffffffffffff167f075a2720282fdf622141dae0b048ef90a21a7e57c134c76912d19d006b3b3f6f8460405161114591815260200190565b60405180910390a2604080516101a081019091526000610100820181815267ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166101208501528c811661014085015287549293928392916101608401918a9187916111ba911661319e565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168152602001866112ba576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8f16600482015273ffffffffffffffffffffffffffffffffffffffff8c811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015611291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b591906131c5565b6112bd565b60005b67ffffffffffffffff1681525081526020018873ffffffffffffffffffffffffffffffffffffffff1681526020018a80602001906112fb9190613017565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060200161133f8b80613017565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020810184905260400161139060808c0160608d01612aea565b73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018a80604001906113c191906131e2565b905067ffffffffffffffff8111156113db576113db612570565b60405190808252806020026020018201604052801561143e57816020015b61142b6040518060a0016040528060608152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816113f95790505b509052905060005b61145360408b018b6131e2565b9050811015611502576114d961146c60408c018c6131e2565b8381811061147c5761147c612da8565b905060400201803603810190611492919061324a565b8c61149d8d80613017565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611c33915050565b8260e0015182815181106114ef576114ef612da8565b6020908102919091010152600101611446565b5060025460e082015160009173ffffffffffffffffffffffffffffffffffffffff169063085318f8908d9061153a60408f018f6131e2565b6040518563ffffffff1660e01b81526004016115599493929190613361565b600060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115bc9190810190613397565b905060005b8260e0015151811015611615578181815181106115e0576115e0612da8565b60200260200101518360e0015182815181106115fe576115fe612da8565b6020908102919091010151608001526001016115c1565b50604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c1660608201523060808201526116a590839060a00160405160208183030381529060405280519060200120611f59565b82515260405167ffffffffffffffff8c16907ff6e86ef8896c7a0d629406168f396e883280680c99e649b9e2d36466fbc9f9e5906116e4908590613448565b60405180910390a25051519450505050505b949350505050565b611706611743565b61057781612059565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633146117c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610688565b565b60005b81518110156119395760008282815181106117e6576117e6612da8565b60200260200101519050600083838151811061180457611804612da8565b60200260200101516000015190508067ffffffffffffffff16600003611862576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610688565b67ffffffffffffffff8181166000818152600660209081526040918290208682015181547fffffff0000000000000000000000000000000000000000ffffffffffffffffff8116690100000000000000000073ffffffffffffffffffffffffffffffffffffffff909316928302908117808555865192891691909816178152928301526801000000000000000090940460ff161515918101919091527fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a25050508060010190506117c9565b5050565b600061072a8373ffffffffffffffffffffffffffffffffffffffff841661214e565b600061072a8373ffffffffffffffffffffffffffffffffffffffff841661219d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610a01908490612297565b60606000611a1b836123a3565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff161580611a5e5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b15611a95576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602080840151600380548416918516919091179055604080850151600480548516918616919091179055606080860151600580549095169086161790935580516080810182527f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681527f00000000000000000000000000000000000000000000000000000000000000008516928101929092527f00000000000000000000000000000000000000000000000000000000000000008416828201527f00000000000000000000000000000000000000000000000000000000000000009093169181019190915290517f23a1adf8ad7fad6091a4803227af2cee848c01a7c812404cade7c25636925e3291611bf9918490613596565b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561072a565b611c656040518060a0016040528060608152602001606081526020016060815260200160008152602001606081525090565b8460200151600003611ca3576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611cb3858760000151610c31565b905073ffffffffffffffffffffffffffffffffffffffff81161580611d8357506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d819190612b15565b155b15611dd55785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610688565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b8152600401611e749190613635565b6000604051808303816000875af1158015611e93573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ed991908101906136ab565b6040805160a0810190915273ffffffffffffffffffffffffffffffffffffffff841660c08201529091508060e0810160405160208183030381529060405281526020018260000151815260200182602001518152602001886020015181526020016040518060200160405280600081525081525092505050949350505050565b60008060001b82846020015185606001518660000151606001518760000151608001518860a001518960c00151604051602001611f9b9695949392919061373c565b604051602081830303815290604052805190602001208560400151805190602001208660e00151604051602001611fd2919061379d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808c0151805190840120928501989098529183019590955260608201939093529384015260a083015260c082015260e00160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff8216036120d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610688565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120546121955750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561072d565b50600061072d565b600081815260018301602052604081205480156122865760006121c16001836137b0565b85549091506000906121d5906001906137b0565b905080821461223a5760008660000182815481106121f5576121f5612da8565b906000526020600020015490508087600001848154811061221857612218612da8565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061224b5761224b6137c3565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061072d565b600091505061072d565b5092915050565b60006122f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123ff9092919063ffffffff16565b805190915015610a0157808060200190518101906123179190612b15565b610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610688565b6060816000018054806020026020016040519081016040528092919081815260200182805480156123f357602002820191906000526020600020905b8154815260200190600101908083116123df575b50505050509050919050565b60606116f68484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161243391906137f2565b60006040518083038185875af1925050503d8060008114612470576040519150601f19603f3d011682016040523d82523d6000602084013e612475565b606091505b509150915061248687838387612491565b979650505050505050565b606083156125275782516000036125205773ffffffffffffffffffffffffffffffffffffffff85163b612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610688565b50816116f6565b6116f6838381511561253c5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610688919061281e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156125c2576125c2612570565b60405290565b6040516080810167ffffffffffffffff811182821017156125c2576125c2612570565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561263257612632612570565b604052919050565b600067ffffffffffffffff82111561265457612654612570565b5060051b60200190565b67ffffffffffffffff8116811461057757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461057757600080fd5b600060208083850312156126a957600080fd5b823567ffffffffffffffff8111156126c057600080fd5b8301601f810185136126d157600080fd5b80356126e46126df8261263a565b6125eb565b81815260069190911b8201830190838101908783111561270357600080fd5b928401925b8284101561248657604084890312156127215760008081fd5b61272961259f565b84356127348161265e565b81528486013561274381612674565b8187015282526040939093019290840190612708565b6080810161072d828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b838110156127cb5781810151838201526020016127b3565b50506000910152565b600081518084526127ec8160208601602086016127b0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061072a60208301846127d4565b600060a0828403121561284357600080fd5b50919050565b6000806040838503121561285c57600080fd5b82356128678161265e565b9150602083013567ffffffffffffffff81111561288357600080fd5b61288f85828601612831565b9150509250929050565b600080602083850312156128ac57600080fd5b823567ffffffffffffffff808211156128c457600080fd5b818501915085601f8301126128d857600080fd5b8135818111156128e757600080fd5b8660208260051b85010111156128fc57600080fd5b60209290920196919550909350505050565b6000806040838503121561292157600080fd5b823561292c8161265e565b9150602083013561293c81612674565b809150509250929050565b60006020828403121561295957600080fd5b8135611a1b8161265e565b6080810161072d8284805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182169084015260408083015182169084015260609182015116910152565b6020808252825182820181905260009190848201906040850190845b818110156129fb57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016129c9565b50909695505050505050565b8035612a1281612674565b919050565b600060808284031215612a2957600080fd5b612a316125c8565b8235612a3c81612674565b81526020830135612a4c81612674565b60208201526040830135612a5f81612674565b60408201526060830135612a7281612674565b60608201529392505050565b60008060008060808587031215612a9457600080fd5b8435612a9f8161265e565b9350602085013567ffffffffffffffff811115612abb57600080fd5b612ac787828801612831565b935050604085013591506060850135612adf81612674565b939692955090935050565b600060208284031215612afc57600080fd5b8135611a1b81612674565b801515811461057757600080fd5b600060208284031215612b2757600080fd5b8151611a1b81612b07565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b6757600080fd5b830160208101925035905067ffffffffffffffff811115612b8757600080fd5b803603821315612b9657600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612c3b578135612c0981612674565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612bf6565b509495945050505050565b600067ffffffffffffffff808516835260406020840152612c678485612b32565b60a06040860152612c7c60e086018284612b9d565b915050612c8c6020860186612b32565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878503016060880152612cc2848385612b9d565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612cfb57600080fd5b60209288019283019235915084821115612d1457600080fd5b8160061b3603831315612d2657600080fd5b80878503016080880152612d3b848385612be6565b9450612d4960608901612a07565b73ffffffffffffffffffffffffffffffffffffffff811660a08901529350612d746080890189612b32565b94509250808786030160c08801525050612486838383612b9d565b600060208284031215612da157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612e0b57600080fd5b9190910192915050565b600082601f830112612e2657600080fd5b81356020612e366126df8361263a565b8083825260208201915060208460051b870101935086841115612e5857600080fd5b602086015b84811015612e7d578035612e7081612674565b8352918301918301612e5d565b509695505050505050565b600060808236031215612e9a57600080fd5b612ea26125c8565b8235612ead8161265e565b81526020830135612ebd81612b07565b6020820152604083013567ffffffffffffffff80821115612edd57600080fd5b612ee936838701612e15565b60408401526060850135915080821115612f0257600080fd5b50612f0f36828601612e15565b60608301525092915050565b60006020808385031215612f2e57600080fd5b825167ffffffffffffffff811115612f4557600080fd5b8301601f81018513612f5657600080fd5b8051612f646126df8261263a565b81815260059190911b82018301908381019087831115612f8357600080fd5b928401925b82841015612486578351612f9b81612674565b82529284019290840190612f88565b600060208284031215612fbc57600080fd5b8151611a1b81612674565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561229057612290612fc7565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261304c57600080fd5b83018035915067ffffffffffffffff82111561306757600080fd5b602001915036819003821315612b9657600080fd5b67ffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff85166020820152836040820152608060608201526000612486608083018486612b9d565b600082601f8301126130d357600080fd5b815167ffffffffffffffff8111156130ed576130ed612570565b61311e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016125eb565b81815284602083860101111561313357600080fd5b6116f68260208301602087016127b0565b60008060006060848603121561315957600080fd5b83519250602084015161316b81612b07565b604085015190925067ffffffffffffffff81111561318857600080fd5b613194868287016130c2565b9150509250925092565b600067ffffffffffffffff8083168181036131bb576131bb612fc7565b6001019392505050565b6000602082840312156131d757600080fd5b8151611a1b8161265e565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261321757600080fd5b83018035915067ffffffffffffffff82111561323257600080fd5b6020019150600681901b3603821315612b9657600080fd5b60006040828403121561325c57600080fd5b61326461259f565b823561326f81612674565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b84811015613354577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a081518186526132e5828701826127d4565b91505085820151858203878701526132fd82826127d4565b9150506040808301518683038288015261331783826127d4565b9250505060608083015181870152506080808301519250858203818701525061334081836127d4565b9a86019a94505050908301906001016132a1565b5090979650505050505050565b67ffffffffffffffff851681526060602082015260006133846060830186613284565b8281036040840152612486818587612be6565b600060208083850312156133aa57600080fd5b825167ffffffffffffffff808211156133c257600080fd5b818501915085601f8301126133d657600080fd5b81516133e46126df8261263a565b81815260059190911b8301840190848101908883111561340357600080fd5b8585015b8381101561343b5780518581111561341f5760008081fd5b61342d8b89838a01016130c2565b845250918601918601613407565b5098975050505050505050565b6020815261349960208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b600060208301516134c260c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101808060e08501526134df6101a08501836127d4565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030161010087015261351c84836127d4565b935060808701519150808685030161012087015261353a84836127d4565b935060a0870151915061356661014087018373ffffffffffffffffffffffffffffffffffffffff169052565b60c087015161016087015260e087015191508086850301838701525061358c8382613284565b9695505050505050565b61010081016135ee828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff90811660808401526020840151811660a08401526040840151811660c084015260608401511660e0830152611a1b565b602081526000825160a0602084015261365160c08401826127d4565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b6000602082840312156136bd57600080fd5b815167ffffffffffffffff808211156136d557600080fd5b90830190604082860312156136e957600080fd5b6136f161259f565b82518281111561370057600080fd5b61370c878286016130c2565b82525060208301518281111561372157600080fd5b61372d878286016130c2565b60208301525095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835260c0602084015261376c60c08401896127d4565b67ffffffffffffffff97881660408501529590961660608301525091909316608082015260a0019190915292915050565b60208152600061072a6020830184613284565b8181038181111561072d5761072d612fc7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612e0b8184602087016127b056fea164736f6c6343000818000a", } var OnRampABI = OnRampMetaData.ABI @@ -955,8 +955,8 @@ func (_OnRamp *OnRampFilterer) ParseAllowListSendersRemoved(log types.Log) (*OnR return event, nil } -type OnRampCCIPSendRequestedIterator struct { - Event *OnRampCCIPSendRequested +type OnRampCCIPMessageSentIterator struct { + Event *OnRampCCIPMessageSent contract *bind.BoundContract event string @@ -967,7 +967,7 @@ type OnRampCCIPSendRequestedIterator struct { fail error } -func (it *OnRampCCIPSendRequestedIterator) Next() bool { +func (it *OnRampCCIPMessageSentIterator) Next() bool { if it.fail != nil { return false @@ -976,7 +976,7 @@ func (it *OnRampCCIPSendRequestedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(OnRampCCIPSendRequested) + it.Event = new(OnRampCCIPMessageSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -991,7 +991,7 @@ func (it *OnRampCCIPSendRequestedIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(OnRampCCIPSendRequested) + it.Event = new(OnRampCCIPMessageSent) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1006,43 +1006,43 @@ func (it *OnRampCCIPSendRequestedIterator) Next() bool { } } -func (it *OnRampCCIPSendRequestedIterator) Error() error { +func (it *OnRampCCIPMessageSentIterator) Error() error { return it.fail } -func (it *OnRampCCIPSendRequestedIterator) Close() error { +func (it *OnRampCCIPMessageSentIterator) Close() error { it.sub.Unsubscribe() return nil } -type OnRampCCIPSendRequested struct { +type OnRampCCIPMessageSent struct { DestChainSelector uint64 Message InternalEVM2AnyRampMessage Raw types.Log } -func (_OnRamp *OnRampFilterer) FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampCCIPSendRequestedIterator, error) { +func (_OnRamp *OnRampFilterer) FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampCCIPMessageSentIterator, error) { var destChainSelectorRule []interface{} for _, destChainSelectorItem := range destChainSelector { destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) } - logs, sub, err := _OnRamp.contract.FilterLogs(opts, "CCIPSendRequested", destChainSelectorRule) + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "CCIPMessageSent", destChainSelectorRule) if err != nil { return nil, err } - return &OnRampCCIPSendRequestedIterator{contract: _OnRamp.contract, event: "CCIPSendRequested", logs: logs, sub: sub}, nil + return &OnRampCCIPMessageSentIterator{contract: _OnRamp.contract, event: "CCIPMessageSent", logs: logs, sub: sub}, nil } -func (_OnRamp *OnRampFilterer) WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *OnRampCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error) { +func (_OnRamp *OnRampFilterer) WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *OnRampCCIPMessageSent, destChainSelector []uint64) (event.Subscription, error) { var destChainSelectorRule []interface{} for _, destChainSelectorItem := range destChainSelector { destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) } - logs, sub, err := _OnRamp.contract.WatchLogs(opts, "CCIPSendRequested", destChainSelectorRule) + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "CCIPMessageSent", destChainSelectorRule) if err != nil { return nil, err } @@ -1052,8 +1052,8 @@ func (_OnRamp *OnRampFilterer) WatchCCIPSendRequested(opts *bind.WatchOpts, sink select { case log := <-logs: - event := new(OnRampCCIPSendRequested) - if err := _OnRamp.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil { + event := new(OnRampCCIPMessageSent) + if err := _OnRamp.contract.UnpackLog(event, "CCIPMessageSent", log); err != nil { return err } event.Raw = log @@ -1074,9 +1074,9 @@ func (_OnRamp *OnRampFilterer) WatchCCIPSendRequested(opts *bind.WatchOpts, sink }), nil } -func (_OnRamp *OnRampFilterer) ParseCCIPSendRequested(log types.Log) (*OnRampCCIPSendRequested, error) { - event := new(OnRampCCIPSendRequested) - if err := _OnRamp.contract.UnpackLog(event, "CCIPSendRequested", log); err != nil { +func (_OnRamp *OnRampFilterer) ParseCCIPMessageSent(log types.Log) (*OnRampCCIPMessageSent, error) { + event := new(OnRampCCIPMessageSent) + if err := _OnRamp.contract.UnpackLog(event, "CCIPMessageSent", log); err != nil { return nil, err } event.Raw = log @@ -1882,8 +1882,8 @@ func (_OnRamp *OnRamp) ParseLog(log types.Log) (generated.AbigenLog, error) { return _OnRamp.ParseAllowListSendersAdded(log) case _OnRamp.abi.Events["AllowListSendersRemoved"].ID: return _OnRamp.ParseAllowListSendersRemoved(log) - case _OnRamp.abi.Events["CCIPSendRequested"].ID: - return _OnRamp.ParseCCIPSendRequested(log) + case _OnRamp.abi.Events["CCIPMessageSent"].ID: + return _OnRamp.ParseCCIPMessageSent(log) case _OnRamp.abi.Events["ConfigSet"].ID: return _OnRamp.ParseConfigSet(log) case _OnRamp.abi.Events["DestChainConfigSet"].ID: @@ -1914,8 +1914,8 @@ func (OnRampAllowListSendersRemoved) Topic() common.Hash { return common.HexToHash("0xc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d421586") } -func (OnRampCCIPSendRequested) Topic() common.Hash { - return common.HexToHash("0xcae3d9f68a9ed33d0a770e9bcc6fc25d4041dd6391e6cd8015546547a3c93140") +func (OnRampCCIPMessageSent) Topic() common.Hash { + return common.HexToHash("0xf6e86ef8896c7a0d629406168f396e883280680c99e649b9e2d36466fbc9f9e5") } func (OnRampConfigSet) Topic() common.Hash { @@ -2003,11 +2003,11 @@ type OnRampInterface interface { ParseAllowListSendersRemoved(log types.Log) (*OnRampAllowListSendersRemoved, error) - FilterCCIPSendRequested(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampCCIPSendRequestedIterator, error) + FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampCCIPMessageSentIterator, error) - WatchCCIPSendRequested(opts *bind.WatchOpts, sink chan<- *OnRampCCIPSendRequested, destChainSelector []uint64) (event.Subscription, error) + WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *OnRampCCIPMessageSent, destChainSelector []uint64) (event.Subscription, error) - ParseCCIPSendRequested(log types.Log) (*OnRampCCIPSendRequested, error) + ParseCCIPMessageSent(log types.Log) (*OnRampCCIPMessageSent, error) FilterConfigSet(opts *bind.FilterOpts) (*OnRampConfigSetIterator, 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 fa4edfd3dd..d0be78aeaa 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 @@ -24,7 +24,7 @@ multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Help nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487 offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 263df151d037af19cc412a051efb82993b0ccdde0184c598e3669f1326ab4ce9 -onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 93ad9efaf8789baf7133a5db803b20d05b4771bf25f57a438cb7e5a8111fb472 +onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin c3b345930e1a553b18553e18a5c0ff8df3c372118fdf78a176aaccb1891664bb ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b 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 From 17ce920e09c9f0d64aa1545cfbed737af1b5358b Mon Sep 17 00:00:00 2001 From: Ryan <80392855+RayXpub@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:06:51 +0400 Subject: [PATCH 2/2] Skip report execution on curse (#1408) ## Motivation The goal of this PR is to remove reverts on lane cursing for DON execution transactions. If a lane is cursed, reverting will cause the whole execution transaction to fail so any execution reports for other lanes will be blocked. ## Solution For DON execution transactions the behavior is now to skip the report and emit a `SkippedReportExecution`. For manual execution we still revert, otherwise the transaction will silently fail for the users. --------- Co-authored-by: app-token-issuer-infra-releng[bot] <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> --- contracts/gas-snapshots/ccip.gas-snapshot | 194 ++++++++--------- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 26 ++- .../src/v0.8/ccip/test/offRamp/OffRamp.t.sol | 198 +++++++++++++++--- .../v0.8/ccip/test/offRamp/OffRampSetup.t.sol | 40 +++- .../ccip/generated/offramp/offramp.go | 133 +++++++++++- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 6 files changed, 448 insertions(+), 145 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 6153b0a079..bf3f7a9f72 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -566,18 +566,18 @@ MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61133) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39890) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 32973) MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 413542) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1499109) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1499013) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37907) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23694) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38763) NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71847) -NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 260262) -NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 262359) -NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 326051) -NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 298263) -NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 244814) -NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 233069) -NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153186) +NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 260206) +NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 262348) +NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 325972) +NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 298151) +NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRampTransitive_Success() (gas: 244682) +NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 232980) +NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153163) NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 168317) NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 220108) NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 125070) @@ -614,118 +614,120 @@ OCR2Base_transmit:test_Transmit2SignersSuccess_gas() (gas: 51674) OCR2Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 23484) OCR2Base_transmit:test_UnauthorizedSigner_Revert() (gas: 39665) OCR2Base_transmit:test_WrongNumberOfSignatures_Revert() (gas: 20557) -OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 40149) -OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 107130) +OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 40127) +OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 107108) OffRamp__releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 88331) OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 39848) -OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 97399) +OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 97377) OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 42843) OffRamp__releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 89579) OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 467917) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99183) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 99161) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 12395) OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Revert() (gas: 93181) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 109824) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 109869) OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13263) OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 17988) -OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15300) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 321369) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 262704) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169162) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 187787) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 156230) -OffRamp_batchExecute:test_Unhealthy_Revert() (gas: 533030) -OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10461) +OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15343) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 202302) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 335775) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277143) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 169155) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 187792) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 156254) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 573431) +OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10421) OffRamp_ccipReceive:test_Reverts() (gas: 15773) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67458) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 59778) -OffRamp_commit:test_InvalidRootRevert() (gas: 58858) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6534892) -OffRamp_commit:test_NoConfig_Revert() (gas: 6118635) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67433) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 59753) +OffRamp_commit:test_InvalidRootRevert() (gas: 58833) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6597673) +OffRamp_commit:test_NoConfig_Revert() (gas: 6181416) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 105929) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 115981) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 105950) OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 349049) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 158960) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 136092) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 136492) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59126) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 224806) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 117632) -OffRamp_commit:test_Unhealthy_Revert() (gas: 77674) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 204296) -OffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6529281) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 159000) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 136067) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 136442) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59101) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 224756) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 117607) +OffRamp_commit:test_Unhealthy_Revert() (gas: 77660) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 204271) +OffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6592062) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 47832) -OffRamp_constructor:test_Constructor_Success() (gas: 6121934) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137089) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103806) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101677) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 139641) -OffRamp_constructor:test_ZeroRMNProxy_Revert() (gas: 101554) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101621) -OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17305) -OffRamp_execute:test_LargeBatch_Success() (gas: 1812704) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 357260) -OffRamp_execute:test_MultipleReports_Success() (gas: 284815) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6586004) -OffRamp_execute:test_NoConfig_Revert() (gas: 6169487) -OffRamp_execute:test_NonArray_Revert() (gas: 27809) -OffRamp_execute:test_SingleReport_Success() (gas: 175620) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147848) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6947505) +OffRamp_constructor:test_Constructor_Success() (gas: 6184742) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137165) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103904) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101775) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 139740) +OffRamp_constructor:test_ZeroRMNProxy_Revert() (gas: 101652) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101719) +OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17350) +OffRamp_execute:test_LargeBatch_Success() (gas: 3384707) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 373627) +OffRamp_execute:test_MultipleReports_Success() (gas: 299546) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6648787) +OffRamp_execute:test_NoConfig_Revert() (gas: 6232270) +OffRamp_execute:test_NonArray_Revert() (gas: 27787) +OffRamp_execute:test_SingleReport_Success() (gas: 175597) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147825) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 7010288) OffRamp_execute:test_ZeroReports_Revert() (gas: 17225) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18257) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 249037) -OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20517) +OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20539) OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 210176) OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48779) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48302) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 48257) OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 229565) OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 86203) OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 280859) OffRamp_executeSingleMessage:test_executeSingleMessage_WithValidation_Success() (gas: 92437) -OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 35104) -OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 28724) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 491530) -OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 54457) -OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 40728) -OffRamp_executeSingleReport:test_MismatchingOnRampRoot_Revert() (gas: 154111) -OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 35338) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187911) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 199215) -OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 48096) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 447759) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 251078) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193345) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212938) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 266576) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141191) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 422575) -OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 65877) -OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 80932) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 586607) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 534417) -OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 40544) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 531671) -OffRamp_executeSingleReport:test_Unhealthy_Revert() (gas: 528995) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 494237) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 136580) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165799) +OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 35087) +OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 28713) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 491507) +OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 54434) +OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 40717) +OffRamp_executeSingleReport:test_MismatchingOnRampRoot_Revert() (gas: 154069) +OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 35321) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187888) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 199169) +OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 48085) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 447736) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 251032) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193299) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212892) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 266553) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141168) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 422552) +OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 65854) +OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 80909) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 594246) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 542093) +OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 40533) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 569984) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 569363) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 494202) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 136534) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165753) OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3742124) OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 118836) OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 88048) OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 75551) OffRamp_manuallyExecute:test_ManualExecInvalidGasLimit_Revert() (gas: 26439) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 171639) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 205796) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 171604) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 205795) OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 25993) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 152822) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 524603) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2388943) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 208553) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 219343) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 658822) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 328543) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 152834) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 524524) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 322692) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2388897) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 218722) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 219297) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 740091) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 344193) OffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 165822) OffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 24603) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 66285) @@ -733,19 +735,19 @@ OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 83291) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 177934) OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 191136) -OffRamp_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11423) -OffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 215009) +OffRamp_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11379) +OffRamp_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 214934) OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11585) OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14152) OffRamp_setDynamicConfig:test_SetDynamicConfigWithValidator_Success() (gas: 49115) -OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 27037) +OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 27060) OffRamp_trialExecute:test_RateLimitError_Success() (gas: 225795) OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 234416) OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 309206) OffRamp_trialExecute:test_trialExecute_Success() (gas: 283994) -OffRamp_verify:test_Blessed_Success() (gas: 176276) -OffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178366) -OffRamp_verify:test_NotBlessed_Success() (gas: 141205) +OffRamp_verify:test_Blessed_Success() (gas: 176251) +OffRamp_verify:test_NotBlessedWrongChainSelector_Success() (gas: 178341) +OffRamp_verify:test_NotBlessed_Success() (gas: 141180) OffRamp_verify:test_TooManyLeaves_Revert() (gas: 51510) OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390336) OnRamp_allowListConfigUpdates:test_applyAllowList_Revert() (gas: 66509) diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 3c709a88f6..d15881a229 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -79,6 +79,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @dev RMN depends on this event, if changing, please notify the RMN maintainers. event CommitReportAccepted(CommitReport report); event RootRemoved(bytes32 root); + event SkippedReportExecution(uint64 sourceChainSelector); /// @notice Struct that contains the static configuration /// @dev RMN depends on this struct, if changing, please notify the RMN maintainers. @@ -342,7 +343,16 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { uint256[] memory manualExecGasLimits ) internal { uint64 sourceChainSelector = report.sourceChainSelector; - _whenNotCursed(sourceChainSelector); + bool manualExecution = manualExecGasLimits.length != 0; + if (IRMN(i_rmnProxy).isCursed(bytes16(uint128(sourceChainSelector)))) { + if (manualExecution) { + // For manual execution we don't want to silently fail so we revert + revert CursedByRMN(sourceChainSelector); + } + // For DON execution we do not revert as a single lane curse can revert the entire batch + emit SkippedReportExecution(sourceChainSelector); + return; + } bytes memory onRamp = _getEnabledSourceChainConfig(sourceChainSelector).onRamp; @@ -374,7 +384,6 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { if (timestampCommitted == 0) revert RootNotCommitted(sourceChainSelector); // Execute messages - bool manualExecution = manualExecGasLimits.length != 0; for (uint256 i = 0; i < numMsgs; ++i) { uint256 gasStart = gasleft(); Internal.Any2EVMRampMessage memory message = report.messages[i]; @@ -607,7 +616,10 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { MerkleRoot memory root = commitReport.merkleRoots[i]; uint64 sourceChainSelector = root.sourceChainSelector; - _whenNotCursed(sourceChainSelector); + if (IRMN(i_rmnProxy).isCursed(bytes16(uint128(sourceChainSelector)))) { + revert CursedByRMN(sourceChainSelector); + } + SourceChainConfig storage sourceChainConfig = _getEnabledSourceChainConfig(sourceChainSelector); if (sourceChainConfig.minSeqNr != root.interval.min || root.interval.min > root.interval.max) { @@ -959,12 +971,4 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // solhint-disable-next-line revert(); } - - /// @notice Validates that the source chain -> this chain lane, and reverts if it is cursed - /// @param sourceChainSelector Source chain selector to check for cursing - function _whenNotCursed(uint64 sourceChainSelector) internal view { - if (IRMN(i_rmnProxy).isCursed(bytes16(uint128(sourceChainSelector)))) { - revert CursedByRMN(sourceChainSelector); - } - } } diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol index ec8ac65008..1a0b67891d 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -604,7 +604,11 @@ contract OffRamp_executeSingleReport is OffRampSetup { vm.resumeGasMetering(); vm.recordLogs(); s_offRamp.executeSingleReport(report, new uint256[](0)); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber, messages[0].header.messageId, @@ -614,6 +618,7 @@ contract OffRamp_executeSingleReport is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[1].header.sequenceNumber, messages[1].header.messageId, @@ -636,7 +641,11 @@ contract OffRamp_executeSingleReport is OffRampSetup { s_offRamp.executeSingleReport( _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), _getGasLimitsFromMessages(messages) ); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber, messages[0].header.messageId, @@ -645,6 +654,7 @@ contract OffRamp_executeSingleReport is OffRampSetup { "" ); assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[1].header.sequenceNumber, messages[1].header.messageId, @@ -679,6 +689,9 @@ contract OffRamp_executeSingleReport is OffRampSetup { s_offRamp.executeSingleReport( _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), _getGasLimitsFromMessages(messages) ); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + // all executions should succeed. for (uint256 i = 0; i < orderings.length; ++i) { assertEq( @@ -687,6 +700,7 @@ contract OffRamp_executeSingleReport is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[i].header.sequenceNumber, messages[i].header.messageId, @@ -736,6 +750,29 @@ contract OffRamp_executeSingleReport is OffRampSetup { ); } + function test_Unhealthy_Success() public { + s_mockRMN.setGlobalCursed(true); + vm.expectEmit(); + emit OffRamp.SkippedReportExecution(SOURCE_CHAIN_SELECTOR_1); + s_offRamp.executeSingleReport( + _generateReportFromMessages( + SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) + ), + new uint256[](0) + ); + + s_mockRMN.setGlobalCursed(false); + vm.recordLogs(); + s_offRamp.executeSingleReport( + _generateReportFromMessages( + SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) + ), + new uint256[](0) + ); + + _assertNoEmit(OffRamp.SkippedReportExecution.selector); + } + // Reverts function test_MismatchingDestChainSelector_Revert() public { @@ -770,34 +807,17 @@ contract OffRamp_executeSingleReport is OffRampSetup { s_offRamp.executeSingleReport(executionReport, new uint256[](0)); } - function test_Unhealthy_Revert() public { - s_mockRMN.setGlobalCursed(true); - vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1)); - s_offRamp.executeSingleReport( - _generateReportFromMessages( - SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) - ), - new uint256[](0) - ); - // Uncurse should succeed - s_mockRMN.setGlobalCursed(false); - s_offRamp.executeSingleReport( - _generateReportFromMessages( - SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) - ), - new uint256[](0) - ); - } - function test_UnhealthySingleChainCurse_Revert() public { s_mockRMN.setChainCursed(SOURCE_CHAIN_SELECTOR_1, true); - vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1)); + vm.expectEmit(); + emit OffRamp.SkippedReportExecution(SOURCE_CHAIN_SELECTOR_1); s_offRamp.executeSingleReport( _generateReportFromMessages( SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) ), new uint256[](0) ); + vm.recordLogs(); // Uncurse should succeed s_mockRMN.setChainCursed(SOURCE_CHAIN_SELECTOR_1, false); s_offRamp.executeSingleReport( @@ -806,6 +826,7 @@ contract OffRamp_executeSingleReport is OffRampSetup { ), new uint256[](0) ); + _assertNoEmit(OffRamp.SkippedReportExecution.selector); } function test_UnexpectedTokenData_Revert() public { @@ -1149,7 +1170,11 @@ contract OffRamp_batchExecute is OffRampSetup { uint64 nonceBefore = s_inboundNonceManager.getInboundNonce(SOURCE_CHAIN_SELECTOR_1, messages1[0].sender); vm.recordLogs(); s_offRamp.batchExecute(reports, new uint256[][](2)); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, messages1[0].header.sourceChainSelector, messages1[0].header.sequenceNumber, messages1[0].header.messageId, @@ -1159,6 +1184,7 @@ contract OffRamp_batchExecute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages1[1].header.sourceChainSelector, messages1[1].header.sequenceNumber, messages1[1].header.messageId, @@ -1168,6 +1194,7 @@ contract OffRamp_batchExecute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages2[0].header.sourceChainSelector, messages2[0].header.sequenceNumber, messages2[0].header.messageId, @@ -1195,7 +1222,10 @@ contract OffRamp_batchExecute is OffRampSetup { s_offRamp.batchExecute(reports, new uint256[][](2)); + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, messages1[0].header.sourceChainSelector, messages1[0].header.sequenceNumber, messages1[0].header.messageId, @@ -1205,6 +1235,7 @@ contract OffRamp_batchExecute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages1[1].header.sourceChainSelector, messages1[1].header.sequenceNumber, messages1[1].header.messageId, @@ -1214,10 +1245,11 @@ contract OffRamp_batchExecute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages2[0].header.sourceChainSelector, messages2[0].header.sequenceNumber, messages2[0].header.messageId, - Internal._hash(messages2[0], ON_RAMP_ADDRESS_1), + Internal._hash(messages2[0], ON_RAMP_ADDRESS_3), Internal.MessageExecutionState.SUCCESS, "" ); @@ -1230,6 +1262,45 @@ contract OffRamp_batchExecute is OffRampSetup { assertGt(nonceChain3, 0); } + function test_MultipleReportsDifferentChainsSkipCursedChain_Success() public { + s_mockRMN.setChainCursed(SOURCE_CHAIN_SELECTOR_1, true); + + Internal.Any2EVMRampMessage[] memory messages1 = new Internal.Any2EVMRampMessage[](2); + Internal.Any2EVMRampMessage[] memory messages2 = new Internal.Any2EVMRampMessage[](1); + + messages1[0] = _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 1); + messages1[1] = _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, 2); + messages2[0] = _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_3, ON_RAMP_ADDRESS_3, 1); + + Internal.ExecutionReportSingleChain[] memory reports = new Internal.ExecutionReportSingleChain[](2); + reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages1); + reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_3, messages2); + + vm.recordLogs(); + + vm.expectEmit(); + emit OffRamp.SkippedReportExecution(SOURCE_CHAIN_SELECTOR_1); + + s_offRamp.batchExecute(reports, new uint256[][](2)); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + + for (uint256 i = 0; i < logs.length; ++i) { + if (logs[i].topics[0] == OffRamp.ExecutionStateChanged.selector) { + uint64 logSourceChainSelector = uint64(uint256(logs[i].topics[1])); + uint64 logSequenceNumber = uint64(uint256(logs[i].topics[2])); + bytes32 logMessageId = bytes32(logs[i].topics[3]); + (bytes32 logMessageHash, uint8 logState,,) = abi.decode(logs[i].data, (bytes32, uint8, bytes, uint256)); + assertEq(logMessageId, messages2[0].header.messageId); + assertEq(logSourceChainSelector, messages2[0].header.sourceChainSelector); + assertEq(logSequenceNumber, messages2[0].header.sequenceNumber); + assertEq(logMessageId, messages2[0].header.messageId); + assertEq(logMessageHash, Internal._hash(messages2[0], ON_RAMP_ADDRESS_3)); + assertEq(logState, uint8(Internal.MessageExecutionState.SUCCESS)); + } + } + } + function test_MultipleReportsSkipDuplicate_Success() public { Internal.Any2EVMRampMessage[] memory messages = _generateSingleBasicMessage(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1); @@ -1253,29 +1324,34 @@ contract OffRamp_batchExecute is OffRampSetup { ); } - // Reverts - function test_ZeroReports_Revert() public { - vm.expectRevert(OffRamp.EmptyReport.selector); - s_offRamp.batchExecute(new Internal.ExecutionReportSingleChain[](0), new uint256[][](1)); - } - - function test_Unhealthy_Revert() public { + function test_Unhealthy_Success() public { s_mockRMN.setGlobalCursed(true); - vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_1)); + vm.expectEmit(); + emit OffRamp.SkippedReportExecution(SOURCE_CHAIN_SELECTOR_1); s_offRamp.batchExecute( _generateBatchReportFromMessages( SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) ), new uint256[][](1) ); - // Uncurse should succeed + s_mockRMN.setGlobalCursed(false); + + vm.recordLogs(); s_offRamp.batchExecute( _generateBatchReportFromMessages( SOURCE_CHAIN_SELECTOR_1, _generateMessagesWithTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1) ), new uint256[][](1) ); + + _assertNoEmit(OffRamp.SkippedReportExecution.selector); + } + + // Reverts + function test_ZeroReports_Revert() public { + vm.expectRevert(OffRamp.EmptyReport.selector); + s_offRamp.batchExecute(new Internal.ExecutionReportSingleChain[](0), new uint256[][](1)); } function test_OutOfBoundsGasLimitsAccess_Revert() public { @@ -1315,6 +1391,8 @@ contract OffRamp_manuallyExecute is OffRampSetup { uint256[][] memory gasLimitOverrides = new uint256[][](1); gasLimitOverrides[0] = new uint256[](messages.length); + + vm.recordLogs(); s_offRamp.manuallyExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), gasLimitOverrides); assertExecutionStateChangedEventLogs( SOURCE_CHAIN_SELECTOR_1, @@ -1419,10 +1497,14 @@ contract OffRamp_manuallyExecute is OffRampSetup { gasLimitOverrides[1][i] += 1; } + vm.recordLogs(); s_offRamp.manuallyExecute(reports, gasLimitOverrides); + Vm.Log[] memory logs = vm.getRecordedLogs(); + for (uint256 j = 0; j < 3; ++j) { assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages1[j].header.sequenceNumber, messages1[j].header.messageId, @@ -1434,10 +1516,11 @@ contract OffRamp_manuallyExecute is OffRampSetup { for (uint256 k = 0; k < 2; ++k) { assertExecutionStateChangedEventLogs( - SOURCE_CHAIN_SELECTOR_1, + logs, + SOURCE_CHAIN_SELECTOR_3, messages2[k].header.sequenceNumber, messages2[k].header.messageId, - Internal._hash(messages2[k], ON_RAMP_ADDRESS_1), + Internal._hash(messages2[k], ON_RAMP_ADDRESS_3), Internal.MessageExecutionState.SUCCESS, "" ); @@ -1457,7 +1540,10 @@ contract OffRamp_manuallyExecute is OffRampSetup { vm.recordLogs(); s_offRamp.batchExecute(_generateBatchReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages), new uint256[][](1)); + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[0].header.sequenceNumber, messages[0].header.messageId, @@ -1467,6 +1553,7 @@ contract OffRamp_manuallyExecute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[1].header.sequenceNumber, messages[1].header.messageId, @@ -1479,6 +1566,7 @@ contract OffRamp_manuallyExecute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, SOURCE_CHAIN_SELECTOR_1, messages[2].header.sequenceNumber, messages[2].header.messageId, @@ -1738,6 +1826,37 @@ contract OffRamp_manuallyExecute is OffRampSetup { // Since the tx failed we don't release the tokens assertEq(tokenToAbuse.balanceOf(address(receiver)), balancePre + tokenAmount); } + + function test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() public { + Internal.Any2EVMRampMessage[] memory messages1 = new Internal.Any2EVMRampMessage[](3); + Internal.Any2EVMRampMessage[] memory messages2 = new Internal.Any2EVMRampMessage[](2); + + for (uint64 i = 0; i < 3; ++i) { + messages1[i] = _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_1, ON_RAMP_ADDRESS_1, i + 1); + messages1[i].receiver = address(s_reverting_receiver); + messages1[i].header.messageId = Internal._hash(messages1[i], ON_RAMP_ADDRESS_1); + } + + for (uint64 i = 0; i < 2; ++i) { + messages2[i] = _generateAny2EVMMessageNoTokens(SOURCE_CHAIN_SELECTOR_3, ON_RAMP_ADDRESS_3, i + 1); + messages2[i].receiver = address(s_reverting_receiver); + messages2[i].header.messageId = Internal._hash(messages2[i], ON_RAMP_ADDRESS_3); + } + + Internal.ExecutionReportSingleChain[] memory reports = new Internal.ExecutionReportSingleChain[](2); + reports[0] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_1, messages1); + reports[1] = _generateReportFromMessages(SOURCE_CHAIN_SELECTOR_3, messages2); + + uint256[][] memory gasLimitOverrides = new uint256[][](2); + gasLimitOverrides[0] = _getGasLimitsFromMessages(messages1); + gasLimitOverrides[1] = _getGasLimitsFromMessages(messages2); + + s_mockRMN.setChainCursed(SOURCE_CHAIN_SELECTOR_3, true); + + vm.expectRevert(abi.encodeWithSelector(OffRamp.CursedByRMN.selector, SOURCE_CHAIN_SELECTOR_3)); + + s_offRamp.manuallyExecute(reports, gasLimitOverrides); + } } contract OffRamp_execute is OffRampSetup { @@ -1792,7 +1911,11 @@ contract OffRamp_execute is OffRampSetup { vm.recordLogs(); _execute(reports); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, messages1[0].header.sourceChainSelector, messages1[0].header.sequenceNumber, messages1[0].header.messageId, @@ -1802,6 +1925,7 @@ contract OffRamp_execute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages1[1].header.sourceChainSelector, messages1[1].header.sequenceNumber, messages1[1].header.messageId, @@ -1811,6 +1935,7 @@ contract OffRamp_execute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages2[0].header.sourceChainSelector, messages2[0].header.sequenceNumber, messages2[0].header.messageId, @@ -1839,9 +1964,12 @@ contract OffRamp_execute is OffRampSetup { vm.recordLogs(); _execute(reports); + Vm.Log[] memory logs = vm.getRecordedLogs(); + for (uint64 i = 0; i < reports.length; ++i) { for (uint64 j = 0; j < reports[i].messages.length; ++j) { assertExecutionStateChangedEventLogs( + logs, reports[i].messages[j].header.sourceChainSelector, reports[i].messages[j].header.sequenceNumber, reports[i].messages[j].header.messageId, @@ -1877,7 +2005,11 @@ contract OffRamp_execute is OffRampSetup { vm.recordLogs(); _execute(reports); + + Vm.Log[] memory logs = vm.getRecordedLogs(); + assertExecutionStateChangedEventLogs( + logs, messages1[0].header.sourceChainSelector, messages1[0].header.sequenceNumber, messages1[0].header.messageId, @@ -1890,6 +2022,7 @@ contract OffRamp_execute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages1[1].header.sourceChainSelector, messages1[1].header.sequenceNumber, messages1[1].header.messageId, @@ -1899,6 +2032,7 @@ contract OffRamp_execute is OffRampSetup { ); assertExecutionStateChangedEventLogs( + logs, messages2[0].header.sourceChainSelector, messages2[0].header.sequenceNumber, messages2[0].header.messageId, diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol index ae9fc044ac..79599fb98b 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol @@ -29,8 +29,6 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup { uint64 internal constant SOURCE_CHAIN_SELECTOR_1 = SOURCE_CHAIN_SELECTOR; uint64 internal constant SOURCE_CHAIN_SELECTOR_2 = 6433500567565415381; uint64 internal constant SOURCE_CHAIN_SELECTOR_3 = 4051577828743386545; - bytes32 internal constant EXECUTION_STATE_CHANGE_TOPIC_HASH = - keccak256("ExecutionStateChanged(uint64,uint64,bytes32,bytes32,uint8,bytes,uint256)"); bytes internal constant ON_RAMP_ADDRESS_1 = abi.encode(ON_RAMP_ADDRESS); bytes internal constant ON_RAMP_ADDRESS_2 = abi.encode(0xaA3f843Cf8E33B1F02dd28303b6bD87B1aBF8AE4); @@ -484,7 +482,7 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup { ) public { Vm.Log[] memory logs = vm.getRecordedLogs(); for (uint256 i = 0; i < logs.length; ++i) { - if (logs[i].topics[0] == EXECUTION_STATE_CHANGE_TOPIC_HASH) { + if (logs[i].topics[0] == OffRamp.ExecutionStateChanged.selector) { uint64 logSourceChainSelector = uint64(uint256(logs[i].topics[1])); uint64 logSequenceNumber = uint64(uint256(logs[i].topics[2])); bytes32 logMessageId = bytes32(logs[i].topics[3]); @@ -501,4 +499,40 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup { } } } + + function assertExecutionStateChangedEventLogs( + Vm.Log[] memory logs, + uint64 sourceChainSelector, + uint64 sequenceNumber, + bytes32 messageId, + bytes32 messageHash, + Internal.MessageExecutionState state, + bytes memory returnData + ) public pure { + for (uint256 i = 0; i < logs.length; ++i) { + if (logs[i].topics[0] == OffRamp.ExecutionStateChanged.selector) { + uint64 logSourceChainSelector = uint64(uint256(logs[i].topics[1])); + uint64 logSequenceNumber = uint64(uint256(logs[i].topics[2])); + bytes32 logMessageId = bytes32(logs[i].topics[3]); + (bytes32 logMessageHash, uint8 logState, bytes memory logReturnData,) = + abi.decode(logs[i].data, (bytes32, uint8, bytes, uint256)); + if (logMessageId == messageId) { + assertEq(logSourceChainSelector, sourceChainSelector); + assertEq(logSequenceNumber, sequenceNumber); + assertEq(logMessageId, messageId); + assertEq(logMessageHash, messageHash); + assertEq(logState, uint8(state)); + assertEq(logReturnData, returnData); + } + } + } + } + + function _assertNoEmit(bytes32 eventSelector) internal { + Vm.Log[] memory logs = vm.getRecordedLogs(); + + for (uint256 i = 0; i < logs.length; i++) { + assertTrue(logs[i].topics[0] != eventSelector); + } + } } diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index b491a4f39d..6357a0c15f 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -164,8 +164,8 @@ type OffRampUnblessedRoot struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"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\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"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\":[],\"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\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"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\":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\":\"address\",\"name\":\"rmnProxy\",\"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\":\"address\",\"name\":\"rmnProxy\",\"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\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006bcd38038062006bcd8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ef762000cd66000396000818161026601526129ee0152600081816102370152612ee20152600081816102080152818161142b015261196d0152600081816101d801526126690152600081816117f3015261183f0152615ef76000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063ccd37ba31161008c578063f2fde38b11610066578063f2fde38b14610583578063f716f99f14610596578063ff888fb1146105a957600080fd5b8063ccd37ba31461050b578063d2a15d3514610550578063e9d68a8e1461056357600080fd5b8063991a5018116100bd578063991a5018146104c5578063a80036b4146104d8578063c673e584146104eb57600080fd5b806385572ffb1461049c5780638da5cb5b146104aa57600080fd5b8063311cd5131161012f5780635e36480c116101145780635e36480c146103785780637437ff9f1461039857806379ba50971461049457600080fd5b8063311cd513146103495780633f4b04aa1461035c57600080fd5b806306285c691161016057806306285c69146101a4578063181f5a77146102ed5780632d04ab761461033657600080fd5b806304666f9c1461017c57806305d938b514610191575b600080fd5b61018f61018a366004614072565b6105cc565b005b61018f61019f3660046146fe565b6105e0565b61029660408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102e49190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103296040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102e49190614879565b61018f610344366004614924565b610785565b61018f6103573660046149d7565b610b5c565b60095460405167ffffffffffffffff90911681526020016102e4565b61038b610386366004614a2b565b610bc5565b6040516102e49190614a88565b6104376040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102e49190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610c1b565b61018f610177366004614a96565b6000546040516001600160a01b0390911681526020016102e4565b61018f6104d3366004614ae5565b610cd9565b61018f6104e6366004614b59565b610cea565b6104fe6104f9366004614bc6565b61105d565b6040516102e49190614c26565b610542610519366004614c9b565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102e4565b61018f61055e366004614cc5565b6111bb565b610576610571366004614d3a565b611275565b6040516102e49190614d55565b61018f610591366004614da3565b611382565b61018f6105a4366004614e28565b611393565b6105bc6105b7366004614f66565b6113d5565b60405190151581526020016102e4565b6105d4611496565b6105dd816114f2565b50565b6105e86117f0565b815181518114610624576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561077557600084828151811061064357610643614f7f565b6020026020010151905060008160200151519050600085848151811061066b5761066b614f7f565b60200260200101519050805182146106af576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156107665760008282815181106106ce576106ce614f7f565b602002602001015190508060001461075d57846020015182815181106106f6576106f6614f7f565b60200260200101516080015181101561075d5784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064015b60405180910390fd5b506001016106b2565b50505050806001019050610627565b506107808383611871565b505050565b600061079387890189615105565b805151519091501515806107ac57508051602001515115155b156108ac5760095460208a01359067ffffffffffffffff8083169116101561086b576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f9261083492910161532d565b600060405180830381600087803b15801561084e57600080fd5b505af1158015610862573d6000803e3d6000fd5b505050506108aa565b8160200151516000036108aa576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610aa5576000826020015182815181106108d4576108d4614f7f565b602002602001015190506000816000015190506108f081611921565b60006108fb82611a23565b602084015151815491925067ffffffffffffffff908116600160a81b9092041614158061093f575060208084015190810151905167ffffffffffffffff9182169116115b1561097f57825160208401516040517feefb0cac000000000000000000000000000000000000000000000000000000008152610754929190600401615340565b6040830151806109bb576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff16600090815260086020908152604080832084845290915290205415610a2e5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101829052604401610754565b6020808501510151610a4190600161538b565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff9283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016108af565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d81604051610ad591906153b3565b60405180910390a1610b5160008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611a8a915050565b505050505050505050565b610b9c610b6b82840184615450565b6040805160008082526020820190925290610b96565b6060815260200190600190039081610b815790505b50611871565b604080516000808252602082019092529050610bbf600185858585866000611a8a565b50505050565b6000610bd360016004615485565b6002610be06080856154ae565b67ffffffffffffffff16610bf491906154d5565b610bfe8585611e01565b901c166003811115610c1257610c12614a5e565b90505b92915050565b6001546001600160a01b03163314610c755760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610754565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ce1611496565b6105dd81611e48565b333014610d23576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281610d60565b6040805180820190915260008082526020820152815260200190600190039081610d395790505b5060a08501515190915015610d9457610d918460a00151856020015186606001518760000151602001518787611fae565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff1681830152808701518351600094840192610dd0929101614879565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015610edd576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a190610e4a90859060040161558e565b600060405180830381600087803b158015610e6457600080fd5b505af1925050508015610e75575060015b610edd573d808015610ea3576040519150601f19603f3d011682016040523d82523d6000602084013e610ea8565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107549190614879565b604086015151158015610ef257506080860151155b80610f09575060608601516001600160a01b03163b155b80610f4957506060860151610f47906001600160a01b03167f85572ffb000000000000000000000000000000000000000000000000000000006120cd565b155b15610f5657505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf9798392610fce92899261138892916004016155a1565b6000604051808303816000875af1158015610fed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101591908101906155dd565b50915091508161105357806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107549190614879565b5050505050505050565b6110a06040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561114957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161112b575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156111ab57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118d575b5050505050815250509050919050565b6111c3611496565b60005b818110156107805760008383838181106111e2576111e2614f7f565b9050604002018036038101906111f89190615673565b905061120781602001516113d5565b61126c57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b506001016111c6565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611302906156ac565b80601f016020809104026020016040519081016040528092919081815260200182805461132e906156ac565b80156111ab5780601f10611350576101008083540402835291602001916111ab565b820191906000526020600020905b81548152906001019060200180831161135e57505050919092525091949350505050565b61138a611496565b6105dd816120e9565b61139b611496565b60005b81518110156113d1576113c98282815181106113bc576113bc614f7f565b602002602001015161219f565b60010161139e565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1591906156e6565b6000546001600160a01b031633146114f05760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610754565b565b60005b81518110156113d157600082828151811061151257611512614f7f565b602002602001015190506000816020015190508067ffffffffffffffff16600003611569576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b0316611591576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916115bc906156ac565b80601f01602080910402602001604051908101604052809291908181526020018280546115e8906156ac565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905060008460600151905081516000036116ed578051600003611670576040516342bcdf7f60e11b815260040160405180910390fd5b6001830161167e8282615753565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611740565b8080519060200120828051906020012014611740576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610754565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906117d8908690615813565b60405180910390a250505050508060010190506114f5565b467f0000000000000000000000000000000000000000000000000000000000000000146114f0576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604401610754565b81516000036118ab576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b845181101561191a576119128582815181106118e0576118e0614f7f565b60200260200101518461190c578583815181106118ff576118ff614f7f565b60200260200101516124d0565b836124d0565b6001016118c2565b5050505050565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e091906156e6565b156105dd576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610754565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610c15576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610754565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611ae98760a46158e1565b9050826060015115611b31578451611b029060206154d5565b8651611b0f9060206154d5565b611b1a9060a06158e1565b611b2491906158e1565b611b2e90826158e1565b90505b368114611b73576040517f8e1192e100000000000000000000000000000000000000000000000000000000815260048101829052366024820152604401610754565b5081518114611bbb5781516040517f93df584c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610754565b611bc36117f0565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611c1157611c11614a5e565b6002811115611c2257611c22614a5e565b9052509050600281602001516002811115611c3f57611c3f614a5e565b148015611c935750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611c7b57611c7b614f7f565b6000918252602090912001546001600160a01b031633145b611cc9576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611dab576020820151611ce49060016158f4565b60ff16855114611d20576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611d5b576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611d6d92919061590d565b604051908190038120611d84918b9060200161591d565b604051602081830303815290604052805190602001209050611da98a82888888612c9c565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b67ffffffffffffffff8216600090815260076020526040812081611e26608085615931565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b80516001600160a01b0316611e70576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611fca57611fca613e89565b60405190808252806020026020018201604052801561200f57816020015b6040805180820190915260008082526020820152815260200190600190039081611fe85790505b50905060005b87518110156120c15761209c88828151811061203357612033614f7f565b602002602001015188888888888781811061205057612050614f7f565b90506020028101906120629190615958565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8192505050565b8282815181106120ae576120ae614f7f565b6020908102919091010152600101612015565b505b9695505050505050565b60006120d883613226565b8015610c125750610c12838361328a565b336001600160a01b038216036121415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610754565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036121ca576000604051631b3fab5160e11b815260040161075491906159bd565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361223757606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff90921691909117905561228c565b6060840151600182015460ff620100009091041615159015151461228c576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610754565b60a0840151805161010010156122b8576001604051631b3fab5160e11b815260040161075491906159bd565b61231e848460030180548060200260200160405190810160405280929190818152602001828054801561231457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122f6575b5050505050613345565b8460600151156124455761238c8484600201805480602002602001604051908101604052809291908181526020018280548015612314576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122f6575050505050613345565b6080850151805161010010156123b8576002604051631b3fab5160e11b815260040161075491906159bd565b60408601516123c89060036159d7565b60ff168151116123ee576003604051631b3fab5160e11b815260040161075491906159bd565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff8416021790556124369060028601906020840190613e02565b50612443858260016133ae565b505b612451848260026133ae565b80516124669060038501906020840190613e02565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124bf9389939260028a019291906159f3565b60405180910390a161191a84613522565b81516124db81611921565b60006124e682611a23565b60010180546124f4906156ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612520906156ac565b801561256d5780601f106125425761010080835404028352916020019161256d565b820191906000526020600020905b81548152906001019060200180831161255057829003601f168201915b505050602087015151929350505060008190036125b5576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001515181146125f3576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561260e5761260e613e89565b604051908082528060200260200182016040528015612637578160200160208202803683370190505b50905060005b828110156127205760008760200151828151811061265d5761265d614f7f565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff16146126f057805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610754565b6126fa818661353e565b83838151811061270c5761270c614f7f565b60209081029190910101525060010161263d565b506000612737858389606001518a60800151613660565b90508060000361277f576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152602401610754565b8551151560005b84811015610b515760005a905060008a6020015183815181106127ab576127ab614f7f565b6020026020010151905060006127c98a836000015160600151610bc5565b905060008160038111156127df576127df614a5e565b14806127fc575060038160038111156127fa576127fa614a5e565b145b612854578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050612c94565b841561292457600454600090600160a01b900463ffffffff166128778842615485565b11905080806128975750600382600381111561289557612895614a5e565b145b6128d9576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c166004820152602401610754565b8b85815181106128eb576128eb614f7f565b602002602001015160001461291e578b858151811061290c5761290c614f7f565b60200260200101518360800181815250505b50612985565b600081600381111561293857612938614a5e565b14612985578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612844565b81516080015167ffffffffffffffff1615612a745760008160038111156129ae576129ae614a5e565b03612a745781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612a25928f929190600401615a9f565b6020604051808303816000875af1158015612a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6891906156e6565b612a7457505050612c94565b60008c604001518581518110612a8c57612a8c614f7f565b6020026020010151905080518360a001515114612af0578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e1660048301529091166024820152604401610754565b612b048b84600001516060015160016136b6565b600080612b11858461375e565b91509150612b288d866000015160600151846136b6565b8715612b98576003826003811115612b4257612b42614a5e565b03612b98576000846003811115612b5b57612b5b614a5e565b14612b98578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261075491908390600401615acc565b6002826003811115612bac57612bac614a5e565b14612c06576003826003811115612bc557612bc5614a5e565b14612c06578451606001516040517f926c5a3e000000000000000000000000000000000000000000000000000000008152610754918f918590600401615ae5565b84600001516000015185600001516060015167ffffffffffffffff168e67ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8b81518110612c6057612c60614f7f565b602002602001015186865a612c75908e615485565b604051612c859493929190615b0b565b60405180910390a45050505050505b600101612786565b8251600090815b81811015611053576000600188868460208110612cc257612cc2614f7f565b612ccf91901a601b6158f4565b898581518110612ce157612ce1614f7f565b6020026020010151898681518110612cfb57612cfb614f7f565b602002602001015160405160008152602001604052604051612d39949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612d5b573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b03851683528152858220858701909652855480841686529397509095509293928401916101009004166002811115612dbc57612dbc614a5e565b6002811115612dcd57612dcd614a5e565b9052509050600181602001516002811115612dea57612dea614a5e565b14612e21576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615612e64576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612ca3565b60408051808201909152600080825260208201526000612ea48760200151613828565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4d9190615b42565b90506001600160a01b0381161580612f955750612f936001600160a01b0382167faff2afbf000000000000000000000000000000000000000000000000000000006120cd565b155b15612fd7576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610754565b6004546000908190612ff99089908690600160e01b900463ffffffff166138ce565b9150915060008060006130c66040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b8152506040516024016130779190615b5f565b60408051601f198184030181529190526020810180516001600160e01b03167f3907753700000000000000000000000000000000000000000000000000000000179052878661138860846139fc565b9250925092508261310557816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107549190614879565b815160201461314d5781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b6000828060200190518101906131639190615c2c565b9050866001600160a01b03168c6001600160a01b0316146131f85760006131948d8a61318f868a615485565b6138ce565b509050868110806131ae5750816131ab8883615485565b14155b156131f6576040517fa966e21f000000000000000000000000000000000000000000000000000000008152600481018390526024810188905260448101829052606401610754565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613252827f01ffc9a70000000000000000000000000000000000000000000000000000000061328a565b8015610c155750613283827fffffffff0000000000000000000000000000000000000000000000000000000061328a565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d9150600051905082801561332e575060208210155b801561333a5750600081115b979650505050505050565b60005b81518110156107805760ff83166000908152600360205260408120835190919084908490811061337a5761337a614f7f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613348565b60005b8251811015610bbf5760008382815181106133ce576133ce614f7f565b60200260200101519050600060028111156133eb576133eb614a5e565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561342a5761342a614a5e565b1461344b576004604051631b3fab5160e11b815260040161075491906159bd565b6001600160a01b03811661348b576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134b1576134b1614a5e565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561350e5761350e614a5e565b0217905550905050508060010190506133b1565b60ff81166105dd576009805467ffffffffffffffff1916905550565b815160208082015160409283015192516000938493613584937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c45565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135cd9794969395929491939101615c78565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016136049190615d8a565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b60008061366e858585613b22565b9050613679816113d5565b6136875760009150506136ae565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026136c56080856154ae565b67ffffffffffffffff166136d991906154d5565b905060006136e78585611e01565b9050816136f660016004615485565b901b19168183600381111561370d5761370d614a5e565b67ffffffffffffffff871660009081526007602052604081209190921b9290921791829161373c608088615931565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fa80036b4000000000000000000000000000000000000000000000000000000008152600090606090309063a80036b4906137a29087908790600401615dea565b600060405180830381600087803b1580156137bc57600080fd5b505af19250505080156137cd575060015b61380c573d8080156137fb576040519150601f19603f3d011682016040523d82523d6000602084013e613800565b606091505b50600392509050613821565b50506040805160208101909152600081526002905b9250929050565b6000815160201461386757816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107549190614879565b60008280602001905181019061387d9190615c2c565b90506001600160a01b03811180613895575061040081105b15610c1557826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107549190614879565b6000806000806000613948886040516024016138f991906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a0823100000000000000000000000000000000000000000000000000000000179052888861138860846139fc565b9250925092508261398757816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107549190614879565b60208251146139cf5781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b818060200190518101906139e39190615c2c565b6139ed8288615485565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613a1f57613a1f613e89565b6040519080825280601f01601f191660200182016040528015613a49576020820181803683370190505b509150863b613a7c577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613aaf577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613ae8577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b0b5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b63576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b7757506101018111155b613b94576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613bbe576040516309bde33960e01b815260040160405180910390fd5b80600003613beb5786600081518110613bd957613bd9614f7f565b60200260200101519350505050613dba565b60008167ffffffffffffffff811115613c0657613c06613e89565b604051908082528060200260200182016040528015613c2f578160200160208202803683370190505b50905060008080805b85811015613d595760006001821b8b811603613c935788851015613c7c578c5160018601958e918110613c6d57613c6d614f7f565b60200260200101519050613cb5565b8551600185019487918110613c6d57613c6d614f7f565b8b5160018401938d918110613caa57613caa614f7f565b602002602001015190505b600089861015613ce5578d5160018701968f918110613cd657613cd6614f7f565b60200260200101519050613d07565b8651600186019588918110613cfc57613cfc614f7f565b602002602001015190505b82851115613d28576040516309bde33960e01b815260040160405180910390fd5b613d328282613dc1565b878481518110613d4457613d44614f7f565b60209081029190910101525050600101613c38565b506001850382148015613d6b57508683145b8015613d7657508581145b613d93576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613da857613da8614f7f565b60200260200101519750505050505050505b9392505050565b6000818310613dd957613dd48284613ddf565b610c12565b610c1283835b604080516001602082015290810183905260608101829052600090608001613642565b828054828255906000526020600020908101928215613e64579160200282015b82811115613e64578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e22565b50613e70929150613e74565b5090565b5b80821115613e705760008155600101613e75565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ec257613ec2613e89565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ec257613ec2613e89565b60405160c0810167ffffffffffffffff81118282101715613ec257613ec2613e89565b6040805190810167ffffffffffffffff81118282101715613ec257613ec2613e89565b6040516060810167ffffffffffffffff81118282101715613ec257613ec2613e89565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f7d57613f7d613e89565b604052919050565b600067ffffffffffffffff821115613f9f57613f9f613e89565b5060051b60200190565b6001600160a01b03811681146105dd57600080fd5b803567ffffffffffffffff81168114613fd657600080fd5b919050565b80151581146105dd57600080fd5b8035613fd681613fdb565b600067ffffffffffffffff82111561400e5761400e613e89565b50601f01601f191660200190565b600082601f83011261402d57600080fd5b813561404061403b82613ff4565b613f54565b81815284602083860101111561405557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561408557600080fd5b823567ffffffffffffffff8082111561409d57600080fd5b818501915085601f8301126140b157600080fd5b81356140bf61403b82613f85565b81815260059190911b830184019084810190888311156140de57600080fd5b8585015b83811015614184578035858111156140fa5760008081fd5b86016080818c03601f19018113156141125760008081fd5b61411a613e9f565b8983013561412781613fa9565b81526040614136848201613fbe565b8b83015260608085013561414981613fdb565b8383015292840135928984111561416257600091508182fd5b6141708f8d8688010161401c565b9083015250855250509186019186016140e2565b5098975050505050505050565b600060a082840312156141a357600080fd5b6141ab613ec8565b9050813581526141bd60208301613fbe565b60208201526141ce60408301613fbe565b60408201526141df60608301613fbe565b60608201526141f060808301613fbe565b608082015292915050565b8035613fd681613fa9565b600082601f83011261421757600080fd5b8135602061422761403b83613f85565b82815260059290921b8401810191818101908684111561424657600080fd5b8286015b848110156120c157803567ffffffffffffffff8082111561426b5760008081fd5b818901915060a080601f19848d030112156142865760008081fd5b61428e613ec8565b87840135838111156142a05760008081fd5b6142ae8d8a8388010161401c565b825250604080850135848111156142c55760008081fd5b6142d38e8b8389010161401c565b8a84015250606080860135858111156142ec5760008081fd5b6142fa8f8c838a010161401c565b838501525060809150818601358184015250828501359250838311156143205760008081fd5b61432e8d8a8588010161401c565b90820152865250505091830191830161424a565b6000610140828403121561435557600080fd5b61435d613eeb565b90506143698383614191565b815260a082013567ffffffffffffffff8082111561438657600080fd5b6143928583860161401c565b602084015260c08401359150808211156143ab57600080fd5b6143b78583860161401c565b60408401526143c860e085016141fb565b606084015261010084013560808401526101208401359150808211156143ed57600080fd5b506143fa84828501614206565b60a08301525092915050565b600082601f83011261441757600080fd5b8135602061442761403b83613f85565b82815260059290921b8401810191818101908684111561444657600080fd5b8286015b848110156120c157803567ffffffffffffffff81111561446a5760008081fd5b6144788986838b0101614342565b84525091830191830161444a565b600082601f83011261449757600080fd5b813560206144a761403b83613f85565b82815260059290921b840181019181810190868411156144c657600080fd5b8286015b848110156120c157803567ffffffffffffffff808211156144ea57600080fd5b818901915089603f8301126144fe57600080fd5b8582013561450e61403b82613f85565b81815260059190911b830160400190878101908c83111561452e57600080fd5b604085015b838110156145675780358581111561454a57600080fd5b6145598f6040838a010161401c565b845250918901918901614533565b508752505050928401925083016144ca565b600082601f83011261458a57600080fd5b8135602061459a61403b83613f85565b8083825260208201915060208460051b8701019350868411156145bc57600080fd5b602086015b848110156120c157803583529183019183016145c1565b600082601f8301126145e957600080fd5b813560206145f961403b83613f85565b82815260059290921b8401810191818101908684111561461857600080fd5b8286015b848110156120c157803567ffffffffffffffff8082111561463d5760008081fd5b818901915060a080601f19848d030112156146585760008081fd5b614660613ec8565b61466b888501613fbe565b8152604080850135848111156146815760008081fd5b61468f8e8b83890101614406565b8a84015250606080860135858111156146a85760008081fd5b6146b68f8c838a0101614486565b83850152506080915081860135858111156146d15760008081fd5b6146df8f8c838a0101614579565b918401919091525091909301359083015250835291830191830161461c565b600080604080848603121561471257600080fd5b833567ffffffffffffffff8082111561472a57600080fd5b614736878388016145d8565b945060209150818601358181111561474d57600080fd5b8601601f8101881361475e57600080fd5b803561476c61403b82613f85565b81815260059190911b8201840190848101908a83111561478b57600080fd5b8584015b83811015614817578035868111156147a75760008081fd5b8501603f81018d136147b95760008081fd5b878101356147c961403b82613f85565b81815260059190911b82018a0190898101908f8311156147e95760008081fd5b928b01925b828410156148075783358252928a0192908a01906147ee565b865250505091860191860161478f565b50809750505050505050509250929050565b60005b8381101561484457818101518382015260200161482c565b50506000910152565b60008151808452614865816020860160208601614829565b601f01601f19169290920160200192915050565b602081526000610c12602083018461484d565b8060608101831015610c1557600080fd5b60008083601f8401126148af57600080fd5b50813567ffffffffffffffff8111156148c757600080fd5b60208301915083602082850101111561382157600080fd5b60008083601f8401126148f157600080fd5b50813567ffffffffffffffff81111561490957600080fd5b6020830191508360208260051b850101111561382157600080fd5b60008060008060008060008060e0898b03121561494057600080fd5b61494a8a8a61488c565b9750606089013567ffffffffffffffff8082111561496757600080fd5b6149738c838d0161489d565b909950975060808b013591508082111561498c57600080fd5b6149988c838d016148df565b909750955060a08b01359150808211156149b157600080fd5b506149be8b828c016148df565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156149ec57600080fd5b6149f6858561488c565b9250606084013567ffffffffffffffff811115614a1257600080fd5b614a1e8682870161489d565b9497909650939450505050565b60008060408385031215614a3e57600080fd5b614a4783613fbe565b9150614a5560208401613fbe565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110614a8457614a84614a5e565b9052565b60208101610c158284614a74565b600060208284031215614aa857600080fd5b813567ffffffffffffffff811115614abf57600080fd5b820160a08185031215613dba57600080fd5b803563ffffffff81168114613fd657600080fd5b600060a08284031215614af757600080fd5b614aff613ec8565b8235614b0a81613fa9565b8152614b1860208401614ad1565b6020820152614b2960408401614ad1565b6040820152614b3a60608401614ad1565b60608201526080830135614b4d81613fa9565b60808201529392505050565b600080600060408486031215614b6e57600080fd5b833567ffffffffffffffff80821115614b8657600080fd5b614b9287838801614342565b94506020860135915080821115614ba857600080fd5b50614a1e868287016148df565b803560ff81168114613fd657600080fd5b600060208284031215614bd857600080fd5b610c1282614bb5565b60008151808452602080850194506020840160005b83811015614c1b5781516001600160a01b031687529582019590820190600101614bf6565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c7560e0840182614be1565b90506040840151601f198483030160c0850152614c928282614be1565b95945050505050565b60008060408385031215614cae57600080fd5b614cb783613fbe565b946020939093013593505050565b60008060208385031215614cd857600080fd5b823567ffffffffffffffff80821115614cf057600080fd5b818501915085601f830112614d0457600080fd5b813581811115614d1357600080fd5b8660208260061b8501011115614d2857600080fd5b60209290920196919550909350505050565b600060208284031215614d4c57600080fd5b610c1282613fbe565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526136ae60a084018261484d565b600060208284031215614db557600080fd5b8135613dba81613fa9565b600082601f830112614dd157600080fd5b81356020614de161403b83613f85565b8083825260208201915060208460051b870101935086841115614e0357600080fd5b602086015b848110156120c1578035614e1b81613fa9565b8352918301918301614e08565b60006020808385031215614e3b57600080fd5b823567ffffffffffffffff80821115614e5357600080fd5b818501915085601f830112614e6757600080fd5b8135614e7561403b82613f85565b81815260059190911b83018401908481019088831115614e9457600080fd5b8585015b8381101561418457803585811115614eaf57600080fd5b860160c0818c03601f19011215614ec65760008081fd5b614ece613eeb565b8882013581526040614ee1818401614bb5565b8a8301526060614ef2818501614bb5565b8284015260809150614f05828501613fe9565b9083015260a08381013589811115614f1d5760008081fd5b614f2b8f8d83880101614dc0565b838501525060c0840135915088821115614f455760008081fd5b614f538e8c84870101614dc0565b9083015250845250918601918601614e98565b600060208284031215614f7857600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160e01b0381168114613fd657600080fd5b600082601f830112614fbd57600080fd5b81356020614fcd61403b83613f85565b82815260069290921b84018101918181019086841115614fec57600080fd5b8286015b848110156120c157604081890312156150095760008081fd5b615011613f0e565b61501a82613fbe565b8152615027858301614f95565b81860152835291830191604001614ff0565b600082601f83011261504a57600080fd5b8135602061505a61403b83613f85565b82815260079290921b8401810191818101908684111561507957600080fd5b8286015b848110156120c15780880360808112156150975760008081fd5b61509f613f31565b6150a883613fbe565b8152604080601f19840112156150be5760008081fd5b6150c6613f0e565b92506150d3878501613fbe565b83526150e0818501613fbe565b838801528187019290925260608301359181019190915283529183019160800161507d565b6000602080838503121561511857600080fd5b823567ffffffffffffffff8082111561513057600080fd5b8185019150604080838803121561514657600080fd5b61514e613f0e565b83358381111561515d57600080fd5b84016040818a03121561516f57600080fd5b615177613f0e565b81358581111561518657600080fd5b8201601f81018b1361519757600080fd5b80356151a561403b82613f85565b81815260069190911b8201890190898101908d8311156151c457600080fd5b928a01925b828410156152145787848f0312156151e15760008081fd5b6151e9613f0e565b84356151f481613fa9565b8152615201858d01614f95565b818d0152825292870192908a01906151c9565b84525050508187013593508484111561522c57600080fd5b6152388a858401614fac565b818801528252508385013591508282111561525257600080fd5b61525e88838601615039565b85820152809550505050505092915050565b805160408084528151848201819052600092602091908201906060870190855b818110156152c757835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615290565b50508583015187820388850152805180835290840192506000918401905b80831015615321578351805167ffffffffffffffff1683528501516001600160e01b0316858301529284019260019290920191908501906152e5565b50979650505050505050565b602081526000610c126020830184615270565b67ffffffffffffffff8316815260608101613dba6020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153ac576153ac615375565b5092915050565b6000602080835260608451604080848701526153d26060870183615270565b87850151878203601f19016040890152805180835290860193506000918601905b8083101561418457845167ffffffffffffffff81511683528781015161543289850182805167ffffffffffffffff908116835260209182015116910152565b508401518287015293860193600192909201916080909101906153f3565b60006020828403121561546257600080fd5b813567ffffffffffffffff81111561547957600080fd5b6136ae848285016145d8565b81810381811115610c1557610c15615375565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154c9576154c9615498565b92169190910692915050565b8082028115828204841417610c1557610c15615375565b805182526000602067ffffffffffffffff81840151168185015260408084015160a0604087015261552060a087018261484d565b905060608501518682036060880152615539828261484d565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561532157835180516001600160a01b031683528601518683015292850192600192909201919084019061555c565b602081526000610c1260208301846154ec565b6080815260006155b460808301876154ec565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156155f257600080fd5b83516155fd81613fdb565b602085015190935067ffffffffffffffff81111561561a57600080fd5b8401601f8101861361562b57600080fd5b805161563961403b82613ff4565b81815287602083850101111561564e57600080fd5b61565f826020830160208601614829565b809450505050604084015190509250925092565b60006040828403121561568557600080fd5b61568d613f0e565b61569683613fbe565b8152602083013560208201528091505092915050565b600181811c908216806156c057607f821691505b6020821081036156e057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156156f857600080fd5b8151613dba81613fdb565b601f821115610780576000816000526020600020601f850160051c8101602086101561572c5750805b601f850160051c820191505b8181101561574b57828155600101615738565b505050505050565b815167ffffffffffffffff81111561576d5761576d613e89565b6157818161577b84546156ac565b84615703565b602080601f8311600181146157b6576000841561579e5750858301515b600019600386901b1c1916600185901b17855561574b565b600085815260208120601f198616915b828110156157e5578886015182559484019460019091019084016157c6565b50858210156158035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c16606085015250600180850160808086015260008154615865816156ac565b8060a089015260c0600183166000811461588657600181146158a2576158d2565b60ff19841660c08b015260c083151560051b8b010194506158d2565b85600052602060002060005b848110156158c95781548c82018501529088019089016158ae565b8b0160c0019550505b50929998505050505050505050565b80820180821115610c1557610c15615375565b60ff8181168382160190811115610c1557610c15615375565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff8084168061594c5761594c615498565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261598d57600080fd5b83018035915067ffffffffffffffff8211156159a857600080fd5b60200191503681900382131561382157600080fd5b60208101600583106159d1576159d1614a5e565b91905290565b60ff81811683821602908116908181146153ac576153ac615375565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a4b5784546001600160a01b031683526001948501949284019201615a26565b50508481036060860152865180825290820192508187019060005b81811015615a8b5782516001600160a01b031685529383019391830191600101615a66565b50505060ff851660808501525090506120c3565b600067ffffffffffffffff808616835280851660208401525060606040830152614c92606083018461484d565b8281526040602082015260006136ae604083018461484d565b67ffffffffffffffff848116825283166020820152606081016136ae6040830184614a74565b848152615b1b6020820185614a74565b608060408201526000615b31608083018561484d565b905082606083015295945050505050565b600060208284031215615b5457600080fd5b8151613dba81613fa9565b6020815260008251610100806020850152615b7e61012085018361484d565b91506020850151615b9b604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615bd560a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bf2848361484d565b935060c08701519150808685030160e0870152615c0f848361484d565b935060e08701519150808685030183870152506120c3838261484d565b600060208284031215615c3e57600080fd5b5051919050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526120c3608083018461484d565b86815260c060208201526000615c9160c083018861484d565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d7d57601f19868403018952815160a08151818652615d0e8287018261484d565b9150508582015185820387870152615d26828261484d565b91505060408083015186830382880152615d40838261484d565b92505050606080830151818701525060808083015192508582038187015250615d69818361484d565b9a86019a9450505090830190600101615ce8565b5090979650505050505050565b602081526000610c126020830184615ccb565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d7d57601f19868403018952615dd883835161484d565b98840198925090830190600101615dbc565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e5261018085018361484d565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e8f848361484d565b935060608801519150615eae6101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615ed58282615ccb565b9150508281036020840152614c928185615d9d56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"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\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"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\":[],\"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\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"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\":\"address\",\"name\":\"rmnProxy\",\"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\":\"address\",\"name\":\"rmnProxy\",\"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\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006d0d38038062006d0d8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e0516101005161603062000cdd600039600081816102660152612b27015260008181610237015261301b015260008181610208015281816109390152818161152201526125190152600081816101d801526127a60152600081816118ea015261193601526160306000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063ccd37ba31161008c578063f2fde38b11610066578063f2fde38b14610583578063f716f99f14610596578063ff888fb1146105a957600080fd5b8063ccd37ba31461050b578063d2a15d3514610550578063e9d68a8e1461056357600080fd5b8063991a5018116100bd578063991a5018146104c5578063a80036b4146104d8578063c673e584146104eb57600080fd5b806385572ffb1461049c5780638da5cb5b146104aa57600080fd5b8063311cd5131161012f5780635e36480c116101145780635e36480c146103785780637437ff9f1461039857806379ba50971461049457600080fd5b8063311cd513146103495780633f4b04aa1461035c57600080fd5b806306285c691161016057806306285c69146101a4578063181f5a77146102ed5780632d04ab761461033657600080fd5b806304666f9c1461017c57806305d938b514610191575b600080fd5b61018f61018a3660046141ab565b6105cc565b005b61018f61019f366004614837565b6105e0565b61029660408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102e49190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103296040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102e491906149b2565b61018f610344366004614a5d565b610785565b61018f610357366004614b10565b610c53565b60095460405167ffffffffffffffff90911681526020016102e4565b61038b610386366004614b64565b610cbc565b6040516102e49190614bc1565b6104376040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102e49190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610d12565b61018f610177366004614bcf565b6000546040516001600160a01b0390911681526020016102e4565b61018f6104d3366004614c1e565b610dd0565b61018f6104e6366004614c92565b610de1565b6104fe6104f9366004614cff565b611154565b6040516102e49190614d5f565b610542610519366004614dd4565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102e4565b61018f61055e366004614dfe565b6112b2565b610576610571366004614e73565b61136c565b6040516102e49190614e8e565b61018f610591366004614edc565b611479565b61018f6105a4366004614f61565b61148a565b6105bc6105b736600461509f565b6114cc565b60405190151581526020016102e4565b6105d461158d565b6105dd816115e9565b50565b6105e86118e7565b815181518114610624576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610775576000848281518110610643576106436150b8565b6020026020010151905060008160200151519050600085848151811061066b5761066b6150b8565b60200260200101519050805182146106af576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156107665760008282815181106106ce576106ce6150b8565b602002602001015190508060001461075d57846020015182815181106106f6576106f66150b8565b60200260200101516080015181101561075d5784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064015b60405180910390fd5b506001016106b2565b50505050806001019050610627565b506107808383611968565b505050565b60006107938789018961523e565b805151519091501515806107ac57508051602001515115155b156108ac5760095460208a01359067ffffffffffffffff8083169116101561086b576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f92610834929101615466565b600060405180830381600087803b15801561084e57600080fd5b505af1158015610862573d6000803e3d6000fd5b505050506108aa565b8160200151516000036108aa576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610b9c576000826020015182815181106108d4576108d46150b8565b602090810291909101015180516040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a49190615479565b156109e7576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610754565b60006109f282611a18565b602084015151815491925067ffffffffffffffff908116600160a81b90920416141580610a36575060208084015190810151905167ffffffffffffffff9182169116115b15610a7657825160208401516040517feefb0cac000000000000000000000000000000000000000000000000000000008152610754929190600401615496565b604083015180610ab2576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff16600090815260086020908152604080832084845290915290205415610b255783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101829052604401610754565b6020808501510151610b389060016154e1565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff9283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016108af565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d81604051610bcc9190615509565b60405180910390a1610c4860008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611a7f915050565b505050505050505050565b610c93610c62828401846155a6565b6040805160008082526020820190925290610c8d565b6060815260200190600190039081610c785790505b50611968565b604080516000808252602082019092529050610cb6600185858585866000611a7f565b50505050565b6000610cca600160046155db565b6002610cd7608085615604565b67ffffffffffffffff16610ceb919061562b565b610cf58585611df6565b901c166003811115610d0957610d09614b97565b90505b92915050565b6001546001600160a01b03163314610d6c5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610754565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610dd861158d565b6105dd81611e3d565b333014610e1a576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281610e57565b6040805180820190915260008082526020820152815260200190600190039081610e305790505b5060a08501515190915015610e8b57610e888460a00151856020015186606001518760000151602001518787611fa3565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff1681830152808701518351600094840192610ec79291016149b2565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015610fd4576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a190610f419085906004016156e4565b600060405180830381600087803b158015610f5b57600080fd5b505af1925050508015610f6c575060015b610fd4573d808015610f9a576040519150601f19603f3d011682016040523d82523d6000602084013e610f9f565b606091505b50806040517f09c2532500000000000000000000000000000000000000000000000000000000815260040161075491906149b2565b604086015151158015610fe957506080860151155b80611000575060608601516001600160a01b03163b155b806110405750606086015161103e906001600160a01b03167f85572ffb000000000000000000000000000000000000000000000000000000006120c2565b155b1561104d57505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf97983926110c592899261138892916004016156f7565b6000604051808303816000875af11580156110e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110c9190810190615733565b50915091508161114a57806040517f0a8d6e8c00000000000000000000000000000000000000000000000000000000815260040161075491906149b2565b5050505050505050565b6111976040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561124057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611222575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156112a257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611284575b5050505050815250509050919050565b6112ba61158d565b60005b818110156107805760008383838181106112d9576112d96150b8565b9050604002018036038101906112ef91906157c9565b90506112fe81602001516114cc565b61136357805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b506001016112bd565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916113f990615802565b80601f016020809104026020016040519081016040528092919081815260200182805461142590615802565b80156112a25780601f10611447576101008083540402835291602001916112a2565b820191906000526020600020905b81548152906001019060200180831161145557505050919092525091949350505050565b61148161158d565b6105dd816120de565b61149261158d565b60005b81518110156114c8576114c08282815181106114b3576114b36150b8565b6020026020010151612194565b600101611495565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa158015611569573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c9190615479565b6000546001600160a01b031633146115e75760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610754565b565b60005b81518110156114c8576000828281518110611609576116096150b8565b602002602001015190506000816020015190508067ffffffffffffffff16600003611660576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b0316611688576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916116b390615802565b80601f01602080910402602001604051908101604052809291908181526020018280546116df90615802565b801561172c5780601f106117015761010080835404028352916020019161172c565b820191906000526020600020905b81548152906001019060200180831161170f57829003601f168201915b5050505050905060008460600151905081516000036117e4578051600003611767576040516342bcdf7f60e11b815260040160405180910390fd5b60018301611775828261588c565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611837565b8080519060200120828051906020012014611837576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610754565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906118cf90869061594c565b60405180910390a250505050508060010190506115ec565b467f0000000000000000000000000000000000000000000000000000000000000000146115e7576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604401610754565b81516000036119a2576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b8451811015611a1157611a098582815181106119d7576119d76150b8565b602002602001015184611a03578583815181106119f6576119f66150b8565b60200260200101516124c5565b836124c5565b6001016119b9565b5050505050565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610d0c576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610754565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611ade8760a4615a1a565b9050826060015115611b26578451611af790602061562b565b8651611b0490602061562b565b611b0f9060a0615a1a565b611b199190615a1a565b611b239082615a1a565b90505b368114611b68576040517f8e1192e100000000000000000000000000000000000000000000000000000000815260048101829052366024820152604401610754565b5081518114611bb05781516040517f93df584c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610754565b611bb86118e7565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611c0657611c06614b97565b6002811115611c1757611c17614b97565b9052509050600281602001516002811115611c3457611c34614b97565b148015611c885750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611c7057611c706150b8565b6000918252602090912001546001600160a01b031633145b611cbe576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611da0576020820151611cd9906001615a2d565b60ff16855114611d15576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611d50576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611d62929190615a46565b604051908190038120611d79918b90602001615a56565b604051602081830303815290604052805190602001209050611d9e8a82888888612dd5565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b67ffffffffffffffff8216600090815260076020526040812081611e1b608085615a6a565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b80516001600160a01b0316611e65576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611fbf57611fbf613fc2565b60405190808252806020026020018201604052801561200457816020015b6040805180820190915260008082526020820152815260200190600190039081611fdd5790505b50905060005b87518110156120b657612091888281518110612028576120286150b8565b6020026020010151888888888887818110612045576120456150b8565b90506020028101906120579190615a91565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fba92505050565b8282815181106120a3576120a36150b8565b602090810291909101015260010161200a565b505b9695505050505050565b60006120cd8361335f565b8015610d095750610d0983836133c3565b336001600160a01b038216036121365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610754565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036121bf576000604051631b3fab5160e11b81526004016107549190615af6565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361222c57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055612281565b6060840151600182015460ff6201000090910416151590151514612281576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610754565b60a0840151805161010010156122ad576001604051631b3fab5160e11b81526004016107549190615af6565b612313848460030180548060200260200160405190810160405280929190818152602001828054801561230957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122eb575b505050505061347e565b84606001511561243a576123818484600201805480602002602001604051908101604052809291908181526020018280548015612309576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122eb57505050505061347e565b6080850151805161010010156123ad576002604051631b3fab5160e11b81526004016107549190615af6565b60408601516123bd906003615b10565b60ff168151116123e3576003604051631b3fab5160e11b81526004016107549190615af6565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff84160217905561242b9060028601906020840190613f3b565b50612438858260016134e7565b505b612446848260026134e7565b805161245b9060038501906020840190613f3b565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124b49389939260028a01929190615b2c565b60405180910390a1611a118461365b565b815181516040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608083901b77ffffffffffffffff00000000000000000000000000000000166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190615479565b156126185780156125d5576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610754565b60405167ffffffffffffffff831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b600061262383611a18565b600101805461263190615802565b80601f016020809104026020016040519081016040528092919081815260200182805461265d90615802565b80156126aa5780601f1061267f576101008083540402835291602001916126aa565b820191906000526020600020905b81548152906001019060200180831161268d57829003601f168201915b505050602088015151929350505060008190036126f2576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560400151518114612730576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561274b5761274b613fc2565b604051908082528060200260200182016040528015612774578160200160208202803683370190505b50905060005b8281101561285d5760008860200151828151811061279a5761279a6150b8565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff161461282d57805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610754565b6128378186613677565b838381518110612849576128496150b8565b60209081029190910101525060010161277a565b50600061287486838a606001518b60800151613799565b9050806000036128bc576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff87166004820152602401610754565b60005b83811015610c485760005a905060008a6020015183815181106128e4576128e46150b8565b6020026020010151905060006129028a836000015160600151610cbc565b9050600081600381111561291857612918614b97565b14806129355750600381600381111561293357612933614b97565b145b61298d578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050612dcd565b8815612a5d57600454600090600160a01b900463ffffffff166129b087426155db565b11905080806129d0575060038260038111156129ce576129ce614b97565b145b612a12576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c166004820152602401610754565b8b8581518110612a2457612a246150b8565b6020026020010151600014612a57578b8581518110612a4557612a456150b8565b60200260200101518360800181815250505b50612abe565b6000816003811115612a7157612a71614b97565b14612abe578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910161297d565b81516080015167ffffffffffffffff1615612bad576000816003811115612ae757612ae7614b97565b03612bad5781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612b5e928f929190600401615bd8565b6020604051808303816000875af1158015612b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba19190615479565b612bad57505050612dcd565b60008c604001518581518110612bc557612bc56150b8565b6020026020010151905080518360a001515114612c29578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e1660048301529091166024820152604401610754565b612c3d8b84600001516060015160016137ef565b600080612c4a8584613897565b91509150612c618d866000015160600151846137ef565b8b15612cd1576003826003811115612c7b57612c7b614b97565b03612cd1576000846003811115612c9457612c94614b97565b14612cd1578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261075491908390600401615c05565b6002826003811115612ce557612ce5614b97565b14612d3f576003826003811115612cfe57612cfe614b97565b14612d3f578451606001516040517f926c5a3e000000000000000000000000000000000000000000000000000000008152610754918f918590600401615c1e565b84600001516000015185600001516060015167ffffffffffffffff168e67ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8c8b81518110612d9957612d996150b8565b602002602001015186865a612dae908e6155db565b604051612dbe9493929190615c44565b60405180910390a45050505050505b6001016128bf565b8251600090815b8181101561114a576000600188868460208110612dfb57612dfb6150b8565b612e0891901a601b615a2d565b898581518110612e1a57612e1a6150b8565b6020026020010151898681518110612e3457612e346150b8565b602002602001015160405160008152602001604052604051612e72949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612e94573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b03851683528152858220858701909652855480841686529397509095509293928401916101009004166002811115612ef557612ef5614b97565b6002811115612f0657612f06614b97565b9052509050600181602001516002811115612f2357612f23614b97565b14612f5a576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615612f9d576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612ddc565b60408051808201909152600080825260208201526000612fdd8760200151613961565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015613062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130869190615c7b565b90506001600160a01b03811615806130ce57506130cc6001600160a01b0382167faff2afbf000000000000000000000000000000000000000000000000000000006120c2565b155b15613110576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610754565b60045460009081906131329089908690600160e01b900463ffffffff16613a07565b9150915060008060006131ff6040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b8152506040516024016131b09190615c98565b60408051601f198184030181529190526020810180516001600160e01b03167f390775370000000000000000000000000000000000000000000000000000000017905287866113886084613b35565b9250925092508261323e57816040517fe1cd550900000000000000000000000000000000000000000000000000000000815260040161075491906149b2565b81516020146132865781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b60008280602001905181019061329c9190615d65565b9050866001600160a01b03168c6001600160a01b0316146133315760006132cd8d8a6132c8868a6155db565b613a07565b509050868110806132e75750816132e488836155db565b14155b1561332f576040517fa966e21f000000000000000000000000000000000000000000000000000000008152600481018390526024810188905260448101829052606401610754565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061338b827f01ffc9a7000000000000000000000000000000000000000000000000000000006133c3565b8015610d0c57506133bc827fffffffff000000000000000000000000000000000000000000000000000000006133c3565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613467575060208210155b80156134735750600081115b979650505050505050565b60005b81518110156107805760ff8316600090815260036020526040812083519091908490849081106134b3576134b36150b8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613481565b60005b8251811015610cb6576000838281518110613507576135076150b8565b602002602001015190506000600281111561352457613524614b97565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561356357613563614b97565b14613584576004604051631b3fab5160e11b81526004016107549190615af6565b6001600160a01b0381166135c4576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156135ea576135ea614b97565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561364757613647614b97565b0217905550905050508060010190506134ea565b60ff81166105dd576009805467ffffffffffffffff1916905550565b8151602080820151604092830151925160009384936136bd937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615d7e565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976137069794969395929491939101615db1565b604051602081830303815290604052805190602001208560400151805190602001208660a0015160405160200161373d9190615ec3565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b6000806137a7858585613c5b565b90506137b2816114cc565b6137c05760009150506137e7565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026137fe608085615604565b67ffffffffffffffff16613812919061562b565b905060006138208585611df6565b90508161382f600160046155db565b901b19168183600381111561384657613846614b97565b67ffffffffffffffff871660009081526007602052604081209190921b92909217918291613875608088615a6a565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fa80036b4000000000000000000000000000000000000000000000000000000008152600090606090309063a80036b4906138db9087908790600401615f23565b600060405180830381600087803b1580156138f557600080fd5b505af1925050508015613906575060015b613945573d808015613934576040519150601f19603f3d011682016040523d82523d6000602084013e613939565b606091505b5060039250905061395a565b50506040805160208101909152600081526002905b9250929050565b600081516020146139a057816040517f8d666f6000000000000000000000000000000000000000000000000000000000815260040161075491906149b2565b6000828060200190518101906139b69190615d65565b90506001600160a01b038111806139ce575061040081105b15610d0c57826040517f8d666f6000000000000000000000000000000000000000000000000000000000815260040161075491906149b2565b6000806000806000613a8188604051602401613a3291906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a082310000000000000000000000000000000000000000000000000000000017905288886113886084613b35565b92509250925082613ac057816040517fe1cd550900000000000000000000000000000000000000000000000000000000815260040161075491906149b2565b6020825114613b085781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b81806020019051810190613b1c9190615d65565b613b2682886155db565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613b5857613b58613fc2565b6040519080825280601f01601f191660200182016040528015613b82576020820181803683370190505b509150863b613bb5577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613be8577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613c21577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613c445750835b808352806000602085013e50955095509592505050565b8251825160009190818303613c9c576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613cb057506101018111155b613ccd576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613cf7576040516309bde33960e01b815260040160405180910390fd5b80600003613d245786600081518110613d1257613d126150b8565b60200260200101519350505050613ef3565b60008167ffffffffffffffff811115613d3f57613d3f613fc2565b604051908082528060200260200182016040528015613d68578160200160208202803683370190505b50905060008080805b85811015613e925760006001821b8b811603613dcc5788851015613db5578c5160018601958e918110613da657613da66150b8565b60200260200101519050613dee565b8551600185019487918110613da657613da66150b8565b8b5160018401938d918110613de357613de36150b8565b602002602001015190505b600089861015613e1e578d5160018701968f918110613e0f57613e0f6150b8565b60200260200101519050613e40565b8651600186019588918110613e3557613e356150b8565b602002602001015190505b82851115613e61576040516309bde33960e01b815260040160405180910390fd5b613e6b8282613efa565b878481518110613e7d57613e7d6150b8565b60209081029190910101525050600101613d71565b506001850382148015613ea457508683145b8015613eaf57508581145b613ecc576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613ee157613ee16150b8565b60200260200101519750505050505050505b9392505050565b6000818310613f1257613f0d8284613f18565b610d09565b610d0983835b60408051600160208201529081018390526060810182905260009060800161377b565b828054828255906000526020600020908101928215613f9d579160200282015b82811115613f9d578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613f5b565b50613fa9929150613fad565b5090565b5b80821115613fa95760008155600101613fae565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ffb57613ffb613fc2565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ffb57613ffb613fc2565b60405160c0810167ffffffffffffffff81118282101715613ffb57613ffb613fc2565b6040805190810167ffffffffffffffff81118282101715613ffb57613ffb613fc2565b6040516060810167ffffffffffffffff81118282101715613ffb57613ffb613fc2565b604051601f8201601f1916810167ffffffffffffffff811182821017156140b6576140b6613fc2565b604052919050565b600067ffffffffffffffff8211156140d8576140d8613fc2565b5060051b60200190565b6001600160a01b03811681146105dd57600080fd5b803567ffffffffffffffff8116811461410f57600080fd5b919050565b80151581146105dd57600080fd5b803561410f81614114565b600067ffffffffffffffff82111561414757614147613fc2565b50601f01601f191660200190565b600082601f83011261416657600080fd5b81356141796141748261412d565b61408d565b81815284602083860101111561418e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156141be57600080fd5b823567ffffffffffffffff808211156141d657600080fd5b818501915085601f8301126141ea57600080fd5b81356141f8614174826140be565b81815260059190911b8301840190848101908883111561421757600080fd5b8585015b838110156142bd578035858111156142335760008081fd5b86016080818c03601f190181131561424b5760008081fd5b614253613fd8565b89830135614260816140e2565b8152604061426f8482016140f7565b8b83015260608085013561428281614114565b8383015292840135928984111561429b57600091508182fd5b6142a98f8d86880101614155565b90830152508552505091860191860161421b565b5098975050505050505050565b600060a082840312156142dc57600080fd5b6142e4614001565b9050813581526142f6602083016140f7565b6020820152614307604083016140f7565b6040820152614318606083016140f7565b6060820152614329608083016140f7565b608082015292915050565b803561410f816140e2565b600082601f83011261435057600080fd5b81356020614360614174836140be565b82815260059290921b8401810191818101908684111561437f57600080fd5b8286015b848110156120b657803567ffffffffffffffff808211156143a45760008081fd5b818901915060a080601f19848d030112156143bf5760008081fd5b6143c7614001565b87840135838111156143d95760008081fd5b6143e78d8a83880101614155565b825250604080850135848111156143fe5760008081fd5b61440c8e8b83890101614155565b8a84015250606080860135858111156144255760008081fd5b6144338f8c838a0101614155565b838501525060809150818601358184015250828501359250838311156144595760008081fd5b6144678d8a85880101614155565b908201528652505050918301918301614383565b6000610140828403121561448e57600080fd5b614496614024565b90506144a283836142ca565b815260a082013567ffffffffffffffff808211156144bf57600080fd5b6144cb85838601614155565b602084015260c08401359150808211156144e457600080fd5b6144f085838601614155565b604084015261450160e08501614334565b6060840152610100840135608084015261012084013591508082111561452657600080fd5b506145338482850161433f565b60a08301525092915050565b600082601f83011261455057600080fd5b81356020614560614174836140be565b82815260059290921b8401810191818101908684111561457f57600080fd5b8286015b848110156120b657803567ffffffffffffffff8111156145a35760008081fd5b6145b18986838b010161447b565b845250918301918301614583565b600082601f8301126145d057600080fd5b813560206145e0614174836140be565b82815260059290921b840181019181810190868411156145ff57600080fd5b8286015b848110156120b657803567ffffffffffffffff8082111561462357600080fd5b818901915089603f83011261463757600080fd5b85820135614647614174826140be565b81815260059190911b830160400190878101908c83111561466757600080fd5b604085015b838110156146a05780358581111561468357600080fd5b6146928f6040838a0101614155565b84525091890191890161466c565b50875250505092840192508301614603565b600082601f8301126146c357600080fd5b813560206146d3614174836140be565b8083825260208201915060208460051b8701019350868411156146f557600080fd5b602086015b848110156120b657803583529183019183016146fa565b600082601f83011261472257600080fd5b81356020614732614174836140be565b82815260059290921b8401810191818101908684111561475157600080fd5b8286015b848110156120b657803567ffffffffffffffff808211156147765760008081fd5b818901915060a080601f19848d030112156147915760008081fd5b614799614001565b6147a48885016140f7565b8152604080850135848111156147ba5760008081fd5b6147c88e8b8389010161453f565b8a84015250606080860135858111156147e15760008081fd5b6147ef8f8c838a01016145bf565b838501525060809150818601358581111561480a5760008081fd5b6148188f8c838a01016146b2565b9184019190915250919093013590830152508352918301918301614755565b600080604080848603121561484b57600080fd5b833567ffffffffffffffff8082111561486357600080fd5b61486f87838801614711565b945060209150818601358181111561488657600080fd5b8601601f8101881361489757600080fd5b80356148a5614174826140be565b81815260059190911b8201840190848101908a8311156148c457600080fd5b8584015b83811015614950578035868111156148e05760008081fd5b8501603f81018d136148f25760008081fd5b87810135614902614174826140be565b81815260059190911b82018a0190898101908f8311156149225760008081fd5b928b01925b828410156149405783358252928a0192908a0190614927565b86525050509186019186016148c8565b50809750505050505050509250929050565b60005b8381101561497d578181015183820152602001614965565b50506000910152565b6000815180845261499e816020860160208601614962565b601f01601f19169290920160200192915050565b602081526000610d096020830184614986565b8060608101831015610d0c57600080fd5b60008083601f8401126149e857600080fd5b50813567ffffffffffffffff811115614a0057600080fd5b60208301915083602082850101111561395a57600080fd5b60008083601f840112614a2a57600080fd5b50813567ffffffffffffffff811115614a4257600080fd5b6020830191508360208260051b850101111561395a57600080fd5b60008060008060008060008060e0898b031215614a7957600080fd5b614a838a8a6149c5565b9750606089013567ffffffffffffffff80821115614aa057600080fd5b614aac8c838d016149d6565b909950975060808b0135915080821115614ac557600080fd5b614ad18c838d01614a18565b909750955060a08b0135915080821115614aea57600080fd5b50614af78b828c01614a18565b999c989b50969995989497949560c00135949350505050565b600080600060808486031215614b2557600080fd5b614b2f85856149c5565b9250606084013567ffffffffffffffff811115614b4b57600080fd5b614b57868287016149d6565b9497909650939450505050565b60008060408385031215614b7757600080fd5b614b80836140f7565b9150614b8e602084016140f7565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110614bbd57614bbd614b97565b9052565b60208101610d0c8284614bad565b600060208284031215614be157600080fd5b813567ffffffffffffffff811115614bf857600080fd5b820160a08185031215613ef357600080fd5b803563ffffffff8116811461410f57600080fd5b600060a08284031215614c3057600080fd5b614c38614001565b8235614c43816140e2565b8152614c5160208401614c0a565b6020820152614c6260408401614c0a565b6040820152614c7360608401614c0a565b60608201526080830135614c86816140e2565b60808201529392505050565b600080600060408486031215614ca757600080fd5b833567ffffffffffffffff80821115614cbf57600080fd5b614ccb8783880161447b565b94506020860135915080821115614ce157600080fd5b50614b5786828701614a18565b803560ff8116811461410f57600080fd5b600060208284031215614d1157600080fd5b610d0982614cee565b60008151808452602080850194506020840160005b83811015614d545781516001600160a01b031687529582019590820190600101614d2f565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614dae60e0840182614d1a565b90506040840151601f198483030160c0850152614dcb8282614d1a565b95945050505050565b60008060408385031215614de757600080fd5b614df0836140f7565b946020939093013593505050565b60008060208385031215614e1157600080fd5b823567ffffffffffffffff80821115614e2957600080fd5b818501915085601f830112614e3d57600080fd5b813581811115614e4c57600080fd5b8660208260061b8501011115614e6157600080fd5b60209290920196919550909350505050565b600060208284031215614e8557600080fd5b610d09826140f7565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526137e760a0840182614986565b600060208284031215614eee57600080fd5b8135613ef3816140e2565b600082601f830112614f0a57600080fd5b81356020614f1a614174836140be565b8083825260208201915060208460051b870101935086841115614f3c57600080fd5b602086015b848110156120b6578035614f54816140e2565b8352918301918301614f41565b60006020808385031215614f7457600080fd5b823567ffffffffffffffff80821115614f8c57600080fd5b818501915085601f830112614fa057600080fd5b8135614fae614174826140be565b81815260059190911b83018401908481019088831115614fcd57600080fd5b8585015b838110156142bd57803585811115614fe857600080fd5b860160c0818c03601f19011215614fff5760008081fd5b615007614024565b888201358152604061501a818401614cee565b8a830152606061502b818501614cee565b828401526080915061503e828501614122565b9083015260a083810135898111156150565760008081fd5b6150648f8d83880101614ef9565b838501525060c084013591508882111561507e5760008081fd5b61508c8e8c84870101614ef9565b9083015250845250918601918601614fd1565b6000602082840312156150b157600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160e01b038116811461410f57600080fd5b600082601f8301126150f657600080fd5b81356020615106614174836140be565b82815260069290921b8401810191818101908684111561512557600080fd5b8286015b848110156120b657604081890312156151425760008081fd5b61514a614047565b615153826140f7565b81526151608583016150ce565b81860152835291830191604001615129565b600082601f83011261518357600080fd5b81356020615193614174836140be565b82815260079290921b840181019181810190868411156151b257600080fd5b8286015b848110156120b65780880360808112156151d05760008081fd5b6151d861406a565b6151e1836140f7565b8152604080601f19840112156151f75760008081fd5b6151ff614047565b925061520c8785016140f7565b83526152198185016140f7565b83880152818701929092526060830135918101919091528352918301916080016151b6565b6000602080838503121561525157600080fd5b823567ffffffffffffffff8082111561526957600080fd5b8185019150604080838803121561527f57600080fd5b615287614047565b83358381111561529657600080fd5b84016040818a0312156152a857600080fd5b6152b0614047565b8135858111156152bf57600080fd5b8201601f81018b136152d057600080fd5b80356152de614174826140be565b81815260069190911b8201890190898101908d8311156152fd57600080fd5b928a01925b8284101561534d5787848f03121561531a5760008081fd5b615322614047565b843561532d816140e2565b815261533a858d016150ce565b818d0152825292870192908a0190615302565b84525050508187013593508484111561536557600080fd5b6153718a8584016150e5565b818801528252508385013591508282111561538b57600080fd5b61539788838601615172565b85820152809550505050505092915050565b805160408084528151848201819052600092602091908201906060870190855b8181101561540057835180516001600160a01b031684528501516001600160e01b03168584015292840192918501916001016153c9565b50508583015187820388850152805180835290840192506000918401905b8083101561545a578351805167ffffffffffffffff1683528501516001600160e01b03168583015292840192600192909201919085019061541e565b50979650505050505050565b602081526000610d0960208301846153a9565b60006020828403121561548b57600080fd5b8151613ef381614114565b67ffffffffffffffff8316815260608101613ef36020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115615502576155026154cb565b5092915050565b60006020808352606084516040808487015261552860608701836153a9565b87850151878203601f19016040890152805180835290860193506000918601905b808310156142bd57845167ffffffffffffffff81511683528781015161558889850182805167ffffffffffffffff908116835260209182015116910152565b50840151828701529386019360019290920191608090910190615549565b6000602082840312156155b857600080fd5b813567ffffffffffffffff8111156155cf57600080fd5b6137e784828501614711565b81810381811115610d0c57610d0c6154cb565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff8084168061561f5761561f6155ee565b92169190910692915050565b8082028115828204841417610d0c57610d0c6154cb565b805182526000602067ffffffffffffffff81840151168185015260408084015160a0604087015261567660a0870182614986565b90506060850151868203606088015261568f8282614986565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561545a57835180516001600160a01b03168352860151868301529285019260019290920191908401906156b2565b602081526000610d096020830184615642565b60808152600061570a6080830187615642565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561574857600080fd5b835161575381614114565b602085015190935067ffffffffffffffff81111561577057600080fd5b8401601f8101861361578157600080fd5b805161578f6141748261412d565b8181528760208385010111156157a457600080fd5b6157b5826020830160208601614962565b809450505050604084015190509250925092565b6000604082840312156157db57600080fd5b6157e3614047565b6157ec836140f7565b8152602083013560208201528091505092915050565b600181811c9082168061581657607f821691505b60208210810361583657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610780576000816000526020600020601f850160051c810160208610156158655750805b601f850160051c820191505b8181101561588457828155600101615871565b505050505050565b815167ffffffffffffffff8111156158a6576158a6613fc2565b6158ba816158b48454615802565b8461583c565b602080601f8311600181146158ef57600084156158d75750858301515b600019600386901b1c1916600185901b178555615884565b600085815260208120601f198616915b8281101561591e578886015182559484019460019091019084016158ff565b508582101561593c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c1660608501525060018085016080808601526000815461599e81615802565b8060a089015260c060018316600081146159bf57600181146159db57615a0b565b60ff19841660c08b015260c083151560051b8b01019450615a0b565b85600052602060002060005b84811015615a025781548c82018501529088019089016159e7565b8b0160c0019550505b50929998505050505050505050565b80820180821115610d0c57610d0c6154cb565b60ff8181168382160190811115610d0c57610d0c6154cb565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff80841680615a8557615a856155ee565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615ac657600080fd5b83018035915067ffffffffffffffff821115615ae157600080fd5b60200191503681900382131561395a57600080fd5b6020810160058310615b0a57615b0a614b97565b91905290565b60ff8181168382160290811690818114615502576155026154cb565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b845784546001600160a01b031683526001948501949284019201615b5f565b50508481036060860152865180825290820192508187019060005b81811015615bc45782516001600160a01b031685529383019391830191600101615b9f565b50505060ff851660808501525090506120b8565b600067ffffffffffffffff808616835280851660208401525060606040830152614dcb6060830184614986565b8281526040602082015260006137e76040830184614986565b67ffffffffffffffff848116825283166020820152606081016137e76040830184614bad565b848152615c546020820185614bad565b608060408201526000615c6a6080830185614986565b905082606083015295945050505050565b600060208284031215615c8d57600080fd5b8151613ef3816140e2565b6020815260008251610100806020850152615cb7610120850183614986565b91506020850151615cd4604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d0e60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d2b8483614986565b935060c08701519150808685030160e0870152615d488483614986565b935060e08701519150808685030183870152506120b88382614986565b600060208284031215615d7757600080fd5b5051919050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526120b86080830184614986565b86815260c060208201526000615dca60c0830188614986565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615eb657601f19868403018952815160a08151818652615e4782870182614986565b9150508582015185820387870152615e5f8282614986565b91505060408083015186830382880152615e798382614986565b92505050606080830151818701525060808083015192508582038187015250615ea28183614986565b9a86019a9450505090830190600101615e21565b5090979650505050505050565b602081526000610d096020830184615e04565b60008282518085526020808601955060208260051b8401016020860160005b84811015615eb657601f19868403018952615f11838351614986565b98840198925090830190600101615ef5565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615f8b610180850183614986565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615fc88483614986565b935060608801519150615fe76101208701836001600160a01b03169052565b60808801518387015260a088015192508086850301610160870152505061600e8282615e04565b9150508281036020840152614dcb8185615ed656fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI @@ -1793,6 +1793,123 @@ func (_OffRamp *OffRampFilterer) ParseSkippedAlreadyExecutedMessage(log types.Lo return event, nil } +type OffRampSkippedReportExecutionIterator struct { + Event *OffRampSkippedReportExecution + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampSkippedReportExecutionIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampSkippedReportExecution) + 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(OffRampSkippedReportExecution) + 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 *OffRampSkippedReportExecutionIterator) Error() error { + return it.fail +} + +func (it *OffRampSkippedReportExecutionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampSkippedReportExecution struct { + SourceChainSelector uint64 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterSkippedReportExecution(opts *bind.FilterOpts) (*OffRampSkippedReportExecutionIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SkippedReportExecution") + if err != nil { + return nil, err + } + return &OffRampSkippedReportExecutionIterator{contract: _OffRamp.contract, event: "SkippedReportExecution", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchSkippedReportExecution(opts *bind.WatchOpts, sink chan<- *OffRampSkippedReportExecution) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SkippedReportExecution") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampSkippedReportExecution) + if err := _OffRamp.contract.UnpackLog(event, "SkippedReportExecution", 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 (_OffRamp *OffRampFilterer) ParseSkippedReportExecution(log types.Log) (*OffRampSkippedReportExecution, error) { + event := new(OffRampSkippedReportExecution) + if err := _OffRamp.contract.UnpackLog(event, "SkippedReportExecution", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + type OffRampSourceChainConfigSetIterator struct { Event *OffRampSourceChainConfigSet @@ -2304,6 +2421,8 @@ func (_OffRamp *OffRamp) ParseLog(log types.Log) (generated.AbigenLog, error) { return _OffRamp.ParseRootRemoved(log) case _OffRamp.abi.Events["SkippedAlreadyExecutedMessage"].ID: return _OffRamp.ParseSkippedAlreadyExecutedMessage(log) + case _OffRamp.abi.Events["SkippedReportExecution"].ID: + return _OffRamp.ParseSkippedReportExecution(log) case _OffRamp.abi.Events["SourceChainConfigSet"].ID: return _OffRamp.ParseSourceChainConfigSet(log) case _OffRamp.abi.Events["SourceChainSelectorAdded"].ID: @@ -2354,6 +2473,10 @@ func (OffRampSkippedAlreadyExecutedMessage) Topic() common.Hash { return common.HexToHash("0x3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c") } +func (OffRampSkippedReportExecution) Topic() common.Hash { + return common.HexToHash("0xaab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d894933") +} + func (OffRampSourceChainConfigSet) Topic() common.Hash { return common.HexToHash("0x49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b") } @@ -2471,6 +2594,12 @@ type OffRampInterface interface { ParseSkippedAlreadyExecutedMessage(log types.Log) (*OffRampSkippedAlreadyExecutedMessage, error) + FilterSkippedReportExecution(opts *bind.FilterOpts) (*OffRampSkippedReportExecutionIterator, error) + + WatchSkippedReportExecution(opts *bind.WatchOpts, sink chan<- *OffRampSkippedReportExecution) (event.Subscription, error) + + ParseSkippedReportExecution(log types.Log) (*OffRampSkippedReportExecution, error) + FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*OffRampSourceChainConfigSetIterator, error) WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainConfigSet, sourceChainSelector []uint64) (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 d0be78aeaa..77f04c61c6 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 @@ -23,7 +23,7 @@ multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRate 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 ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 263df151d037af19cc412a051efb82993b0ccdde0184c598e3669f1326ab4ce9 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 136ae93018723f03d695f60348231d58cacf53e4de2016fa6e638eba7bd64af7 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin c3b345930e1a553b18553e18a5c0ff8df3c372118fdf78a176aaccb1891664bb ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2