From 97dca817219ddcf03428c0b9f209976751ec55e9 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 3 Dec 2025 22:22:46 +0530 Subject: [PATCH 01/16] implement backward compatability --- .../pools/Lombard/LombardTokenPool.sol | 187 ++++++++++++++++-- 1 file changed, 175 insertions(+), 12 deletions(-) diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index 0f431a6daf..b681e49ed5 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -1,8 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import {ICrossChainVerifierResolver} from "../../interfaces/ICrossChainVerifierResolver.sol"; +import {IBridgeV2} from "./interfaces/IBridgeV2.sol"; +import {IMailbox} from "./interfaces/IMailbox.sol"; import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; +import {ICrossChainVerifierResolver} from "../../interfaces/ICrossChainVerifierResolver.sol"; import {Pool} from "../../libraries/Pool.sol"; import {TokenPool} from "../TokenPool.sol"; @@ -16,34 +18,79 @@ import {SafeERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/utils/SafeERC /// the pool performs validation, rate limiting, accounting and event emission. /// IPoolV2.lockOrBurn forwards tokens to the verifier. /// IPoolV2.releaseOrMint does not move tokens, _releaseOrMint is a no-op. -/// TODO: Add explicit V1 support/backwards compatibility. +/// IPoolV1.lockOrBurn and IPoolV1.releaseOrMint make this pool backwards compatible with old lanes. contract LombardTokenPool is TokenPool, ITypeAndVersion { using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; error ZeroVerifierNotAllowed(); error OutboundImplementationNotFoundForVerifier(); + error ZeroBridge(); + error ZeroLombardChainId(); + error PathNotExist(uint64 remoteChainSelector); + error InvalidMessageVersion(uint8 expected, uint8 received); + error RemoteTokenMismatch(bytes32 bridge, bytes32 pool); + error InvalidReceiver(bytes receiver); + error ChainNotSupported(uint64 remoteChainSelector); + error InvalidAllowedCaller(bytes allowedCaller); + error ExecutionError(); + error HashMismatch(); + + /// @param remoteChainSelector CCIP selector of destination chain + /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion + /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message + event PathSet(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); + /// @param remoteChainSelector CCIP selector of destination chain + /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion + /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message + event PathRemoved(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); + event LombardConfigurationSet(address indexed verifier, address indexed bridge, address indexed tokenAdapter); - event LombardVerifierSet(address indexed verifier); + struct Path { + /// @notice The address that's allowed to call the bridge on the destination chain. + bytes32 allowedCaller; + /// @notice Lombard chain id of destination chain. + bytes32 lChainId; + } string public constant override typeAndVersion = "LombardTokenPool 1.7.0-dev"; + /// @notice Supported bridge message version. + uint8 internal constant SUPPORTED_BRIDGE_MSG_VERSION = 1; + /// @notice The address of bridge contract. + IBridgeV2 public immutable i_bridge; /// @notice Lombard verifier proxy / resolver address. lockOrBurn fetches the outbound implementation and forwards tokens to it. address private immutable i_lombardVerifierResolver; + /// @notice Optional token adapter used for chains like Avalanche BTC.b. + address public s_tokenAdapter; + /// @notice Mapping of CCIP chain selector to chain specific config. + mapping(uint64 chainSelector => Path path) internal s_chainSelectorToPath; + constructor( IERC20Metadata token, address verifier, + IBridgeV2 bridge, + address adapter, address advancedPoolHooks, address rmnProxy, address router, uint8 fallbackDecimals ) TokenPool(token, _getTokenDecimals(token, fallbackDecimals), advancedPoolHooks, rmnProxy, router) { + if (address(bridge) == address(0)) { + revert ZeroBridge(); + } + uint8 bridgeMsgVersion = bridge.MSG_VERSION(); + if (bridgeMsgVersion != SUPPORTED_BRIDGE_MSG_VERSION) { + revert InvalidMessageVersion(SUPPORTED_BRIDGE_MSG_VERSION, bridgeMsgVersion); + } if (verifier == address(0)) { revert ZeroVerifierNotAllowed(); } + i_bridge = bridge; i_lombardVerifierResolver = verifier; - emit LombardVerifierSet(verifier); + s_tokenAdapter = adapter; + emit LombardConfigurationSet(verifier, address(bridge), adapter); } // ================================================================ @@ -68,21 +115,137 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { } function lockOrBurn( - Pool.LockOrBurnInV1 calldata - ) public pure override(TokenPool) returns (Pool.LockOrBurnOutV1 memory lockOrBurnOut) { - // TODO: Implement V1 path for backward compatability with old lanes. - return lockOrBurnOut; + Pool.LockOrBurnInV1 calldata lockOrBurnIn + ) public override(TokenPool) returns (Pool.LockOrBurnOutV1 memory lockOrBurnOut) { + _validateLockOrBurn(lockOrBurnIn, WAIT_FOR_FINALITY, ""); + + Path memory path = s_chainSelectorToPath[lockOrBurnIn.remoteChainSelector]; + if (path.allowedCaller == bytes32(0)) { + revert PathNotExist(lockOrBurnIn.remoteChainSelector); + } + + address sourceTokenOrAdapter = s_tokenAdapter != address(0) ? s_tokenAdapter : address(i_token); + // verify bridge destination token equal to pool + bytes32 bridgeDestToken = i_bridge.getAllowedDestinationToken(path.lChainId, sourceTokenOrAdapter); + bytes32 poolDestToken = abi.decode(getRemoteToken(lockOrBurnIn.remoteChainSelector), (bytes32)); + if (bridgeDestToken != poolDestToken) { + revert RemoteTokenMismatch(bridgeDestToken, poolDestToken); + } + + if (lockOrBurnIn.receiver.length != 32) { + revert InvalidReceiver(lockOrBurnIn.receiver); + } + + (, bytes32 payloadHash) = i_bridge.deposit({ + destinationChain: path.lChainId, + token: sourceTokenOrAdapter, + sender: lockOrBurnIn.originalSender, + recipient: abi.decode(lockOrBurnIn.receiver, (bytes32)), + amount: lockOrBurnIn.amount, + destinationCaller: path.allowedCaller, + payload: "" + }); + + emit LockedOrBurned({ + remoteChainSelector: lockOrBurnIn.remoteChainSelector, + token: address(i_token), + sender: lockOrBurnIn.originalSender, + amount: lockOrBurnIn.amount + }); + + return Pool.LockOrBurnOutV1({ + destTokenAddress: getRemoteToken(lockOrBurnIn.remoteChainSelector), + destPoolData: abi.encode(payloadHash) + }); } // ================================================================ // │ Release or Mint │ // ================================================================ + /// @notice Backwards compatible releaseOrMint for CCIP 1.5/1.6 lanes. Verifies the bridge payload proof. function releaseOrMint( - Pool.ReleaseOrMintInV1 calldata - ) public pure override(TokenPool) returns (Pool.ReleaseOrMintOutV1 memory releaseOrMintOut) { - // TODO: Implement V1 path for backward compatability with old lanes. - return releaseOrMintOut; + Pool.ReleaseOrMintInV1 calldata releaseOrMintIn + ) public virtual override returns (Pool.ReleaseOrMintOutV1 memory) { + _validateReleaseOrMint(releaseOrMintIn, releaseOrMintIn.sourceDenominatedAmount, WAIT_FOR_FINALITY); + + (bytes memory rawPayload, bytes memory proof) = abi.decode(releaseOrMintIn.offchainTokenData, (bytes, bytes)); + + (bytes32 payloadHash, bool executed,) = IMailbox(i_bridge.mailbox()).deliverAndHandle(rawPayload, proof); + if (!executed) { + revert ExecutionError(); + } + // we know payload hash returned on source chain + if (payloadHash != abi.decode(releaseOrMintIn.sourcePoolData, (bytes32))) { + revert HashMismatch(); + } + + emit ReleasedOrMinted({ + remoteChainSelector: releaseOrMintIn.remoteChainSelector, + token: address(i_token), + sender: msg.sender, + recipient: releaseOrMintIn.receiver, + amount: releaseOrMintIn.sourceDenominatedAmount + }); + + return Pool.ReleaseOrMintOutV1({destinationAmount: releaseOrMintIn.sourceDenominatedAmount}); + } + + // ================================================================ + // │ Path config │ + // ================================================================ + + /// @notice Gets the path for a given CCIP chain selector. + /// @param remoteChainSelector CCIP chain selector of remote chain. + /// @return Path struct containing lChainId and allowedCaller. + function getPath( + uint64 remoteChainSelector + ) external view returns (Path memory) { + return s_chainSelectorToPath[remoteChainSelector]; + } + + /// @notice Sets the Lombard chain id and allowed caller for a CCIP chain selector. + /// @param remoteChainSelector CCIP chain selector of remote chain. + /// @param lChainId Lombard chain id of remote chain. + /// @param allowedCaller The address of TokenPool on destination chain. + function setPath(uint64 remoteChainSelector, bytes32 lChainId, bytes calldata allowedCaller) external onlyOwner { + if (!isSupportedChain(remoteChainSelector)) { + revert ChainNotSupported(remoteChainSelector); + } + + if (lChainId == bytes32(0)) { + revert ZeroLombardChainId(); + } + + // only remote pool is expected allowed caller + if (!isRemotePool(remoteChainSelector, allowedCaller)) { + revert InvalidRemotePoolForChain(remoteChainSelector, allowedCaller); + } + + if (allowedCaller.length != 32) { + revert InvalidAllowedCaller(allowedCaller); + } + bytes32 decodedAllowedCaller = abi.decode(allowedCaller, (bytes32)); + + s_chainSelectorToPath[remoteChainSelector] = Path({lChainId: lChainId, allowedCaller: decodedAllowedCaller}); + + emit PathSet(remoteChainSelector, lChainId, decodedAllowedCaller); + } + + /// @notice Removes path mapping for a destination chain. + /// @param remoteChainSelector CCIP chain selector of destination chain. + function removePath( + uint64 remoteChainSelector + ) external onlyOwner { + Path memory path = s_chainSelectorToPath[remoteChainSelector]; + + if (path.allowedCaller == bytes32(0)) { + revert PathNotExist(remoteChainSelector); + } + + delete s_chainSelectorToPath[remoteChainSelector]; + + emit PathRemoved(remoteChainSelector, path.lChainId, path.allowedCaller); } // ================================================================ From f304f2e0ef68acf0b7ff0951d397f91c8f65bc25 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 3 Dec 2025 22:23:00 +0530 Subject: [PATCH 02/16] fix existing tests --- chains/evm/.gas-snapshot | 8 +- .../pools/Lombard/interfaces/IBridgeV2.sol | 60 ++++++++++++++ .../pools/Lombard/interfaces/IMailbox.sol | 61 +++++++++++++++ .../test/helpers/LombardTokenPoolHelper.sol | 7 +- .../test/mocks/MockLombardBridgeV2.sol | 78 +++++++++++++++++++ .../LombardTokenPool._getTokenDecimals.t.sol | 16 +++- .../LombardTokenPool.constructor.t.sol | 24 +++++- .../LombardTokenPoolSetup.t.sol | 13 +++- 8 files changed, 256 insertions(+), 11 deletions(-) create mode 100644 chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol create mode 100644 chains/evm/contracts/pools/Lombard/interfaces/IMailbox.sol create mode 100644 chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index 12fbb266e9..b9ce3fbb42 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -259,11 +259,13 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21811) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97332) -LombardTokenPool_constructor:test_constructor() (gas: 3954838) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 92001) +LombardTokenPool_constructor:test_constructor() (gas: 4501680) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 555820) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95224) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98417) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12070) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14385) -LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247098) +LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247216) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_MaxLengthFields() (gas: 436236) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithData() (gas: 57857) diff --git a/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol b/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol new file mode 100644 index 0000000000..48fe4c1747 --- /dev/null +++ b/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/// @custom:security-contact legal@lombard.finance +interface IBridgeV2 { + error BridgeV2_ZeroAmount(); + error BridgeV2_ZeroRecipient(); + error BridgeV2_InvalidRecipient(); + error BridgeV2_ZeroPath(); + error BridgeV2_ZeroBridge(); + error BridgeV2_ZeroChainId(); + error BridgeV2_ZeroSender(); + error BridgeV2_ZeroToken(); + error BridgeV2_InvalidToken(); + error BridgeV2_ZeroMailbox(); + error BridgeV2_AlreadyAllowed(bytes32 tokenId); + error BridgeV2_TokenNotAllowed(); + error BridgeV2_PathNotAllowed(); + error BridgeV2_MailboxExpected(); + error BridgeV2_BadMsgSender(); + error BridgeV2_SenderNotWhitelisted(address); + error BridgeV2_VersionMismatch(uint8 expected, uint8 actual); + error BridgeV2_InvalidMsgBodyLength(uint256 expected, uint256 actual); + error BridgeV2_PayloadSpent(); + error BridgeV2_NotEnoughFee(uint256 expected, uint256 actual); + error BridgeV2_TooBigDiscount(); + + event DestinationBridgeSet(bytes32 indexed destinationChain, bytes32 indexed destinationBridge); + event DestinationTokenAdded( + bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken + ); + event DestinationTokenRemoved( + bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken + ); + event RateLimitsSet(address indexed token, bytes32 indexed sourceChainId, uint256 limit, uint256 window); + + event SenderConfigChanged(address indexed sender, uint32 feeDiscount, bool whitelisted); + + /// @notice Emitted when the is a deposit in the bridge + event DepositToBridge(address indexed fromAddress, bytes32 indexed toAddress, bytes32 indexed payloadHash); + + /// @notice Emitted when a withdraw is made from the bridge + event WithdrawFromBridge(address indexed recipient, bytes32 indexed chainId, address indexed token, uint256 amount); + + function mailbox() external view returns (address); + + function MSG_VERSION() external view returns (uint8); + + function deposit( + bytes32 destinationChain, + address token, + address sender, + bytes32 recipient, + uint256 amount, + bytes32 destinationCaller, + bytes calldata payload + ) external payable returns (uint256, bytes32); + + function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32); +} diff --git a/chains/evm/contracts/pools/Lombard/interfaces/IMailbox.sol b/chains/evm/contracts/pools/Lombard/interfaces/IMailbox.sol new file mode 100644 index 0000000000..7fe417c73c --- /dev/null +++ b/chains/evm/contracts/pools/Lombard/interfaces/IMailbox.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +interface IMailbox { + error Mailbox_ZeroChainId(); + error Mailbox_ZeroConsortium(); + error Mailbox_ZeroMailbox(); + error Mailbox_ZeroRecipient(); + error Mailbox_ZeroAmount(); + error Mailbox_MessagePathEnabled(bytes32 id); + error Mailbox_MessagePathDisabled(bytes32 id); + error Mailbox_UnexpectedDestinationCaller(address expected, address actual); + error Mailbox_HandlerNotImplemented(); + error Mailbox_PayloadOversize(uint32 max, uint256 actual); + error Mailbox_NotEnoughFee(uint256 expected, uint256 actual); + error Mailbox_CallFailed(); + + event MessagePathEnabled( + bytes32 indexed destinationChain, + bytes32 indexed inboundMessagePath, + bytes32 indexed outboundMessagePath, + bytes32 destinationMailbox + ); + + event MessagePathDisabled( + bytes32 indexed destinationChain, + bytes32 indexed inboundMessagePath, + bytes32 indexed outboundMessagePath, + bytes32 destinationMailbox + ); + + event MessageSent( + bytes32 indexed destinationLChainId, address indexed msgSender, bytes32 indexed recipient, bytes payload + ); + + /// Message payment receipt + event MessagePaid(bytes32 indexed payloadHash, address indexed msgSender, uint256 payloadSize, uint256 value); + + event MessageDelivered( + bytes32 indexed payloadHash, address indexed caller, uint256 indexed nonce, bytes32 msgSender, bytes payload + ); + + event MessageHandled(bytes32 indexed payloadHash, address indexed destinationCaller, bytes executionResult); + + event MessageHandleError( + bytes32 indexed payloadHash, address indexed destinationCaller, string reason, bytes customError + ); + + event SenderConfigUpdated(address indexed sender, uint64 maxPayloadSize, bool feeDisabled); + + event DefaultPayloadSizeSet(uint64 maxPayloadSize); + + event FeePerByteSet(uint256 fee); + + event FeeWithdrawn(address indexed treasury, uint256 amount); + + function deliverAndHandle( + bytes calldata rawPayload, + bytes calldata proof + ) external returns (bytes32, bool, bytes memory); +} diff --git a/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol b/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol index c9a4f23760..cb4a7465ff 100644 --- a/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol +++ b/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; +import {IBridgeV2} from "../../pools/Lombard/interfaces/IBridgeV2.sol"; + import {LombardTokenPool} from "../../pools/Lombard/LombardTokenPool.sol"; import {IERC20Metadata} from "@openzeppelin/contracts@4.8.3/token/ERC20/extensions/IERC20Metadata.sol"; @@ -8,10 +10,13 @@ contract LombardTokenPoolHelper is LombardTokenPool { constructor( IERC20Metadata token, address verifier, + IBridgeV2 bridge, + address adapter, + address advancedPoolHooks, address rmnProxy, address router, uint8 fallbackDecimals - ) LombardTokenPool(token, verifier, address(0), rmnProxy, router, fallbackDecimals) {} + ) LombardTokenPool(token, verifier, bridge, adapter, advancedPoolHooks, rmnProxy, router, fallbackDecimals) {} function getTokenDecimals(IERC20Metadata token, uint8 fallbackDecimals) external view returns (uint8) { return _getTokenDecimals(token, fallbackDecimals); diff --git a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol b/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol new file mode 100644 index 0000000000..9efd79ebec --- /dev/null +++ b/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {IBridgeV2} from "../../pools/Lombard/interfaces/IBridgeV2.sol"; + +// solhint-disable func-name-mixedcase + +contract MockLombardBridgeV2 is IBridgeV2 { + struct DepositArgs { + bytes32 destinationChain; + address token; + address sender; + bytes32 recipient; + uint256 amount; + bytes32 destinationCaller; + bytes payload; + } + + uint8 internal immutable i_msgVersion; + address internal s_mailbox; + uint256 internal s_nextNonce = 1; + + DepositArgs public s_lastDeposit; + mapping(bytes32 destinationChain => mapping(address sourceToken => bytes32 destinationToken)) internal + s_allowedDestinationTokens; + + constructor(uint8 msgVersion, address mailbox_) { + i_msgVersion = msgVersion; + s_mailbox = mailbox_; + } + + function setMailbox( + address mailbox_ + ) external { + s_mailbox = mailbox_; + } + + function setAllowedDestinationToken(bytes32 destinationChain, address sourceToken, bytes32 destinationToken) external { + s_allowedDestinationTokens[destinationChain][sourceToken] = destinationToken; + } + + function MSG_VERSION() external view returns (uint8) { + return i_msgVersion; + } + + function mailbox() external view returns (address) { + return s_mailbox; + } + + function deposit( + bytes32 destinationChain, + address token, + address sender, + bytes32 recipient, + uint256 amount, + bytes32 destinationCaller, + bytes calldata payload + ) external payable returns (uint256 nonce, bytes32 payloadHash) { + s_lastDeposit = DepositArgs({ + destinationChain: destinationChain, + token: token, + sender: sender, + recipient: recipient, + amount: amount, + destinationCaller: destinationCaller, + payload: payload + }); + + nonce = s_nextNonce++; + payloadHash = + keccak256(abi.encode(destinationChain, token, sender, recipient, amount, destinationCaller, payload, nonce)); + return (nonce, payloadHash); + } + + function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32) { + return s_allowedDestinationTokens[destinationChain][sourceToken]; + } +} diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol index 7b3cc12f43..92f80e699d 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol @@ -3,6 +3,8 @@ pragma solidity ^0.8.24; import {BaseTest} from "../../BaseTest.t.sol"; import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; + +import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {BurnMintERC20} from "@chainlink/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol"; @@ -12,14 +14,24 @@ contract LombardTokenPool_getTokenDecimals is BaseTest { BurnMintERC20 internal s_token; LombardTokenPoolHelper internal s_helper; MockVerifier internal s_resolver; + MockLombardBridgeV2 internal s_bridge; address internal constant VERIFIER = address(0xBEEF); function setUp() public override { super.setUp(); s_token = new BurnMintERC20("Lombard", "LBD", 18, 0, 0); s_resolver = new MockVerifier(""); - s_helper = - new LombardTokenPoolHelper(s_token, address(s_resolver), address(s_mockRMNRemote), address(s_sourceRouter), 18); + s_bridge = new MockLombardBridgeV2(1, address(0)); + s_helper = new LombardTokenPoolHelper( + s_token, + address(s_resolver), + s_bridge, + address(0), + address(0), + address(s_mockRMNRemote), + address(s_sourceRouter), + 18 + ); } function test_getTokenDecimals_UsesTokenDecimals() public view { diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol index e5d795a41d..2f44338a1c 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.24; import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; +import {IBridgeV2} from "../../../pools/Lombard/interfaces/IBridgeV2.sol"; + +import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {BurnMintERC20} from "@chainlink/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol"; import {Test} from "forge-std/Test.sol"; contract LombardTokenPool_constructor is Test { BurnMintERC20 internal s_token; + MockLombardBridgeV2 internal s_bridge; address internal s_resolver; address internal constant RMN = address(0xAA01); address internal constant ROUTER = address(0xBB02); @@ -15,18 +19,30 @@ contract LombardTokenPool_constructor is Test { function setUp() public { s_token = new BurnMintERC20("Lombard", "LBD", 18, 0, 0); s_resolver = address(new MockVerifier("")); + s_bridge = new MockLombardBridgeV2(1, address(0)); } function test_constructor() public { - vm.expectEmit(); - emit LombardTokenPool.LombardVerifierSet(s_resolver); - LombardTokenPool pool = new LombardTokenPool(s_token, s_resolver, address(0), RMN, ROUTER, 18); + // vm.expectEmit(); + // emit LombardTokenPool.LombardVerifierSet(s_resolver); + LombardTokenPool pool = new LombardTokenPool(s_token, s_resolver, s_bridge, address(0), address(0), RMN, ROUTER, 18); assertEq(pool.getVerifierResolver(), address(s_resolver)); assertEq(pool.typeAndVersion(), "LombardTokenPool 1.7.0-dev"); } function test_constructor_ZeroVerifierNotAllowed() public { vm.expectRevert(LombardTokenPool.ZeroVerifierNotAllowed.selector); - new LombardTokenPool(s_token, address(0), address(0), RMN, ROUTER, 18); + new LombardTokenPool(s_token, address(0), s_bridge, address(0), address(0), RMN, ROUTER, 18); + } + + function test_constructor_RevertsWhen_InvalidBridgeVersion() public { + MockLombardBridgeV2 wrongVersionBridge = new MockLombardBridgeV2(2, address(0)); + vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.InvalidMessageVersion.selector, 1, 2)); + new LombardTokenPool(s_token, s_resolver, wrongVersionBridge, address(0), address(0), RMN, ROUTER, 18); + } + + function test_constructor_RevertsWhen_ZeroBridge() public { + vm.expectRevert(LombardTokenPool.ZeroBridge.selector); + new LombardTokenPool(s_token, s_resolver, IBridgeV2(address(0)), address(0), address(0), RMN, ROUTER, 18); } } diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol index fbb23d53cf..12f2e49604 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol @@ -4,12 +4,15 @@ pragma solidity ^0.8.24; import {Router} from "../../../Router.sol"; import {TokenPool} from "../../../pools/TokenPool.sol"; import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; + +import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {TokenPoolSetup} from "../TokenPool/TokenPoolSetup.t.sol"; contract LombardTokenPoolSetup is TokenPoolSetup { LombardTokenPoolHelper internal s_pool; MockVerifier internal s_verifierResolver; + MockLombardBridgeV2 internal s_bridge; address internal constant VERIFIER_IMPL = address(0x2345); address internal s_remotePool = makeAddr("remotePool"); address internal s_remoteToken = makeAddr("remoteToken"); @@ -18,9 +21,17 @@ contract LombardTokenPoolSetup is TokenPoolSetup { super.setUp(); s_verifierResolver = new MockVerifier(""); + s_bridge = new MockLombardBridgeV2(1, address(0)); s_pool = new LombardTokenPoolHelper( - s_token, address(s_verifierResolver), address(s_mockRMNRemote), address(s_sourceRouter), DEFAULT_TOKEN_DECIMALS + s_token, + address(s_verifierResolver), + s_bridge, + address(0), + address(0), + address(s_mockRMNRemote), + address(s_sourceRouter), + DEFAULT_TOKEN_DECIMALS ); // Configure remote chain. From b630d8ff46ac94a3b63f384d660d9feeb4cc72e2 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 14:01:17 +0530 Subject: [PATCH 03/16] minor fixes + add comments --- .../pools/Lombard/LombardTokenPool.sol | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index b681e49ed5..6ff984ca06 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; +import {ICrossChainVerifierResolver} from "../../interfaces/ICrossChainVerifierResolver.sol"; import {IBridgeV2} from "./interfaces/IBridgeV2.sol"; import {IMailbox} from "./interfaces/IMailbox.sol"; import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; -import {ICrossChainVerifierResolver} from "../../interfaces/ICrossChainVerifierResolver.sol"; import {Pool} from "../../libraries/Pool.sol"; import {TokenPool} from "../TokenPool.sol"; @@ -59,11 +59,12 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { uint8 internal constant SUPPORTED_BRIDGE_MSG_VERSION = 1; /// @notice The address of bridge contract. IBridgeV2 public immutable i_bridge; - /// @notice Lombard verifier proxy / resolver address. lockOrBurn fetches the outbound implementation and forwards tokens to it. - address private immutable i_lombardVerifierResolver; + /// @notice Lombard verifier resolver address. lockOrBurn fetches the outbound implementation and forwards tokens to it. + address internal immutable i_lombardVerifierResolver; + /// @notice Optional token adapter used for chains like Avalanche BTC.b. Since each pool manages a single token, + /// and the adapter is a source-chain-level replacement for that token, there can only be one adapter per pool. + address internal immutable i_tokenAdapter; - /// @notice Optional token adapter used for chains like Avalanche BTC.b. - address public s_tokenAdapter; /// @notice Mapping of CCIP chain selector to chain specific config. mapping(uint64 chainSelector => Path path) internal s_chainSelectorToPath; @@ -89,7 +90,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { } i_bridge = bridge; i_lombardVerifierResolver = verifier; - s_tokenAdapter = adapter; + i_tokenAdapter = adapter; emit LombardConfigurationSet(verifier, address(bridge), adapter); } @@ -114,6 +115,9 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { return super.lockOrBurn(lockOrBurnIn, blockConfirmationRequested, tokenArgs); } + /// @notice Backwards compatible lockOrBurn for lanes using the V1 flow. + /// @dev Token minting is performed by the Lombard bridge's mailbox during deliverAndHandle. + /// This pool only validates the proof and emits events; no _lockOrBurn call is needed. function lockOrBurn( Pool.LockOrBurnInV1 calldata lockOrBurnIn ) public override(TokenPool) returns (Pool.LockOrBurnOutV1 memory lockOrBurnOut) { @@ -124,7 +128,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { revert PathNotExist(lockOrBurnIn.remoteChainSelector); } - address sourceTokenOrAdapter = s_tokenAdapter != address(0) ? s_tokenAdapter : address(i_token); + address sourceTokenOrAdapter = i_tokenAdapter != address(0) ? i_tokenAdapter : address(i_token); // verify bridge destination token equal to pool bytes32 bridgeDestToken = i_bridge.getAllowedDestinationToken(path.lChainId, sourceTokenOrAdapter); bytes32 poolDestToken = abi.decode(getRemoteToken(lockOrBurnIn.remoteChainSelector), (bytes32)); @@ -175,7 +179,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { if (!executed) { revert ExecutionError(); } - // we know payload hash returned on source chain + // we know payload hash returned on source chain. if (payloadHash != abi.decode(releaseOrMintIn.sourcePoolData, (bytes32))) { revert HashMismatch(); } @@ -260,8 +264,11 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { } } - /// @notice Returns the verifier resolver address. - function getVerifierResolver() external view returns (address) { - return i_lombardVerifierResolver; + /// @notice Returns the Lombard-specific configuration for this pool. + /// @return verifierResolver The address of the Lombard verifier resolver. + /// @return bridge The address of the Lombard bridge contract. + /// @return tokenAdapter The optional token adapter address (address(0) if not used). + function getLombardConfig() external view returns (address verifierResolver, address bridge, address tokenAdapter) { + return (i_lombardVerifierResolver, address(i_bridge), i_tokenAdapter); } } From b53101d266a54046868699c4c3243e1667524c31 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 14:01:34 +0530 Subject: [PATCH 04/16] add mock contracts --- chains/evm/.gas-snapshot | 19 +++++--- .../interfaces/lombard/IBridgeV2.sol | 36 ++++++++++++++++ .../contracts/interfaces/lombard/IMailbox.sol | 16 +++++++ .../test/mocks/MockLombardBridgeV2.sol | 43 +++++-------------- .../evm/contracts/test/mocks/MockMailbox.sol | 29 +++++++++++++ 5 files changed, 104 insertions(+), 39 deletions(-) create mode 100644 chains/evm/contracts/interfaces/lombard/IBridgeV2.sol create mode 100644 chains/evm/contracts/interfaces/lombard/IMailbox.sol create mode 100644 chains/evm/contracts/test/mocks/MockMailbox.sol diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index b9ce3fbb42..b0aa8d9639 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -259,13 +259,18 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21811) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97332) -LombardTokenPool_constructor:test_constructor() (gas: 4501680) -LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 555820) -LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95224) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98417) -LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12070) -LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14385) -LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247216) +LombardTokenPool_constructor:test_constructor() (gas: 4527336) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 323898) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95305) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98499) +LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) +LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 315565) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5195862) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 247408) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 490553) +LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54568) +LombardTokenPool_setPath:test_setPath() (gas: 69366) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_MaxLengthFields() (gas: 436236) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithData() (gas: 57857) diff --git a/chains/evm/contracts/interfaces/lombard/IBridgeV2.sol b/chains/evm/contracts/interfaces/lombard/IBridgeV2.sol new file mode 100644 index 0000000000..93f5cc1c83 --- /dev/null +++ b/chains/evm/contracts/interfaces/lombard/IBridgeV2.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/// @notice Minimal Lombard bridge interface needed by the token pool and verifier. +interface IBridgeV2 { + /// @notice Message version supported by the bridge. + function MSG_VERSION() external view returns (uint8); + + /// @notice Address of the mailbox contract used to deliver payloads on the destination chain. + function mailbox() external view returns (address); + + /// @notice Returns the allowed destination token identifier for a given chain and local token. + /// @param destinationChainId Lombard chain identifier. + /// @param localToken Address of the token on the source chain (or adapter). + function getAllowedDestinationToken(bytes32 destinationChainId, address localToken) external view returns (bytes32); + + /// @notice Initiates a deposit into the Lombard bridge. + /// @param destinationChain Destination Lombard chain identifier. + /// @param token Token or adapter address on the source chain. + /// @param sender Sender address on the source chain. + /// @param recipient Recipient address on the destination chain, left padded to 32 bytes. + /// @param amount Amount of tokens to bridge. + /// @param destinationCaller Address allowed to handle the bridged payload on destination. + /// @param payload Optional opaque payload hashed by the bridge. + /// @return nonce Bridge-assigned deposit nonce. + /// @return payloadHash Hash of the payload emitted by the bridge. + function deposit( + bytes32 destinationChain, + address token, + address sender, + bytes32 recipient, + uint256 amount, + bytes32 destinationCaller, + bytes calldata payload + ) external returns (uint64 nonce, bytes32 payloadHash); +} diff --git a/chains/evm/contracts/interfaces/lombard/IMailbox.sol b/chains/evm/contracts/interfaces/lombard/IMailbox.sol new file mode 100644 index 0000000000..60af6d013e --- /dev/null +++ b/chains/evm/contracts/interfaces/lombard/IMailbox.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/// @notice Minimal interface to deliver and handle Lombard bridge payloads. +interface IMailbox { + /// @notice Verifies and executes a bridged payload. + /// @param payload Raw payload emitted on the source chain. + /// @param proof Bridging proof for the payload. + /// @return payloadHash Hash of the payload. + /// @return executed True if the payload was successfully handled. + /// @return returnData Optional data returned by the handler. + function deliverAndHandle( + bytes calldata payload, + bytes calldata proof + ) external returns (bytes32 payloadHash, bool executed, bytes memory returnData); +} diff --git a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol b/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol index 9efd79ebec..d219eb589d 100644 --- a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol +++ b/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol @@ -6,21 +6,12 @@ import {IBridgeV2} from "../../pools/Lombard/interfaces/IBridgeV2.sol"; // solhint-disable func-name-mixedcase contract MockLombardBridgeV2 is IBridgeV2 { - struct DepositArgs { - bytes32 destinationChain; - address token; - address sender; - bytes32 recipient; - uint256 amount; - bytes32 destinationCaller; - bytes payload; - } - uint8 internal immutable i_msgVersion; address internal s_mailbox; - uint256 internal s_nextNonce = 1; - DepositArgs public s_lastDeposit; + /// @dev Stores the token address from the last deposit call for test assertions. + address public s_lastDepositToken; + mapping(bytes32 destinationChain => mapping(address sourceToken => bytes32 destinationToken)) internal s_allowedDestinationTokens; @@ -48,28 +39,16 @@ contract MockLombardBridgeV2 is IBridgeV2 { } function deposit( - bytes32 destinationChain, + bytes32, // destinationChain address token, - address sender, - bytes32 recipient, - uint256 amount, - bytes32 destinationCaller, - bytes calldata payload + address, // sender + bytes32, // recipient + uint256, // amount + bytes32, // destinationCaller + bytes calldata // payload ) external payable returns (uint256 nonce, bytes32 payloadHash) { - s_lastDeposit = DepositArgs({ - destinationChain: destinationChain, - token: token, - sender: sender, - recipient: recipient, - amount: amount, - destinationCaller: destinationCaller, - payload: payload - }); - - nonce = s_nextNonce++; - payloadHash = - keccak256(abi.encode(destinationChain, token, sender, recipient, amount, destinationCaller, payload, nonce)); - return (nonce, payloadHash); + s_lastDepositToken = token; + return (1, keccak256(abi.encodePacked(block.timestamp, token))); } function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32) { diff --git a/chains/evm/contracts/test/mocks/MockMailbox.sol b/chains/evm/contracts/test/mocks/MockMailbox.sol new file mode 100644 index 0000000000..5eac9acb1e --- /dev/null +++ b/chains/evm/contracts/test/mocks/MockMailbox.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {IMailbox} from "../../pools/Lombard/interfaces/IMailbox.sol"; + +contract MockMailbox is IMailbox { + bytes32 internal s_payloadHash; + bool internal s_executed = true; + bytes internal s_executionResult; + + bytes public s_lastRawPayload; + bytes public s_lastProof; + + function setResult(bytes32 payloadHash, bool executed, bytes calldata executionResult) external { + s_payloadHash = payloadHash; + s_executed = executed; + s_executionResult = executionResult; + } + + function deliverAndHandle( + bytes calldata rawPayload, + bytes calldata proof + ) external returns (bytes32, bool, bytes memory) { + s_lastRawPayload = rawPayload; + s_lastProof = proof; + bytes32 payloadHash = s_payloadHash != bytes32(0) ? s_payloadHash : keccak256(rawPayload); + return (payloadHash, s_executed, s_executionResult); + } +} From 6e4ea500dc3a9298da920c9b096c5d3805e56771 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 14:01:51 +0530 Subject: [PATCH 05/16] update tests --- .../LombardTokenPool._lockOrBurn.t.sol | 60 ----- .../LombardTokenPool.constructor.t.sol | 11 +- .../LombardTokenPool.lockOrBurn.t.sol | 211 ++++++++++++++++++ .../LombardTokenPool.releaseOrMint.t.sol | 90 ++++++++ .../LombardTokenPool.setPath.t.sol | 47 ++++ .../LombardTokenPoolSetup.t.sol | 1 - .../LombardTokenPool_removePath.t.sol | 26 +++ 7 files changed, 381 insertions(+), 65 deletions(-) delete mode 100644 chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol create mode 100644 chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol create mode 100644 chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol create mode 100644 chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.setPath.t.sol create mode 100644 chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool_removePath.t.sol diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol deleted file mode 100644 index 084a10d8db..0000000000 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.24; - -import {Pool} from "../../../libraries/Pool.sol"; - -import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; -import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; - -contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { - function setUp() public virtual override { - super.setUp(); - vm.startPrank(s_allowedOnRamp); - } - - function test_lockOrBurn_ForwardsToVerifier() public { - uint256 amount = 1e18; - deal(address(s_token), address(s_pool), amount); - - (Pool.LockOrBurnOutV1 memory out, uint256 destAmount) = s_pool.lockOrBurn( - Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xDEAD)), - remoteChainSelector: DEST_CHAIN_SELECTOR, - originalSender: OWNER, - amount: amount, - localToken: address(s_token) - }), - 0, - "" - ); - - assertEq(destAmount, amount); - assertEq(out.destTokenAddress, abi.encode(s_remoteToken)); - assertEq(out.destPoolData, abi.encode(uint8(DEFAULT_TOKEN_DECIMALS))); - assertEq(s_token.balanceOf(s_verifierResolver.getOutboundImplementation(DEST_CHAIN_SELECTOR, "")), amount); - assertEq(s_token.balanceOf(address(s_pool)), 0); - } - - function test_lockOrBurn_RevertWhen_OutboundImplementationNotFoundForVerifier() public { - uint256 amount = 1e18; - deal(address(s_token), address(s_pool), amount); - vm.mockCall( - address(s_verifierResolver), - abi.encodeCall(s_verifierResolver.getOutboundImplementation, (DEST_CHAIN_SELECTOR, "")), - abi.encode(address(0)) - ); - - vm.expectRevert(LombardTokenPool.OutboundImplementationNotFoundForVerifier.selector); - s_pool.lockOrBurn( - Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xDEAD)), - remoteChainSelector: DEST_CHAIN_SELECTOR, - originalSender: OWNER, - amount: amount, - localToken: address(s_token) - }), - 0, - "" - ); - } -} diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol index 2f44338a1c..03b20f5111 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol @@ -23,10 +23,13 @@ contract LombardTokenPool_constructor is Test { } function test_constructor() public { - // vm.expectEmit(); - // emit LombardTokenPool.LombardVerifierSet(s_resolver); - LombardTokenPool pool = new LombardTokenPool(s_token, s_resolver, s_bridge, address(0), address(0), RMN, ROUTER, 18); - assertEq(pool.getVerifierResolver(), address(s_resolver)); + address adapter = makeAddr("adapter"); + LombardTokenPool pool = new LombardTokenPool(s_token, s_resolver, s_bridge, adapter, address(0), RMN, ROUTER, 18); + + (address verifierResolver, address bridge, address tokenAdapter) = pool.getLombardConfig(); + assertEq(verifierResolver, s_resolver); + assertEq(bridge, address(s_bridge)); + assertEq(tokenAdapter, adapter); assertEq(pool.typeAndVersion(), "LombardTokenPool 1.7.0-dev"); } diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol new file mode 100644 index 0000000000..6d9744e773 --- /dev/null +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol @@ -0,0 +1,211 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {Pool} from "../../../libraries/Pool.sol"; + +import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; +import {TokenPool} from "../../../pools/TokenPool.sol"; +import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; +import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; + +contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { + bytes32 internal constant L_CHAIN_ID = bytes32("LCHAIN"); + + function setUp() public virtual override { + super.setUp(); + vm.startPrank(s_allowedOnRamp); + } + + function test_lockOrBurn_V2_ForwardsToVerifier() public { + uint256 amount = 1e18; + deal(address(s_token), address(s_pool), amount); + + (Pool.LockOrBurnOutV1 memory out, uint256 destAmount) = s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encodePacked(address(0xDEAD)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: amount, + localToken: address(s_token) + }), + 0, + "" + ); + + assertEq(destAmount, amount); + assertEq(out.destTokenAddress, abi.encode(s_remoteToken)); + assertEq(out.destPoolData, abi.encode(uint8(DEFAULT_TOKEN_DECIMALS))); + assertEq(s_token.balanceOf(s_verifierResolver.getOutboundImplementation(DEST_CHAIN_SELECTOR, "")), amount); + assertEq(s_token.balanceOf(address(s_pool)), 0); + } + + function test_lockOrBurn_V1() public { + uint256 amount = 1e18; + deal(address(s_token), address(s_pool), amount); + + _configurePathAndBridgeRemoteToken(bytes32(uint256(uint160(s_remoteToken)))); + + vm.expectCall( + address(s_bridge), + abi.encodeCall( + s_bridge.deposit, + ( + L_CHAIN_ID, + address(s_token), + OWNER, + bytes32(uint256(uint160(address(0xDEAD)))), + amount, + bytes32(uint256(uint160(s_remotePool))), + "" + ) + ) + ); + + vm.expectEmit(); + emit TokenPool.LockedOrBurned({ + remoteChainSelector: DEST_CHAIN_SELECTOR, + token: address(s_token), + sender: OWNER, + amount: amount + }); + + Pool.LockOrBurnOutV1 memory out = s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encode(address(0xDEAD)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: amount, + localToken: address(s_token) + }) + ); + + assertEq(out.destTokenAddress, abi.encode(s_remoteToken)); + } + + function test_lockOrBurn_V1_UsesAdapterWhenConfigured() public { + address tokenAdapter = makeAddr("adapter"); + + changePrank(OWNER); + LombardTokenPoolHelper adapterPool = new LombardTokenPoolHelper( + s_token, + address(s_verifierResolver), + s_bridge, + tokenAdapter, + address(0), + address(s_mockRMNRemote), + address(s_sourceRouter), + DEFAULT_TOKEN_DECIMALS + ); + _applyChainUpdates(address(adapterPool)); + + bytes32 remoteTokenId = bytes32(uint256(uint160(s_initialRemoteToken))); + adapterPool.setPath(DEST_CHAIN_SELECTOR, L_CHAIN_ID, abi.encode(s_initialRemotePool)); + s_bridge.setAllowedDestinationToken(L_CHAIN_ID, tokenAdapter, remoteTokenId); + changePrank(s_allowedOnRamp); + + uint256 amount = 1e18; + deal(address(s_token), address(adapterPool), amount); + + vm.expectEmit(); + emit TokenPool.LockedOrBurned({ + remoteChainSelector: DEST_CHAIN_SELECTOR, + token: address(s_token), + sender: OWNER, + amount: amount + }); + + Pool.LockOrBurnOutV1 memory out = adapterPool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encode(address(0x9999)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: amount, + localToken: address(s_token) + }) + ); + + assertEq(out.destTokenAddress, abi.encode(s_initialRemoteToken)); + assertEq(s_bridge.s_lastDepositToken(), tokenAdapter); + } + + function test_lockOrBurn_V2_RevertWhen_OutboundImplementationNotFoundForVerifier() public { + uint256 amount = 1e18; + deal(address(s_token), address(s_pool), amount); + vm.mockCall( + address(s_verifierResolver), + abi.encodeCall(s_verifierResolver.getOutboundImplementation, (DEST_CHAIN_SELECTOR, "")), + abi.encode(address(0)) + ); + + vm.expectRevert(LombardTokenPool.OutboundImplementationNotFoundForVerifier.selector); + s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encodePacked(address(0xDEAD)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: amount, + localToken: address(s_token) + }), + 0, + "" + ); + } + + function test_lockOrBurn_V1_RevertWhen_PathNotExist() public { + vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.PathNotExist.selector, DEST_CHAIN_SELECTOR)); + s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encodePacked(address(0xBEEF)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: 1e18, + localToken: address(s_token) + }) + ); + } + + function test_lockOrBurn_V1_RevertWhen_InvalidReceiver() public { + _configurePathAndBridgeRemoteToken(bytes32(uint256(uint160(s_remoteToken)))); + + vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.InvalidReceiver.selector, hex"1234")); + s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: hex"1234", + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: 1e18, + localToken: address(s_token) + }) + ); + } + + function test_lockOrBurn_V1_RevertWhen_RemoteTokenMismatch() public { + _configurePathAndBridgeRemoteToken(bytes32("differentToken")); + + vm.expectRevert( + abi.encodeWithSelector( + LombardTokenPool.RemoteTokenMismatch.selector, + bytes32("differentToken"), + bytes32(uint256(uint160(s_remoteToken))) + ) + ); + s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encode(address(0xCAFE)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: 1e18, + localToken: address(s_token) + }) + ); + } + + function _configurePathAndBridgeRemoteToken( + bytes32 remoteTokenId + ) internal { + changePrank(OWNER); + s_pool.setPath(DEST_CHAIN_SELECTOR, L_CHAIN_ID, abi.encode(s_remotePool)); + s_bridge.setAllowedDestinationToken(L_CHAIN_ID, address(s_token), remoteTokenId); + changePrank(s_allowedOnRamp); + } +} diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol new file mode 100644 index 0000000000..618fc8ec4f --- /dev/null +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {Pool} from "../../../libraries/Pool.sol"; + +import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; +import {TokenPool} from "../../../pools/TokenPool.sol"; + +import {MockMailbox} from "../../mocks/MockMailbox.sol"; +import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; + +contract LombardTokenPool_releaseOrMint is LombardTokenPoolSetup { + function setUp() public virtual override { + super.setUp(); + vm.startPrank(s_allowedOffRamp); + } + + bytes32 internal constant PAYLOAD_HASH = bytes32("payload-hash"); + + function test_releaseOrMint_V1() public { + MockMailbox mailbox = new MockMailbox(); + mailbox.setResult(PAYLOAD_HASH, true, ""); + s_bridge.setMailbox(address(mailbox)); + + Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ + originalSender: abi.encodePacked(OWNER), + remoteChainSelector: DEST_CHAIN_SELECTOR, + receiver: address(0xBEEF), + sourceDenominatedAmount: 5e17, + localToken: address(s_token), + sourcePoolAddress: abi.encode(s_remotePool), + sourcePoolData: abi.encode(PAYLOAD_HASH), + offchainTokenData: abi.encode(bytes("rawPayload"), bytes("proof")) + }); + + vm.expectEmit(); + emit TokenPool.ReleasedOrMinted({ + remoteChainSelector: DEST_CHAIN_SELECTOR, + token: address(s_token), + sender: s_allowedOffRamp, + recipient: releaseOrMintIn.receiver, + amount: releaseOrMintIn.sourceDenominatedAmount + }); + + Pool.ReleaseOrMintOutV1 memory out = s_pool.releaseOrMint(releaseOrMintIn); + + assertEq(out.destinationAmount, releaseOrMintIn.sourceDenominatedAmount); + assertEq(mailbox.s_lastRawPayload(), bytes("rawPayload")); + } + + function test_releaseOrMint_V1_RevertWhen_ExecutionError() public { + MockMailbox mailbox = new MockMailbox(); + mailbox.setResult(PAYLOAD_HASH, false, ""); + s_bridge.setMailbox(address(mailbox)); + + Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ + originalSender: abi.encodePacked(OWNER), + remoteChainSelector: DEST_CHAIN_SELECTOR, + receiver: address(0xBEEF), + sourceDenominatedAmount: 1, + localToken: address(s_token), + sourcePoolAddress: abi.encode(s_remotePool), + sourcePoolData: abi.encode(PAYLOAD_HASH), + offchainTokenData: abi.encode(bytes("raw"), bytes("proof")) + }); + + vm.expectRevert(LombardTokenPool.ExecutionError.selector); + s_pool.releaseOrMint(releaseOrMintIn); + } + + function test_releaseOrMint_V1_RevertWhen_HashMismatch() public { + MockMailbox mailbox = new MockMailbox(); + mailbox.setResult(bytes32("different"), true, ""); + s_bridge.setMailbox(address(mailbox)); + + Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ + originalSender: abi.encodePacked(OWNER), + remoteChainSelector: DEST_CHAIN_SELECTOR, + receiver: address(0xBEEF), + sourceDenominatedAmount: 1, + localToken: address(s_token), + sourcePoolAddress: abi.encode(s_remotePool), + sourcePoolData: abi.encode(PAYLOAD_HASH), + offchainTokenData: abi.encode(bytes("raw"), bytes("proof")) + }); + + vm.expectRevert(LombardTokenPool.HashMismatch.selector); + s_pool.releaseOrMint(releaseOrMintIn); + } +} diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.setPath.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.setPath.t.sol new file mode 100644 index 0000000000..09717dd63d --- /dev/null +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.setPath.t.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; +import {TokenPool} from "../../../pools/TokenPool.sol"; +import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; + +contract LombardTokenPool_setPath is LombardTokenPoolSetup { + bytes32 internal constant L_CHAIN_ID = bytes32("LCHAIN"); + + function test_setPath() public { + bytes32 expectedAllowedCaller = bytes32(uint256(uint160(s_remotePool))); + + vm.expectEmit(); + emit LombardTokenPool.PathSet(DEST_CHAIN_SELECTOR, L_CHAIN_ID, expectedAllowedCaller); + s_pool.setPath(DEST_CHAIN_SELECTOR, L_CHAIN_ID, abi.encode(s_remotePool)); + + LombardTokenPool.Path memory path = s_pool.getPath(DEST_CHAIN_SELECTOR); + assertEq(path.lChainId, L_CHAIN_ID); + assertEq(path.allowedCaller, expectedAllowedCaller); + } + + function test_setPath_RevertWhen_ChainNotSupported() public { + vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.ChainNotSupported.selector, 999)); + s_pool.setPath(999, L_CHAIN_ID, abi.encode(s_remotePool)); + } + + function test_setPath_RevertWhen_ZeroLChainId() public { + vm.expectRevert(LombardTokenPool.ZeroLombardChainId.selector); + s_pool.setPath(DEST_CHAIN_SELECTOR, bytes32(0), abi.encode(s_remotePool)); + } + + function test_setPath_RevertWhen_InvalidRemotePoolForChain() public { + vm.expectRevert( + abi.encodeWithSelector(TokenPool.InvalidRemotePoolForChain.selector, DEST_CHAIN_SELECTOR, hex"1234") + ); + s_pool.setPath(DEST_CHAIN_SELECTOR, L_CHAIN_ID, hex"1234"); + } + + function test_setPath_RevertWhen_InvalidAllowedCaller() public { + bytes memory remotePoolAddress = hex"1234"; + s_pool.addRemotePool(DEST_CHAIN_SELECTOR, remotePoolAddress); + + vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.InvalidAllowedCaller.selector, remotePoolAddress)); + s_pool.setPath(DEST_CHAIN_SELECTOR, L_CHAIN_ID, remotePoolAddress); + } +} diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol index 12f2e49604..5a23d6bd50 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.24; import {Router} from "../../../Router.sol"; import {TokenPool} from "../../../pools/TokenPool.sol"; import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; - import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {TokenPoolSetup} from "../TokenPool/TokenPoolSetup.t.sol"; diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool_removePath.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool_removePath.t.sol new file mode 100644 index 0000000000..8e426f56d2 --- /dev/null +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool_removePath.t.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; +import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; + +contract LombardTokenPool_removePath is LombardTokenPoolSetup { + bytes32 internal constant L_CHAIN_ID = bytes32("LCHAIN"); + + function test_removePath_RemovesConfig() public { + s_pool.setPath(DEST_CHAIN_SELECTOR, L_CHAIN_ID, abi.encode(s_remotePool)); + + vm.expectEmit(); + emit LombardTokenPool.PathRemoved(DEST_CHAIN_SELECTOR, L_CHAIN_ID, bytes32(uint256(uint160(s_remotePool)))); + s_pool.removePath(DEST_CHAIN_SELECTOR); + + LombardTokenPool.Path memory path = s_pool.getPath(DEST_CHAIN_SELECTOR); + assertEq(path.allowedCaller, bytes32(0)); + assertEq(path.lChainId, bytes32(0)); + } + + function test_removePath_RevertWhen_PathMissing() public { + vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.PathNotExist.selector, DEST_CHAIN_SELECTOR)); + s_pool.removePath(DEST_CHAIN_SELECTOR); + } +} From c78fa1437ad82e5c4c2280f09399d5b7662058f8 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 14:18:42 +0530 Subject: [PATCH 06/16] update wrappers --- .../lombard_token_pool/lombard_token_pool.go | 557 +++++++++++++++--- chains/evm/.gas-snapshot | 10 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 3 files changed, 479 insertions(+), 90 deletions(-) diff --git a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go index b3395b6244..0f7b264633 100644 --- a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go +++ b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go @@ -38,6 +38,11 @@ type IPoolV2TokenTransferFeeConfig struct { IsEnabled bool } +type LombardTokenPoolPath struct { + AllowedCaller [32]byte + LChainId [32]byte +} + type PoolLockOrBurnInV1 struct { Receiver []byte RemoteChainSelector uint64 @@ -101,15 +106,15 @@ type TokenPoolTokenTransferFeeConfigArgs struct { } var LombardTokenPoolMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getVerifierResolver\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"releaseOrMintOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardVerifierSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", - Bin: "0x610120806040523461024e5760c08161503b8038038091610020828561029f565b83398101031261024e578051906001600160a01b03821680830361024e5761004a602083016102d8565b92610057604084016102d8565b91610086610067606086016102d8565b9261008060a0610079608089016102d8565b97016102ec565b906102fa565b91331561028e57600180546001600160a01b031916331790558115801561027d575b801561026c575b61025b578160209160049360805260c0526040519283809263313ce56760e01b82525afa6000918161021a575b506101ef575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169282169290921790915581169081156101de5761010052604051907fa817b8930bcb4b25cbd026589d9815aceaf8ec0882ebf9bdf32f1e22f69ff745600080a2614cca9081610371823960805181818161169a015281816124580152818161264e0152818161274a01528181612a0101528181612d2c0152612d86015260a05181818161193301528181612bf201528181613c870152613d0a015260c051818181610ca80152818161177601526124f3015260e051818181611889015281816126b601526136c40152610100518181816116470152612e380152f35b639533e8c360e01b60005260046000fd5b60ff1660ff821681810361020357506100e2565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d602011610253575b816102366020938361029f565b8101031261024e57610247906102ec565b90386100dc565b600080fd5b3d9150610229565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100af565b506001600160a01b038516156100a8565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b038211908210176102c257604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361024e57565b519060ff8216820361024e57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610334575b5061032f575090565b905090565b9091506020813d602011610368575b816103506020938361029f565b8101031261024e57610361906102ec565b9038610326565b3d915061034356fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a714612e5c5750806305e20b2b14612e0b578063181f5a7714612daa57806321df0da714612d59578063240028e814612cf55780632422ac4514612c1657806324f65ee714612bd85780632c06340414612b3f5780633907753714612afc578063489a68f2146123b25780634c5ef0ed1461236b57806362ddd3c4146122e45780637437ff9f1461229357806379ba5097146121cc5780638926f54f1461218657806389720a62146120bf5780638da5cb5b1461208b5780639a4575b91461203a578063a42a7b8b14611ed3578063acfecf9114611ddb578063b1c71c651461156c578063b79465801461152f578063c4bffe2b14611404578063c7230a6014611257578063d8aa3f401461111d578063dc04fa1f14610ccc578063dc0bd97114610c7b578063dcbd41bc14610a77578063e8a1da17146103b7578063f2fde38b146102e85763fdf168751461017657600080fd5b346102e55760606003193601126102e55761018f6130d7565b90610198613193565b6044359273ffffffffffffffffffffffffffffffffffffffff84168085036102e1576101c2613e2c565b73ffffffffffffffffffffffffffffffffffffffff821680156102b957946102b3917fba9213054b14c2e884f779120bb196f0735cef27140498a9d26117eeab77a1179596600254907fffffffffffffffffffff0000000000000000000000000000000000000000000075ffff00000000000000000000000000000000000000008860a01b16921617176002557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556040519384938491604091949361ffff73ffffffffffffffffffffffffffffffffffffffff9283606087019816865216602085015216910152565b0390a180f35b6004857f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b80fd5b50346102e55760206003193601126102e55773ffffffffffffffffffffffffffffffffffffffff6103176130d7565b61031f613e2c565b1633811461038f57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346102e55760406003193601126102e55760043567ffffffffffffffff81116108d4576103e99036906004016132b6565b9060243567ffffffffffffffff81116102e1579061040c849236906004016132b6565b939091610417613e2c565b83905b8282106108dc5750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b818110156108d8578060051b830135858112156108d0578301610120813603126108d0576040519461047e86612fe1565b61048782613171565b8652602082013567ffffffffffffffff81116108d45782019436601f870112156108d4578535956104b78761362f565b966104c56040519889612ffd565b80885260208089019160051b830101903682116108d05760208301905b82821061089d575050505060208701958652604083013567ffffffffffffffff8111610899576105159036908501613229565b916040880192835261053f61052d3660608701613a8c565b9460608a0195865260c0369101613a8c565b9560808901968752835151156108715761056367ffffffffffffffff8a51166148f5565b1561083a5767ffffffffffffffff895116825260076020526040822061058a865182614268565b610598885160028301614268565b6004855191019080519067ffffffffffffffff821161080d576105bb83546138da565b601f81116107d2575b50602090601f8311600114610733576106129291869183610728575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b8851805182101561064c579061064660019261063f8367ffffffffffffffff8f511692613897565b5190613e77565b01610617565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561071a67ffffffffffffffff60019796949851169251935191516106e66106b160405196879687526101006020880152610100870190613078565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a101939290919361044d565b015190508e806105e0565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107ba5750908460019594939210610783575b505050811b019055610615565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d8080610776565b92936020600181928786015181550195019301610760565b6107fd9084875260208720601f850160051c81019160208610610803575b601f0160051c0190613b28565b8d6105c4565b90915081906107f0565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108cc576020916108c18392833691890101613229565b8152019101906104e2565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff6108fe6108f98486889a9699979a613a11565b6135dd565b169161090983614558565b15610a4b578284526007602052610925600560408620016144f5565b94845b865181101561095e57600190858752600760205261095760056040892001610950838b613897565b51906146ee565b5001610928565b509396929094509490948087526007602052600560408820888155886001820155886002820155886003820155886004820161099a81546138da565b80610a0a575b50505001805490888155816109ec575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a10190919493929461041a565b885260208820908101905b818110156109b0578881556001016109f7565b601f8111600114610a205750555b888a806109a0565b81835260208320610a3b91601f01861c810190600101613b28565b8082528160208120915555610a18565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346102e55760206003193601126102e55760043567ffffffffffffffff81116108d457610aa99036906004016132e7565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610c59575b610c2d57825b818110610adc578380f35b610ae7818385613a21565b67ffffffffffffffff610af9826135dd565b1690610b12826000526006602052604060002054151590565b15610c0157907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610bc1610b9b602060019897018b610b5382613a31565b15610bc8578790526003602052610b7a60408d20610b743660408801613a8c565b90614268565b868c526004602052610b9660408d20610b743660a08801613a8c565b613a31565b916040519215158352610bb46020840160408301613ae4565b60a0608084019101613ae4565ba201610ad1565b60026040828a610b9694526007602052610bea828220610b7436858c01613a8c565b8a815260076020522001610b743660a08801613a8c565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610acb565b50346102e557806003193601126102e557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102e55760406003193601126102e55760043567ffffffffffffffff81116108d457610cfe9036906004016132e7565b60243567ffffffffffffffff81116102e157610d1e9036906004016132b6565b919092610d29613e2c565b845b828110610d9557505050825b818110610d42578380f35b8067ffffffffffffffff610d5c6108f96001948688613a11565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610d37565b610da36108f9828585613a21565b610dae828585613a21565b90602082019060e0830190610dc282613a31565b156110e85760a0840161271061ffff610dda83613a3e565b1610156110d95760c085019161271061ffff610df585613a3e565b1610156110a15763ffffffff610e0a86613a4d565b161561106c5767ffffffffffffffff1694858c52600a60205260408c20610e3086613a4d565b63ffffffff16908054906040840191610e4883613a4d565b60201b67ffffffff0000000016936060860194610e6486613a4d565b60401b6bffffffff0000000000000000169660800196610e8388613a4d565b60601b6fffffffff0000000000000000000000001691610ea28a613a3e565b60801b71ffff000000000000000000000000000000001693610ec38c613a3e565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff161717178155610f7687613a31565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff00000000000000000000000000000000000000001617905560405196610fc790613a5e565b63ffffffff168752610fd890613a5e565b63ffffffff166020870152610fec90613a5e565b63ffffffff16604086015261100090613a5e565b63ffffffff166060850152611014906131b5565b61ffff166080840152611026906131b5565b61ffff1660a083015261103890613186565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610d2b565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6110b086613a3e565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6110b0602493613a3e565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346102e55760806003193601126102e5576111376130d7565b5061114061315a565b6111486131a4565b5060643567ffffffffffffffff8111610899579167ffffffffffffffff60409261117860e09536906004016131c4565b50508260c0855161118881612fc5565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906111c082612fc5565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346102e55760406003193601126102e55760043567ffffffffffffffff81116108d4576112899036906004016132b6565b9060243573ffffffffffffffffffffffffffffffffffffffff8116908181036108d0576112b4613e2c565b845b8481106112c1578580f35b80602073ffffffffffffffffffffffffffffffffffffffff6112ee6112e96024958a8a613a11565b6135bc565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156113f95787906113c3575b600192508061133f575b50016112b6565b61136d818573ffffffffffffffffffffffffffffffffffffffff6113676112e9878d8d613a11565b166140e1565b847f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff6113b46112e9878d8d613a11565b1693604051908152a338611338565b509060203d81116113f2575b6113d98183612ffd565b602082600092810103126102e55750906001915161132e565b503d6113cf565b6040513d89823e3d90fd5b50346102e557806003193601126102e557604051906005548083528260208101600584526020842092845b81811061151657505061144492500383612ffd565b81516114686114528261362f565b916114606040519384612ffd565b80835261362f565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156114c7578067ffffffffffffffff6114b460019388613897565b51166114c08286613897565b5201611495565b50925090604051928392602084019060208552518091526040840192915b8181106114f3575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016114e5565b845483526001948501948794506020909301920161142f565b50346102e55760206003193601126102e55761156861155461154f613143565b6139ef565b604051918291602083526020830190613078565b0390f35b50346102e55760606003193601126102e5576004359067ffffffffffffffff82116102e5578160040160a060031984360301126108d4576115ab613193565b9060443567ffffffffffffffff81116102e1576115cc9036906004016131c4565b9390946115d761387e565b5060248101956115e6876135dd565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611dd0578492611d94575b5073ffffffffffffffffffffffffffffffffffffffff821615611d6c576116da907f0000000000000000000000000000000000000000000000000000000000000000976116ca606486013580958b6140e1565b6116d261387e565b5036916131f2565b60848301926116e8846135bc565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611d225777ffffffffffffffff000000000000000000000000000000006117298a6135dd565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611c95578691611cf3575b50611ccb5767ffffffffffffffff6117bd8a6135dd565b166117d5816000526006602052604060002054151590565b15611ca057602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015611c95578690611c44575b73ffffffffffffffffffffffffffffffffffffffff9150163303611c185761ffff8716918215611b865761ffff60025460a01c1680611abb575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611999575b61198f8a61192b61154f8e6118c58e8e614822565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae10606067ffffffffffffffff6118fb856135dd565b73ffffffffffffffffffffffffffffffffffffffff604051951685523360208601528860408601521692a26135dd565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611967604082612ffd565b6040519261197484612fa9565b8352602083015260405192839260408452604084019061328c565b9060208301520390f35b833b156108cc578787959493928c8793604051998a98899788967f5c3af7ca0000000000000000000000000000000000000000000000000000000088526004880160609052806119e8916144a5565b6064890160a090526101048901906119ff92613668565b94611a0990613171565b67ffffffffffffffff166084880152604401611a2490613122565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611a4d90613122565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611a8291613078565b03925af18015611ab057611a9b575b80808080806118b0565b611aa6828092612ffd565b6102e55780611a91565b6040513d84823e3d90fd5b808410611b56575067ffffffffffffffff611ad58b6135dd565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611b288d73ffffffffffffffffffffffffffffffffffffffff60408d2091169283916149aa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611870565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611b988b6135dd565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611beb8d73ffffffffffffffffffffffffffffffffffffffff60408d2091169283916149aa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611872565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611c8d575b81611c5e60209383612ffd565b81010312611c8957611c8473ffffffffffffffffffffffffffffffffffffffff91613647565b611836565b8580fd5b3d9150611c51565b6040513d88823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b611d15915060203d602011611d1b575b611d0d8183612ffd565b810190613e14565b386117a6565b503d611d03565b60248573ffffffffffffffffffffffffffffffffffffffff611d43876135bc565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611dc8575b81611db060209383612ffd565b810103126102e157611dc190613647565b9038611677565b3d9150611da3565b6040513d86823e3d90fd5b50346102e55767ffffffffffffffff611df336613247565b929091611dfe613e2c565b1691611e17836000526006602052604060002054151590565b15610a4b578284526007602052611e4660056040862001611e393684866131f2565b60208151910120906146ee565b15611e8b57907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611e85604051928392602084526020840191613668565b0390a280f35b82611ecf836040519384937f74f23c7c0000000000000000000000000000000000000000000000000000000085526004850152604060248501526044840191613668565b0390fd5b50346102e55760206003193601126102e55767ffffffffffffffff611ef6613143565b1681526007602052611f0d600560408320016144f5565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f52611f3c8361362f565b92611f4a6040519485612ffd565b80845261362f565b01835b818110612029575050825b8251811015611fa65780611f7660019285613897565b5185526008602052611f8a6040862061392d565b611f948285613897565b52611f9f8184613897565b5001611f60565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b828210611fde57505050500390f35b91936020612019827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851613078565b9601920192018594939192611fcf565b806060602080938601015201611f55565b50346102e55760206003193601126102e55760043567ffffffffffffffff81116108d45760031960a091360301126102e55761156861207761387e565b60405191829160208352602083019061328c565b50346102e557806003193601126102e557602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346102e55760c06003193601126102e5576120d96130d7565b6120e161315a565b9060643561ffff811681036102e15760843567ffffffffffffffff81116108d0576121109036906004016131c4565b9160a4359360028510156108cc5761212b95604435916136a7565b90604051918291602083016020845282518091526020604085019301915b818110612157575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612149565b50346102e55760206003193601126102e55760206121c267ffffffffffffffff6121ae613143565b166000526006602052604060002054151590565b6040519015158152f35b50346102e557806003193601126102e557805473ffffffffffffffffffffffffffffffffffffffff8116330361226b577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346102e557806003193601126102e5576002546009546040805173ffffffffffffffffffffffffffffffffffffffff808516825260a09490941c61ffff1660208201529290911690820152606090f35b50346102e5576122f336613247565b6122ff93929193613e2c565b67ffffffffffffffff8216612321816000526006602052604060002054151590565b15612340575061233d92936123379136916131f2565b90613e77565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b50346102e55760406003193601126102e557612385613143565b906024359067ffffffffffffffff82116102e55760206121c2846123ac3660048701613229565b906135f2565b50346102e55760406003193601126102e5576004359067ffffffffffffffff82116102e557816004019161010060031982360301126108d4576123f3613193565b908260405161240181612f5e565b5260c4810192606482013561243161242b61242661241f888a61356b565b36916131f2565b613c13565b82613d07565b946084840191612440836135bc565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612adb57602485019577ffffffffffffffff000000000000000000000000000000006124a6886135dd565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611c95578691612abc575b50611ccb5767ffffffffffffffff61253a886135dd565b16612552816000526006602052604060002054151590565b15611ca057602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611c95578691612a9d575b5015611c185790889392916125e26125d1896135dd565b6123ac61241f60a48b01809961356b565b15612a565761ffff169889156129a25767ffffffffffffffff612604896135dd565b1680875260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061267660408b2073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283916149aa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283612796575b50602089604489017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc0608067ffffffffffffffff61272d6127278f612721876135bc565b506135dd565b946135bc565b9373ffffffffffffffffffffffffffffffffffffffff60405195817f000000000000000000000000000000000000000000000000000000000000000016875233898801521660408601528560608601521692a28060405161278d81612f5e565b52604051908152f35b869a849796973b156108cc57869289928b6040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526127e687806144a5565b60648b0161010090526101648b01906127fe92613668565b9461280890613171565b67ffffffffffffffff1660848a015260440161282390613122565b73ffffffffffffffffffffffffffffffffffffffff1660a489015260c488015261284c90613122565b73ffffffffffffffffffffffffffffffffffffffff1660e487015261287190846144a5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101048801526128a69291613668565b906128b190836144a5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c868403016101248701526128e69291613668565b9060e48b016128f4916144a5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526129299291613668565b908b6024840152604483015203925af180156129975761272d61272760447ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc09560209960809667ffffffffffffffff96612987575b508197506126dd565b8161299191612ffd565b3861297e565b6040513d87823e3d90fd5b67ffffffffffffffff6129b4896135dd565b1680875260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a80612a29600260408c200173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283916149aa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a261269f565b612a60858b61356b565b611ecf6040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191613668565b612ab6915060203d602011611d1b57611d0d8183612ffd565b386125ba565b612ad5915060203d602011611d1b57611d0d8183612ffd565b38612523565b60248473ffffffffffffffffffffffffffffffffffffffff611d43866135bc565b50346102e55760206003193601126102e55760043567ffffffffffffffff81116108d45760031961010091360301126102e5578060209160405161278d81612f5e565b50346102e55760c06003193601126102e557612b596130d7565b50612b6261315a565b612b6a6130ff565b506084359161ffff831683036102e55760a4359067ffffffffffffffff82116102e55760a063ffffffff8061ffff612bb18888612baa3660048b016131c4565b505061342c565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b50346102e557806003193601126102e557602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102e55760406003193601126102e557612c30613143565b6024359182151583036102e557610140612cf3612c4d85856133a9565b612ca360409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b50346102e55760206003193601126102e557602090612d126130d7565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b50346102e557806003193601126102e557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102e557806003193601126102e55750611568604051612dcd604082612ffd565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d6465760000000000006020820152604051918291602083526020830190613078565b50346102e557806003193601126102e557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346108d45760206003193601126108d4576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361089957602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115612f34575b8115612f0a575b8115612ee0575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612ed9565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150612ed2565b7f331710310000000000000000000000000000000000000000000000000000000081149150612ecb565b6020810190811067ffffffffffffffff821117612f7a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff821117612f7a57604052565b60e0810190811067ffffffffffffffff821117612f7a57604052565b60a0810190811067ffffffffffffffff821117612f7a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612f7a57604052565b67ffffffffffffffff8111612f7a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b919082519283825260005b8481106130c25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201613083565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036130fa57565b600080fd5b6064359073ffffffffffffffffffffffffffffffffffffffff821682036130fa57565b359073ffffffffffffffffffffffffffffffffffffffff821682036130fa57565b6004359067ffffffffffffffff821682036130fa57565b6024359067ffffffffffffffff821682036130fa57565b359067ffffffffffffffff821682036130fa57565b359081151582036130fa57565b6024359061ffff821682036130fa57565b6044359061ffff821682036130fa57565b359061ffff821682036130fa57565b9181601f840112156130fa5782359167ffffffffffffffff83116130fa57602083818601950101116130fa57565b9291926131fe8261303e565b9161320c6040519384612ffd565b8294818452818301116130fa578281602093846000960137010152565b9080601f830112156130fa57816020613244933591016131f2565b90565b9060406003198301126130fa5760043567ffffffffffffffff811681036130fa57916024359067ffffffffffffffff82116130fa57613288916004016131c4565b9091565b6132449160206132a58351604084526040840190613078565b920151906020818403910152613078565b9181601f840112156130fa5782359167ffffffffffffffff83116130fa576020808501948460051b0101116130fa57565b9181601f840112156130fa5782359167ffffffffffffffff83116130fa576020808501948460081b0101116130fa57565b6040519061332582612fe1565b60006080838281528260208201528260408201528260608201520152565b9060405161335081612fe1565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916133bb613318565b506133c4613318565b506133f8571660005260076020526040600020906132446133ec60026133f16133ec86613343565b613b8e565b9401613343565b16908160005260036020526134136133ec6040600020613343565b9160005260046020526132446133ec6040600020613343565b67ffffffffffffffff16600052600a60205260406000206040519061345082612fc5565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c08801526135525761ffff16806134e95750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c169081811061352257505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156130fa570180359067ffffffffffffffff82116130fa576020019181360383136130fa57565b3573ffffffffffffffffffffffffffffffffffffffff811681036130fa5790565b3567ffffffffffffffff811681036130fa5790565b9067ffffffffffffffff61324492166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b67ffffffffffffffff8111612f7a5760051b60200190565b519073ffffffffffffffffffffffffffffffffffffffff821682036130fa57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001695861561385c576137609467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191613668565b91600282101561382d578380600094819460a483015203915afa9081156138215760009161378c575090565b3d8083833e61379b8183612ffd565b8101906020818303126108995780519067ffffffffffffffff82116102e1570181601f82011215610899578051906137d28261362f565b936137e06040519586612ffd565b82855260208086019360051b8301019384116102e55750602001905b8282106138095750505090565b6020809161381684613647565b8152019101906137fc565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051613872602082612ffd565b60008152600036813790565b6040519061388b82612fa9565b60606020838281520152565b80518210156138ab5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015613923575b60208310146138f457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916138e9565b9060405191826000825492613941846138da565b80845293600181169081156139af5750600114613968575b5061396692500383612ffd565b565b90506000929192526020600020906000915b8183106139935750509060206139669282010138613959565b602091935080600191548385890101520191019091849261397a565b602093506139669592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613959565b67ffffffffffffffff166000526007602052613244600460406000200161392d565b91908110156138ab5760051b0190565b91908110156138ab5760081b0190565b3580151581036130fa5790565b3561ffff811681036130fa5790565b3563ffffffff811681036130fa5790565b359063ffffffff821682036130fa57565b35906fffffffffffffffffffffffffffffffff821682036130fa57565b91908260609103126130fa576040516060810181811067ffffffffffffffff821117612f7a576040526040613adf818395613ac681613186565b8552613ad460208201613a6f565b602086015201613a6f565b910152565b6fffffffffffffffffffffffffffffffff613b2260408093613b0581613186565b1515865283613b1660208301613a6f565b16602087015201613a6f565b16910152565b818110613b33575050565b60008155600101613b28565b81810292918115918404141715613b5257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908203918211613b5257565b613b96613318565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691613bf36020850193613bed613be063ffffffff87511642613b81565b8560808901511690613b3f565b90614498565b80821015613c0c57505b16825263ffffffff4216905290565b9050613bfd565b80518015613c8357602003613c455780516020828101918301839003126130fa57519060ff8211613c45575060ff1690565b611ecf906040519182917f953576f7000000000000000000000000000000000000000000000000000000008352602060048401526024830190613078565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff8211613b5257565b60ff16604d8111613b5257600a0a90565b8115613cd8570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff811692828414613e0d57828411613de35790613d4c91613ca9565b91604d60ff8416118015613daa575b613d7457505090613d6e61324492613cbd565b90613b3f565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50613db483613cbd565b8015613cd8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048411613d5b565b613dec91613ca9565b91604d60ff841611613d7457505090613e0761324492613cbd565b90613cce565b5050505090565b908160209103126130fa575180151581036130fa5790565b73ffffffffffffffffffffffffffffffffffffffff600154163303613e4d57565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b908051156140b75767ffffffffffffffff81516020830120921691826000526007602052613eac816005604060002001614955565b156140735760005260086020526040600020815167ffffffffffffffff8111612f7a57613ed982546138da565b601f8111614041575b506020601f8211600114613f7b5791613f55827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea9593613f6b95600091613f70575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055604051918291602083526020830190613078565b0390a2565b905084015138613f24565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b818110614029575092613f6b9492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea989610613ff2575b5050811b019055611554565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880613fe6565b9192602060018192868a015181550194019201613fab565b61406d90836000526020600020601f840160051c8101916020851061080357601f0160051c0190613b28565b38613ee2565b5090611ecf6040519283927f393b8ad20000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190613078565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff93841660248301526044808301959095529381526141b7929091614146606484612ffd565b1660008060409586519461415a8887612ffd565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d15614260573d9161419b8361303e565b926141a887519485612ffd565b83523d6000602085013e614bf1565b805190816141c457505050565b6020806141d5938301019101613e14565b156141dd5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606091614bf1565b8151919291156143ea576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff602085015116106143875761396691925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b6064836143e8604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590614479575b6144185761396691926142ab565b6064836143e8604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff602084015116151561440a565b91908201809211613b5257565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156130fa57016020813591019167ffffffffffffffff82116130fa5781360383136130fa57565b906040519182815491828252602082019060005260206000209260005b81811061452757505061396692500383612ffd565b8454835260019485019487945060209093019201614512565b80548210156138ab5760005260206000200190600090565b60008181526006602052604090205480156146e7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111613b5257600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211613b5257818103614678575b5050506005548015614649577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614606816005614540565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6146cf61468961469a936005614540565b90549060031b1c9283926005614540565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905560005260066020526040600020553880806145cd565b5050600090565b9060018201918160005282602052604060002054801515600014614819577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111613b52578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211613b52578181036147e2575b50505080548015614649577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906147a38282614540565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b6148026147f261469a9386614540565b90549060031b1c92839286614540565b90556000528360205260406000205538808061476b565b50505050600090565b9061ffff9067ffffffffffffffff61483c602085016135dd565b16600052600a6020526040600020826040519161485883612fc5565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c1615159101521615156000146148ee57505b1680156148e6576127106148df60606132449401359283613b3f565b0490613b81565b506060013590565b90506148c3565b8060005260066020526040600020541560001461494f5760055468010000000000000000811015612f7a5761493661469a8260018594016005556005614540565b9055600554906000526006602052604060002055600190565b50600090565b60008281526001820160205260409020546146e75780549068010000000000000000821015612f7a578261499361469a846001809601855584614540565b905580549260005201602052604060002055600190565b9182549060ff8260a01c16158015614be9575b614be3576fffffffffffffffffffffffffffffffff82169160018501908154614a0263ffffffff6fffffffffffffffffffffffffffffffff83169360801c1642613b81565b9081614b45575b5050848110614af95750838310614a63575050614a386fffffffffffffffffffffffffffffffff928392613b81565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b5460801c91614a728185613b81565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190808211613b5257614ac0614ac59273ffffffffffffffffffffffffffffffffffffffff96614498565b613cce565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b828692939611614bb957614b6092613bed9160801c90613b3f565b80841015614bb45750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880614a09565b614b6b565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b5082156149bd565b91929015614c6c5750815115614c05575090565b3b15614c0e5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015614c7f5750805190602001fd5b611ecf906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061307856fea164736f6c634300081a000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV2\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV2\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", + Bin: "0x610160806040523461031b576101008161685e803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a461639c90816104c2823960805181818161178f015281816122a30152818161245b0152818161311e01528181613311015281816133ed0152818161368a015281816138ac01528181613a76015281816143bc0152614416015260a051818181611a2f01528181614282015281816152f60152615379015260c051818181610d9d0152818161186b0152818161233d015281816131b90152613947015260e05181818161197e015281816124e20152818161337901528181613afd0152614d33015261010051818181610b09015281816125a201528181612dfb0152613bc4015261012051818181610ad0015261173c015261014051818181610b45015261254e0152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461449b57508063181f5a771461443a57806321df0da7146143e9578063240028e8146143855780632422ac45146142a657806324f65ee7146142685780632c063404146141cf57806338ff8c3814614163578063390775371461383a578063489a68f2146130795780634c5ef0ed146130325780635fa1356514612ea657806362ddd3c414612e1f578063708e1f7914612dce5780637437ff9f14612d7d57806379ba509714612cb65780638926f54f14612c7057806389720a6214612ba95780638da5cb5b14612b755780639a4575b91461222c5780639c893fe91461215f578063a42a7b8b14611ff8578063acfecf9114611ee2578063b1c71c6514611661578063b794658014611624578063c4bffe2b146114f9578063c7230a601461134c578063d8aa3f4014611212578063dc04fa1f14610dc1578063dc0bd97114610d70578063dcbd41bc14610b6c578063dd65bdb114610aa3578063e8a1da17146103e3578063f2fde38b146103145763fdf16875146101a257600080fd5b34610311576060600319360112610311576101bb61471d565b906101c46147d4565b6044359273ffffffffffffffffffffffffffffffffffffffff841680850361030d576101ee615483565b73ffffffffffffffffffffffffffffffffffffffff821680156102e557946102df917fba9213054b14c2e884f779120bb196f0735cef27140498a9d26117eeab77a1179596600254907fffffffffffffffffffff0000000000000000000000000000000000000000000075ffff00000000000000000000000000000000000000008860a01b16921617176002557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556040519384938491604091949361ffff73ffffffffffffffffffffffffffffffffffffffff9283606087019816865216602085015216910152565b0390a180f35b6004857f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b80fd5b50346103115760206003193601126103115773ffffffffffffffffffffffffffffffffffffffff61034361471d565b61034b615483565b163381146103bb57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346103115760406003193601126103115760043567ffffffffffffffff8111610900576104159036906004016148f7565b9060243567ffffffffffffffff811161030d5790610438849236906004016148f7565b939091610443615483565b83905b8282106109085750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610904578060051b830135858112156108fc578301610120813603126108fc57604051946104aa86614620565b6104b3826147b2565b8652602082013567ffffffffffffffff81116109005782019436601f87011215610900578535956104e387614cfe565b966104f1604051988961463c565b80885260208089019160051b830101903682116108fc5760208301905b8282106108c9575050505060208701958652604083013567ffffffffffffffff81116108c557610541903690850161486a565b916040880192835261056b61055936606087016150fb565b9460608a0195865260c03691016150fb565b95608089019687528351511561089d5761058f67ffffffffffffffff8a5116615f52565b156108665767ffffffffffffffff89511682526007602052604082206105b68651826158c5565b6105c48851600283016158c5565b6004855191019080519067ffffffffffffffff8211610839576105e78354614f49565b601f81116107fe575b50602090601f831160011461075f5761063e9291869183610754575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b88518051821015610678579061067260019261066b8367ffffffffffffffff8f511692614f06565b51906154ce565b01610643565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074667ffffffffffffffff60019796949851169251935191516107126106dd604051968796875261010060208801526101008701906146da565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a1019392909193610479565b015190508e8061060c565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e657509084600195949392106107af575b505050811b019055610641565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a2565b9293602060018192878601518155019501930161078c565b6108299084875260208720601f850160051c8101916020861061082f575b601f0160051c0190615197565b8d6105f0565b909150819061081c565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108f8576020916108ed839283369189010161486a565b81520191019061050e565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092a6109258486889a9699979a615080565b614c2b565b169161093583615bb5565b15610a7757828452600760205261095160056040862001615b52565b94845b865181101561098a5760019085875260076020526109836005604089200161097c838b614f06565b5190615d4b565b5001610954565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c68154614f49565b80610a36575b5050500180549088815581610a18575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610446565b885260208820908101905b818110156109dc57888155600101610a23565b601f8111600114610a4c5750555b888a806109cc565b81835260208320610a6791601f01861c810190600101615197565b8082528160208120915555610a44565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b5034610311578060031936011261031157606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346103115760206003193601126103115760043567ffffffffffffffff811161090057610b9e903690600401614928565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d4e575b610d2257825b818110610bd1578380f35b610bdc818385615090565b67ffffffffffffffff610bee82614c2b565b1690610c07826000526006602052604060002054151590565b15610cf657907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cb6610c90602060019897018b610c48826150a0565b15610cbd578790526003602052610c6f60408d20610c6936604088016150fb565b906158c5565b868c526004602052610c8b60408d20610c693660a088016150fb565b6150a0565b916040519215158352610ca96020840160408301615153565b60a0608084019101615153565ba201610bc6565b60026040828a610c8b94526007602052610cdf828220610c6936858c016150fb565b8a815260076020522001610c693660a088016150fb565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc0565b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115760406003193601126103115760043567ffffffffffffffff811161090057610df3903690600401614928565b60243567ffffffffffffffff811161030d57610e139036906004016148f7565b919092610e1e615483565b845b828110610e8a57505050825b818110610e37578380f35b8067ffffffffffffffff610e516109256001948688615080565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e2c565b610e98610925828585615090565b610ea3828585615090565b90602082019060e0830190610eb7826150a0565b156111dd5760a0840161271061ffff610ecf836150ad565b1610156111ce5760c085019161271061ffff610eea856150ad565b1610156111965763ffffffff610eff866150bc565b16156111615767ffffffffffffffff1694858c52600a60205260408c20610f25866150bc565b63ffffffff16908054906040840191610f3d836150bc565b60201b67ffffffff0000000016936060860194610f59866150bc565b60401b6bffffffff0000000000000000169660800196610f78886150bc565b60601b6fffffffff0000000000000000000000001691610f978a6150ad565b60801b71ffff000000000000000000000000000000001693610fb88c6150ad565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16171717815561106b876150a0565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110bc906150cd565b63ffffffff1687526110cd906150cd565b63ffffffff1660208701526110e1906150cd565b63ffffffff1660408601526110f5906150cd565b63ffffffff166060850152611109906147f6565b61ffff16608084015261111b906147f6565b61ffff1660a083015261112d906147c7565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e20565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111a5866150ad565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111a56024936150ad565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346103115760806003193601126103115761122c61471d565b5061123561479b565b61123d6147e5565b5060643567ffffffffffffffff81116108c5579167ffffffffffffffff60409261126d60e0953690600401614805565b50508260c0855161127d81614604565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112b582614604565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346103115760406003193601126103115760043567ffffffffffffffff81116109005761137e9036906004016148f7565b9060243573ffffffffffffffffffffffffffffffffffffffff8116908181036108fc576113a9615483565b845b8481106113b6578580f35b80602073ffffffffffffffffffffffffffffffffffffffff6113e36113de6024958a8a615080565b614c40565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114ee5787906114b8575b6001925080611434575b50016113ab565b611462818573ffffffffffffffffffffffffffffffffffffffff61145c6113de878d8d615080565b16615738565b847f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff6114a96113de878d8d615080565b1693604051908152a33861142d565b509060203d81116114e7575b6114ce818361463c565b6020826000928101031261031157509060019151611423565b503d6114c4565b6040513d89823e3d90fd5b5034610311578060031936011261031157604051906005548083528260208101600584526020842092845b81811061160b5750506115399250038361463c565b815161155d61154782614cfe565b91611555604051938461463c565b808352614cfe565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bc578067ffffffffffffffff6115a960019388614f06565b51166115b58286614f06565b520161158a565b50925090604051928392602084019060208552518091526040840192915b8181106115e8575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115da565b8454835260019485019487945060209093019201611524565b50346103115760206003193601126103115761165d611649611644614784565b61505e565b6040519182916020835260208301906146da565b0390f35b5034610311576060600319360112610311576004359067ffffffffffffffff8211610311578160040160a06003198436030112610900576116a06147d4565b9060443567ffffffffffffffff811161030d576116c1903690600401614805565b9390946116cc614eed565b5060248101956116db87614c2b565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ed7578492611e9b575b5073ffffffffffffffffffffffffffffffffffffffff821615611e73576117cf907f0000000000000000000000000000000000000000000000000000000000000000976117bf606486013580958b615738565b6117c7614eed565b503691614833565b60848301926117dd84614c40565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e295777ffffffffffffffff0000000000000000000000000000000061181e8a614c2b565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611d91578691611def575b50611dc75767ffffffffffffffff6118b28a614c2b565b166118ca816000526006602052604060002054151590565b15611d9c57602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015611d91578690611d40575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d145761ffff8716918215611c825761ffff60025460a01c1680611bb7575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a95575b611a8b8a611a276116448e6119ba8e8e615e7f565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6119ee84614c2b565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614c2b565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611a6360408261463c565b60405192611a708461459d565b835260208301526040519283926040845260408401906148cd565b9060208301520390f35b833b156108f8578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611ae491615b02565b6064890160a09052610104890190611afb92614c9e565b94611b05906147b2565b67ffffffffffffffff166084880152604401611b2090614763565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611b4990614763565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b7e916146da565b03925af18015611bac57611b97575b80808080806119a5565b611ba282809261463c565b6103115780611b8d565b6040513d84823e3d90fd5b808410611c52575067ffffffffffffffff611bd18b614c2b565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611c248d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611965565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611c948b614c2b565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611ce78d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611967565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611d89575b81611d5a6020938361463c565b81010312611d8557611d8073ffffffffffffffffffffffffffffffffffffffff91614bfd565b61192b565b8580fd5b3d9150611d4d565b6040513d88823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e21575b81611e0a6020938361463c565b81010312611d8557611e1b90614c1e565b3861189b565b3d9150611dfd565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a87614c40565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ecf575b81611eb76020938361463c565b8101031261030d57611ec890614bfd565b903861176c565b3d9150611eaa565b6040513d86823e3d90fd5b503461031157611ef136614888565b611ef9615483565b67ffffffffffffffff831692611f1c846000526006602052604060002054151590565b15611fcc578385526007602052611f4b60056040872001611f3e368587614833565b6020815191012090615d4b565b15611f915750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611f8b604051928392602084526020840191614c9e565b0390a280f35b90611fc8906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614cdd565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115767ffffffffffffffff61201b614784565b168152600760205261203260056040832001615b52565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061207761206183614cfe565b9261206f604051948561463c565b808452614cfe565b01835b81811061214e575050825b82518110156120cb578061209b60019285614f06565b51855260086020526120af60408620614f9c565b6120b98285614f06565b526120c48184614f06565b5001612085565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b82821061210357505050500390f35b9193602061213e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288516146da565b96019201920185949391926120f4565b80606060208093860101520161207a565b50346103115760206003193601126103115767ffffffffffffffff612182614784565b61218a615483565b16808252600b6020526040822090604051916121a58361459d565b600181549182855201549060208401918252156122005760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115760043567ffffffffffffffff8111610900578060040160a060031983360301126108c55761226a614eed565b5060405160209261227b848361463c565b8482526084810161228b81614c40565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b5457602482019377ffffffffffffffff000000000000000000000000000000006122f186614c2b565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612ac1578891612b1f575b50612af75767ffffffffffffffff61238486614c2b565b1661239c816000526006602052604060002054151590565b15612acc578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612ac1578890612a75575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a495786606484013594859367ffffffffffffffff61243589614c2b565b1680845260078a526124836040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a91616007565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081612937575b5050505067ffffffffffffffff61251f86614c2b565b168752600b8652604087206040516125368161459d565b6001825492838352015491888201928352156128f9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128f157905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128e6578c916128b9575b506126326116448b614c2b565b8b815191818082019384920101031261283e57519081810361288b5750508961265b8680614bac565b90500361284357604490519601958961267d61267689614c40565b9680614bac565b908092918101031261283e57604094610104938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977e8a119800000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a484015260e060c48401528160e48401525af19687156128325780976127d1575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611a1f6116449661275c6127566127939a614c2b565b93614c40565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b9160405190828201528181526127aa60408261463c565b604051926127b78461459d565b83528183015261165d6040519282849384528301906148cd565b909196506040823d60401161282a575b816127ee6040938361463c565b810103126103115750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff612711565b3d91506127e1565b604051903d90823e3d90fd5b600080fd5b611fc88a6128518780614bac565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614c9e565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128df575b6128d0818361463c565b8101031261283e575138612625565b503d6128c6565b6040513d8e823e3d90fd5b50859061258b565b60248967ffffffffffffffff61290e8a614c2b565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b1561030d5783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d6129828d80615b02565b6064870160a0905261010487019061299992614c9e565b926129a3906147b2565b67ffffffffffffffff1660848601526044016129be90614763565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129e890614763565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a1e916146da565b03925af18015611bac57612a34575b8080612509565b81612a3e9161463c565b6108f8578638612a2d565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612aba575b612a8b818361463c565b81010312612ab657612ab173ffffffffffffffffffffffffffffffffffffffff91614bfd565b6123fc565b8780fd5b503d612a81565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b4d575b612b36818361463c565b81010312612ab657612b4790614c1e565b3861236d565b503d612b2c565b8573ffffffffffffffffffffffffffffffffffffffff611e4a602493614c40565b5034610311578060031936011261031157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103115760c060031936011261031157612bc361471d565b612bcb61479b565b9060643561ffff8116810361030d5760843567ffffffffffffffff81116108fc57612bfa903690600401614805565b9160a4359360028510156108f857612c159560443591614d16565b90604051918291602083016020845282518091526020604085019301915b818110612c41575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c33565b5034610311576020600319360112610311576020612cac67ffffffffffffffff612c98614784565b166000526006602052604060002054151590565b6040519015158152f35b5034610311578060031936011261031157805473ffffffffffffffffffffffffffffffffffffffff81163303612d55577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346103115780600319360112610311576002546009546040805173ffffffffffffffffffffffffffffffffffffffff808516825260a09490941c61ffff1660208201529290911690820152606090f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461031157612e2e36614888565b612e3a93929193615483565b67ffffffffffffffff8216612e5c816000526006602052604060002054151590565b15612e7b5750612e789293612e72913691614833565b906154ce565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b503461031157606060031936011261031157612ec0614784565b6024359060443567ffffffffffffffff811161030d57612ee4903690600401614805565b612eec615483565b67ffffffffffffffff831692612f0f846000526006602052604060002054151590565b15613006578415612fde57612f2e612f28368486614833565b82614c61565b15611f91575060208103612fa157816020918101031261283e5760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f798161459d565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fc86040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c9e565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760406003193601126103115761304c614784565b906024359067ffffffffffffffff8211610311576020612cac84613073366004870161486a565b90614c61565b5034610311576040600319360112610311576004359067ffffffffffffffff821161031157816004016101006003198436030112610900576130b96147d4565b91806040516130c7816145e8565b5260648401359260c485016130f76130f16130ec6130e58488614bac565b3691614833565b615282565b86615376565b94608487019061310682614c40565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361381957602488019577ffffffffffffffff0000000000000000000000000000000061316c88614c2b565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114ee5787916137df575b506137b75767ffffffffffffffff61320088614c2b565b16613218816000526006602052604060002054151590565b1561378c57602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156114ee578791613752575b50156137265761328f87614c2b565b946132a560a48b01966130736130e58986614bac565b156136df5761ffff1690811561362b5767ffffffffffffffff6132c789614c2b565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061333960408c2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016948561345c575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6133e76127568f6133e186614c40565b50614c2b565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a280604051613453816145e8565b52604051908152f35b853b15612ab65792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526134ae8680615b02565b60648b0161010090526101648b01906134c692614c9e565b936134d0906147b2565b67ffffffffffffffff1660848a01526134eb60448801614763565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c489015261351490614763565b73ffffffffffffffffffffffffffffffffffffffff1660e48801526135399084615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8884030161010489015261356e9291614c9e565b906135799083615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526135ae9291614c9e565b9160e4016135bb91615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526135f09291614c9e565b908b6024840152604483015203925af18015611bac57613616575b8080808080806133a0565b61362182809261463c565b610311578061360b565b67ffffffffffffffff61363d89614c2b565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a806136b2600260408d200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2613362565b6136e98683614bac565b611fc86040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c9e565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d602011613784575b8161376d6020938361463c565b810103126108f85761377e90614c1e565b38613280565b3d9150613760565b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011613811575b816137fa6020938361463c565b810103126108f85761380b90614c1e565b386131e9565b3d91506137ed565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a85614c40565b50346103115760206003193601126103115760043567ffffffffffffffff81116109005780600401916101006003198336030112610311578060405161387f816145e8565b52606482013590608483019361389485614c40565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361414257602484019177ffffffffffffffff000000000000000000000000000000006138fa84614c2b565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611bac578291614108575b506140e05767ffffffffffffffff61398e84614c2b565b166139a6816000526006602052604060002054151590565b156140b457602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611bac57829161407a575b501561404e57613a1d83614c2b565b613a3260a48701916130736130e58487614bac565b156140445784959667ffffffffffffffff613a4c86614c2b565b168084526007602052613a9e6002604086200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016988991616007565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613e7e575b50505090613b3560e4870182614bac565b8192910160408382031261030d57823567ffffffffffffffff81116108fc5781613b6091850161486a565b9260208101359067ffffffffffffffff8211611d8557613b8192910161486a565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613e7357908592918391613e11575b50613c548373ffffffffffffffffffffffffffffffffffffffff613c6697604051988996879586937fa62085060000000000000000000000000000000000000000000000000000000085526040600486015260448501906146da565b906003198483030160248501526146da565b0393165af18015613e065783928491613d77575b5015613d4f57613c9060209160c4890190614bac565b908092918101031261283e573503613d27575067ffffffffffffffff60209461344385613ce96044613ce27ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614c2b565b9401614c40565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613d89818461463c565b820160608382031261030d57825190613da460208501614c1e565b9360408101519067ffffffffffffffff82116108f8570181601f82011215611d8557805191613dd28361467d565b90613de0604051928361463c565b838252602084840101116108f85790602080613dff94930191016146b7565b9138613c7a565b6040513d85823e3d90fd5b9193949250506020813d602011613e6b575b81613e306020938361463c565b810103126108fc57918491613c548373ffffffffffffffffffffffffffffffffffffffff613e61613c669897614bfd565b9397505050613bf8565b3d9150613e23565b6040513d87823e3d90fd5b813b1561030d579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613ecd91615b02565b606488016101009052610164880190613ee592614c9e565b93613eef906147b2565b67ffffffffffffffff166084870152613f0a60448601614763565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613f3390614763565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613f58908c615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610104860152613f8d9291614c9e565b613f9a60c483018c615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610124860152613fcf9291614c9e565b9060e401613fdd908b615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140129291614c9e565b8c602483015282604483015203925af18015611bac57614034575b8080613b24565b8161403e9161463c565b3861402d565b6136e99083614bac565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d6020116140ac575b816140956020938361463c565b81010312610900576140a690614c1e565b38613a0e565b3d9150614088565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d60201161413a575b816141236020938361463c565b810103126109005761413490614c1e565b38613977565b3d9150614116565b60248273ffffffffffffffffffffffffffffffffffffffff611e4a88614c40565b5034610311576020600319360112610311576040809167ffffffffffffffff61418a614784565b82602085516141988161459d565b8281520152168152600b6020522081516141b18161459d565b60206001835493848452015491019081528251918252516020820152f35b50346103115760c0600319360112610311576141e961471d565b506141f261479b565b6141fa614740565b506084359161ffff831683036103115760a4359067ffffffffffffffff82116103115760a063ffffffff8061ffff614241888861423a3660048b01614805565b5050614a6d565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b5034610311578060031936011261031157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610311576040600319360112610311576142c0614784565b602435918215158303610311576101406143836142dd85856149ea565b61433360409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b5034610311576020600319360112610311576020906143a261471d565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115780600319360112610311575061165d60405161445d60408261463c565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d64657600000000000060208201526040519182916020835260208301906146da565b905034610900576020600319360112610900576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c557602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115614573575b8115614549575b811561451f575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438614518565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150614511565b7f33171031000000000000000000000000000000000000000000000000000000008114915061450a565b6040810190811067ffffffffffffffff8211176145b957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff8211176145b957604052565b60e0810190811067ffffffffffffffff8211176145b957604052565b60a0810190811067ffffffffffffffff8211176145b957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176145b957604052565b67ffffffffffffffff81116145b957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381106146ca5750506000910152565b81810151838201526020016146ba565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614716815180928187528780880191016146b7565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b6004359067ffffffffffffffff8216820361283e57565b6024359067ffffffffffffffff8216820361283e57565b359067ffffffffffffffff8216820361283e57565b3590811515820361283e57565b6024359061ffff8216820361283e57565b6044359061ffff8216820361283e57565b359061ffff8216820361283e57565b9181601f8401121561283e5782359167ffffffffffffffff831161283e576020838186019501011161283e57565b92919261483f8261467d565b9161484d604051938461463c565b82948184528183011161283e578281602093846000960137010152565b9080601f8301121561283e5781602061488593359101614833565b90565b90604060031983011261283e5760043567ffffffffffffffff8116810361283e57916024359067ffffffffffffffff821161283e576148c991600401614805565b9091565b6148859160206148e683516040845260408401906146da565b9201519060208184039101526146da565b9181601f8401121561283e5782359167ffffffffffffffff831161283e576020808501948460051b01011161283e57565b9181601f8401121561283e5782359167ffffffffffffffff831161283e576020808501948460081b01011161283e57565b6040519061496682614620565b60006080838281528260208201528260408201528260608201520152565b9060405161499181614620565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916149fc614959565b50614a05614959565b50614a3957166000526007602052604060002090614885614a2d6002614a32614a2d86614984565b6151fd565b9401614984565b1690816000526003602052614a54614a2d6040600020614984565b916000526004602052614885614a2d6040600020614984565b67ffffffffffffffff16600052600a602052604060002060405190614a9182614604565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c0880152614b935761ffff1680614b2a5750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c1690818110614b6357505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561283e570180359067ffffffffffffffff821161283e5760200191813603831361283e57565b519073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b5190811515820361283e57565b3567ffffffffffffffff8116810361283e5790565b3573ffffffffffffffffffffffffffffffffffffffff8116810361283e5790565b9067ffffffffffffffff61488592166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61488595931681528160208201520191614c9e565b67ffffffffffffffff81116145b95760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614ecb57614dcf9467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614c9e565b916002821015614e9c578380600094819460a483015203915afa908115614e9057600091614dfb575090565b3d8083833e614e0a818361463c565b8101906020818303126108c55780519067ffffffffffffffff821161030d570181601f820112156108c557805190614e4182614cfe565b93614e4f604051958661463c565b82855260208086019360051b8301019384116103115750602001905b828210614e785750505090565b60208091614e8584614bfd565b815201910190614e6b565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614ee160208261463c565b60008152600036813790565b60405190614efa8261459d565b60606020838281520152565b8051821015614f1a5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015614f92575b6020831014614f6357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614f58565b9060405191826000825492614fb084614f49565b808452936001811690811561501e5750600114614fd7575b50614fd59250038361463c565b565b90506000929192526020600020906000915b818310615002575050906020614fd59282010138614fc8565b6020919350806001915483858901015201910190918492614fe9565b60209350614fd59592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614fc8565b67ffffffffffffffff1660005260076020526148856004604060002001614f9c565b9190811015614f1a5760051b0190565b9190811015614f1a5760081b0190565b35801515810361283e5790565b3561ffff8116810361283e5790565b3563ffffffff8116810361283e5790565b359063ffffffff8216820361283e57565b35906fffffffffffffffffffffffffffffffff8216820361283e57565b919082606091031261283e576040516060810181811067ffffffffffffffff8211176145b957604052604061514e818395615135816147c7565b8552615143602082016150de565b6020860152016150de565b910152565b6fffffffffffffffffffffffffffffffff61519160408093615174816147c7565b1515865283615185602083016150de565b166020870152016150de565b16910152565b8181106151a2575050565b60008155600101615197565b818102929181159184041417156151c157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116151c157565b615205614959565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691615262602085019361525c61524f63ffffffff875116426151f0565b85608089015116906151ae565b90615af5565b8082101561527b57505b16825263ffffffff4216905290565b905061526c565b805180156152f2576020036152b457805160208281019183018390031261283e57519060ff82116152b4575060ff1690565b611fc8906040519182917f953576f70000000000000000000000000000000000000000000000000000000083526020600484015260248301906146da565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff82116151c157565b60ff16604d81116151c157600a0a90565b8115615347570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff81169282841461547c5782841161545257906153bb91615318565b91604d60ff8416118015615419575b6153e3575050906153dd6148859261532c565b906151ae565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506154238361532c565b8015615347577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484116153ca565b61545b91615318565b91604d60ff8416116153e3575050906154766148859261532c565b9061533d565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff6001541633036154a457565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b9080511561570e5767ffffffffffffffff81516020830120921691826000526007602052615503816005604060002001615fb2565b156156ca5760005260086020526040600020815167ffffffffffffffff81116145b9576155308254614f49565b601f8111615698575b506020601f82116001146155d257916155ac827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea95936155c2956000916155c7575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90556040519182916020835260208301906146da565b0390a2565b90508401513861557b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b8181106156805750926155c29492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea989610615649575b5050811b019055611649565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388061563d565b9192602060018192868a015181550194019201615602565b6156c490836000526020600020601f840160051c8101916020851061082f57601f0160051c0190615197565b38615539565b5090611fc86040519283927f393b8ad200000000000000000000000000000000000000000000000000000000845260048401526040602484015260448301906146da565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815261580e92909161579d60648461463c565b166000806040958651946157b1888761463c565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d156158bd573d916157f28361467d565b926157ff8751948561463c565b83523d6000602085013e6162c3565b80518061581a57505050565b816020918101031261283e5760206158329101614c1e565b1561583a5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6060916162c3565b815191929115615a47576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff602085015116106159e457614fd591925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615a45604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615ad6575b615a7557614fd59192615908565b606483615a45604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615a67565b919082018092116151c157565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561283e57016020813591019167ffffffffffffffff821161283e57813603831361283e57565b906040519182815491828252602082019060005260206000209260005b818110615b84575050614fd59250038361463c565b8454835260019485019487945060209093019201615b6f565b8054821015614f1a5760005260206000200190600090565b6000818152600660205260409020548015615d44577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151c157600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151c157818103615cd5575b5050506005548015615ca6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615c63816005615b9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615d2c615ce6615cf7936005615b9d565b90549060031b1c9283926005615b9d565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615c2a565b5050600090565b9060018201918160005282602052604060002054801515600014615e76577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151c1578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151c157818103615e3f575b50505080548015615ca6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615e008282615b9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615e5f615e4f615cf79386615b9d565b90549060031b1c92839286615b9d565b905560005283602052604060002055388080615dc8565b50505050600090565b9061ffff9067ffffffffffffffff615e9960208501614c2b565b16600052600a60205260406000208260405191615eb583614604565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c161515910152161515600014615f4b57505b168015615f4357612710615f3c606061488594013592836151ae565b04906151f0565b506060013590565b9050615f20565b80600052600660205260406000205415600014615fac57600554680100000000000000008110156145b957615f93615cf78260018594016005556005615b9d565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615d4457805490680100000000000000008210156145b95782615ff0615cf7846001809601855584615b9d565b905580549260005201602052604060002055600190565b9182549060ff8260a01c161580156162bb575b6162b5576fffffffffffffffffffffffffffffffff8216916001850190815461605f63ffffffff6fffffffffffffffffffffffffffffffff83169360801c16426151f0565b9081616217575b50508481106161cb57508383106160c05750506160956fffffffffffffffffffffffffffffffff9283926151f0565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c92831561615f57816160d8916151f0565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908082116151c15761612661612b9273ffffffffffffffffffffffffffffffffffffffff96615af5565b61533d565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b82869293961161628b576162329261525c9160801c906151ae565b808410156162865750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880616066565b61623d565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b50821561601a565b9192901561633e57508151156162d7575090565b3b156162e05790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156163515750805190602001fd5b611fc8906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906146da56fea164736f6c634300081a000a", } var LombardTokenPoolABI = LombardTokenPoolMetaData.ABI var LombardTokenPoolBin = LombardTokenPoolMetaData.Bin -func DeployLombardTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, verifier common.Address, advancedPoolHooks common.Address, rmnProxy common.Address, router common.Address, fallbackDecimals uint8) (common.Address, *types.Transaction, *LombardTokenPool, error) { +func DeployLombardTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, verifier common.Address, bridge common.Address, adapter common.Address, advancedPoolHooks common.Address, rmnProxy common.Address, router common.Address, fallbackDecimals uint8) (common.Address, *types.Transaction, *LombardTokenPool, error) { parsed, err := LombardTokenPoolMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -118,7 +123,7 @@ func DeployLombardTokenPool(auth *bind.TransactOpts, backend bind.ContractBacken return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LombardTokenPoolBin), backend, token, verifier, advancedPoolHooks, rmnProxy, router, fallbackDecimals) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LombardTokenPoolBin), backend, token, verifier, bridge, adapter, advancedPoolHooks, rmnProxy, router, fallbackDecimals) if err != nil { return common.Address{}, nil, nil, err } @@ -335,6 +340,59 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) GetFee(arg0 common.Addre return _LombardTokenPool.Contract.GetFee(&_LombardTokenPool.CallOpts, arg0, destChainSelector, arg2, arg3, blockConfirmationRequested, arg5) } +func (_LombardTokenPool *LombardTokenPoolCaller) GetLombardConfig(opts *bind.CallOpts) (GetLombardConfig, + + error) { + var out []interface{} + err := _LombardTokenPool.contract.Call(opts, &out, "getLombardConfig") + + outstruct := new(GetLombardConfig) + if err != nil { + return *outstruct, err + } + + outstruct.VerifierResolver = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Bridge = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + outstruct.TokenAdapter = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +func (_LombardTokenPool *LombardTokenPoolSession) GetLombardConfig() (GetLombardConfig, + + error) { + return _LombardTokenPool.Contract.GetLombardConfig(&_LombardTokenPool.CallOpts) +} + +func (_LombardTokenPool *LombardTokenPoolCallerSession) GetLombardConfig() (GetLombardConfig, + + error) { + return _LombardTokenPool.Contract.GetLombardConfig(&_LombardTokenPool.CallOpts) +} + +func (_LombardTokenPool *LombardTokenPoolCaller) GetPath(opts *bind.CallOpts, remoteChainSelector uint64) (LombardTokenPoolPath, error) { + var out []interface{} + err := _LombardTokenPool.contract.Call(opts, &out, "getPath", remoteChainSelector) + + if err != nil { + return *new(LombardTokenPoolPath), err + } + + out0 := *abi.ConvertType(out[0], new(LombardTokenPoolPath)).(*LombardTokenPoolPath) + + return out0, err + +} + +func (_LombardTokenPool *LombardTokenPoolSession) GetPath(remoteChainSelector uint64) (LombardTokenPoolPath, error) { + return _LombardTokenPool.Contract.GetPath(&_LombardTokenPool.CallOpts, remoteChainSelector) +} + +func (_LombardTokenPool *LombardTokenPoolCallerSession) GetPath(remoteChainSelector uint64) (LombardTokenPoolPath, error) { + return _LombardTokenPool.Contract.GetPath(&_LombardTokenPool.CallOpts, remoteChainSelector) +} + func (_LombardTokenPool *LombardTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) @@ -511,9 +569,9 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) GetTokenTransferFeeConfi return _LombardTokenPool.Contract.GetTokenTransferFeeConfig(&_LombardTokenPool.CallOpts, arg0, destChainSelector, arg2, arg3) } -func (_LombardTokenPool *LombardTokenPoolCaller) GetVerifierResolver(opts *bind.CallOpts) (common.Address, error) { +func (_LombardTokenPool *LombardTokenPoolCaller) IBridge(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _LombardTokenPool.contract.Call(opts, &out, "getVerifierResolver") + err := _LombardTokenPool.contract.Call(opts, &out, "i_bridge") if err != nil { return *new(common.Address), err @@ -525,12 +583,12 @@ func (_LombardTokenPool *LombardTokenPoolCaller) GetVerifierResolver(opts *bind. } -func (_LombardTokenPool *LombardTokenPoolSession) GetVerifierResolver() (common.Address, error) { - return _LombardTokenPool.Contract.GetVerifierResolver(&_LombardTokenPool.CallOpts) +func (_LombardTokenPool *LombardTokenPoolSession) IBridge() (common.Address, error) { + return _LombardTokenPool.Contract.IBridge(&_LombardTokenPool.CallOpts) } -func (_LombardTokenPool *LombardTokenPoolCallerSession) GetVerifierResolver() (common.Address, error) { - return _LombardTokenPool.Contract.GetVerifierResolver(&_LombardTokenPool.CallOpts) +func (_LombardTokenPool *LombardTokenPoolCallerSession) IBridge() (common.Address, error) { + return _LombardTokenPool.Contract.IBridge(&_LombardTokenPool.CallOpts) } func (_LombardTokenPool *LombardTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { @@ -599,28 +657,6 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) IsSupportedToken(token c return _LombardTokenPool.Contract.IsSupportedToken(&_LombardTokenPool.CallOpts, token) } -func (_LombardTokenPool *LombardTokenPoolCaller) LockOrBurn(opts *bind.CallOpts, arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) { - var out []interface{} - err := _LombardTokenPool.contract.Call(opts, &out, "lockOrBurn", arg0) - - if err != nil { - return *new(PoolLockOrBurnOutV1), err - } - - out0 := *abi.ConvertType(out[0], new(PoolLockOrBurnOutV1)).(*PoolLockOrBurnOutV1) - - return out0, err - -} - -func (_LombardTokenPool *LombardTokenPoolSession) LockOrBurn(arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) { - return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.CallOpts, arg0) -} - -func (_LombardTokenPool *LombardTokenPoolCallerSession) LockOrBurn(arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) { - return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.CallOpts, arg0) -} - func (_LombardTokenPool *LombardTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "owner") @@ -643,28 +679,6 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) Owner() (common.Address, return _LombardTokenPool.Contract.Owner(&_LombardTokenPool.CallOpts) } -func (_LombardTokenPool *LombardTokenPoolCaller) ReleaseOrMint(opts *bind.CallOpts, arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) { - var out []interface{} - err := _LombardTokenPool.contract.Call(opts, &out, "releaseOrMint", arg0) - - if err != nil { - return *new(PoolReleaseOrMintOutV1), err - } - - out0 := *abi.ConvertType(out[0], new(PoolReleaseOrMintOutV1)).(*PoolReleaseOrMintOutV1) - - return out0, err - -} - -func (_LombardTokenPool *LombardTokenPoolSession) ReleaseOrMint(arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) { - return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.CallOpts, arg0) -} - -func (_LombardTokenPool *LombardTokenPoolCallerSession) ReleaseOrMint(arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) { - return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.CallOpts, arg0) -} - func (_LombardTokenPool *LombardTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) @@ -757,6 +771,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) ApplyTokenTransferFe return _LombardTokenPool.Contract.ApplyTokenTransferFeeConfigUpdates(&_LombardTokenPool.TransactOpts, tokenTransferFeeConfigArgs, disableTokenTransferFeeConfigs) } +func (_LombardTokenPool *LombardTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_LombardTokenPool *LombardTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.TransactOpts, lockOrBurnIn) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) LockOrBurn0(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1, blockConfirmationRequested uint16, tokenArgs []byte) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "lockOrBurn0", lockOrBurnIn, blockConfirmationRequested, tokenArgs) } @@ -769,6 +795,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) LockOrBurn0(lockOrBu return _LombardTokenPool.Contract.LockOrBurn0(&_LombardTokenPool.TransactOpts, lockOrBurnIn, blockConfirmationRequested, tokenArgs) } +func (_LombardTokenPool *LombardTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_LombardTokenPool *LombardTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.TransactOpts, releaseOrMintIn) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) ReleaseOrMint0(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1, blockConfirmationRequested uint16) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "releaseOrMint0", releaseOrMintIn, blockConfirmationRequested) } @@ -781,6 +819,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) ReleaseOrMint0(relea return _LombardTokenPool.Contract.ReleaseOrMint0(&_LombardTokenPool.TransactOpts, releaseOrMintIn, blockConfirmationRequested) } +func (_LombardTokenPool *LombardTokenPoolTransactor) RemovePath(opts *bind.TransactOpts, remoteChainSelector uint64) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "removePath", remoteChainSelector) +} + +func (_LombardTokenPool *LombardTokenPoolSession) RemovePath(remoteChainSelector uint64) (*types.Transaction, error) { + return _LombardTokenPool.Contract.RemovePath(&_LombardTokenPool.TransactOpts, remoteChainSelector) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) RemovePath(remoteChainSelector uint64) (*types.Transaction, error) { + return _LombardTokenPool.Contract.RemovePath(&_LombardTokenPool.TransactOpts, remoteChainSelector) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) } @@ -805,6 +855,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) SetDynamicConfig(rou return _LombardTokenPool.Contract.SetDynamicConfig(&_LombardTokenPool.TransactOpts, router, minBlockConfirmations, rateLimitAdmin) } +func (_LombardTokenPool *LombardTokenPoolTransactor) SetPath(opts *bind.TransactOpts, remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "setPath", remoteChainSelector, lChainId, allowedCaller) +} + +func (_LombardTokenPool *LombardTokenPoolSession) SetPath(remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) { + return _LombardTokenPool.Contract.SetPath(&_LombardTokenPool.TransactOpts, remoteChainSelector, lChainId, allowedCaller) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) SetPath(remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) { + return _LombardTokenPool.Contract.SetPath(&_LombardTokenPool.TransactOpts, remoteChainSelector, lChainId, allowedCaller) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) SetRateLimitConfig(opts *bind.TransactOpts, rateLimitConfigArgs []TokenPoolRateLimitConfigArgs) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "setRateLimitConfig", rateLimitConfigArgs) } @@ -1851,8 +1913,8 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) ParseLockedOrBurned(log types return event, nil } -type LombardTokenPoolLombardVerifierSetIterator struct { - Event *LombardTokenPoolLombardVerifierSet +type LombardTokenPoolLombardConfigurationSetIterator struct { + Event *LombardTokenPoolLombardConfigurationSet contract *bind.BoundContract event string @@ -1863,7 +1925,7 @@ type LombardTokenPoolLombardVerifierSetIterator struct { fail error } -func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { +func (it *LombardTokenPoolLombardConfigurationSetIterator) Next() bool { if it.fail != nil { return false @@ -1872,7 +1934,7 @@ func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(LombardTokenPoolLombardVerifierSet) + it.Event = new(LombardTokenPoolLombardConfigurationSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1887,7 +1949,7 @@ func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(LombardTokenPoolLombardVerifierSet) + it.Event = new(LombardTokenPoolLombardConfigurationSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1902,42 +1964,60 @@ func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { } } -func (it *LombardTokenPoolLombardVerifierSetIterator) Error() error { +func (it *LombardTokenPoolLombardConfigurationSetIterator) Error() error { return it.fail } -func (it *LombardTokenPoolLombardVerifierSetIterator) Close() error { +func (it *LombardTokenPoolLombardConfigurationSetIterator) Close() error { it.sub.Unsubscribe() return nil } -type LombardTokenPoolLombardVerifierSet struct { - Verifier common.Address - Raw types.Log +type LombardTokenPoolLombardConfigurationSet struct { + Verifier common.Address + Bridge common.Address + TokenAdapter common.Address + Raw types.Log } -func (_LombardTokenPool *LombardTokenPoolFilterer) FilterLombardVerifierSet(opts *bind.FilterOpts, verifier []common.Address) (*LombardTokenPoolLombardVerifierSetIterator, error) { +func (_LombardTokenPool *LombardTokenPoolFilterer) FilterLombardConfigurationSet(opts *bind.FilterOpts, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (*LombardTokenPoolLombardConfigurationSetIterator, error) { var verifierRule []interface{} for _, verifierItem := range verifier { verifierRule = append(verifierRule, verifierItem) } + var bridgeRule []interface{} + for _, bridgeItem := range bridge { + bridgeRule = append(bridgeRule, bridgeItem) + } + var tokenAdapterRule []interface{} + for _, tokenAdapterItem := range tokenAdapter { + tokenAdapterRule = append(tokenAdapterRule, tokenAdapterItem) + } - logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "LombardVerifierSet", verifierRule) + logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "LombardConfigurationSet", verifierRule, bridgeRule, tokenAdapterRule) if err != nil { return nil, err } - return &LombardTokenPoolLombardVerifierSetIterator{contract: _LombardTokenPool.contract, event: "LombardVerifierSet", logs: logs, sub: sub}, nil + return &LombardTokenPoolLombardConfigurationSetIterator{contract: _LombardTokenPool.contract, event: "LombardConfigurationSet", logs: logs, sub: sub}, nil } -func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardVerifierSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardVerifierSet, verifier []common.Address) (event.Subscription, error) { +func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardConfigurationSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardConfigurationSet, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (event.Subscription, error) { var verifierRule []interface{} for _, verifierItem := range verifier { verifierRule = append(verifierRule, verifierItem) } + var bridgeRule []interface{} + for _, bridgeItem := range bridge { + bridgeRule = append(bridgeRule, bridgeItem) + } + var tokenAdapterRule []interface{} + for _, tokenAdapterItem := range tokenAdapter { + tokenAdapterRule = append(tokenAdapterRule, tokenAdapterItem) + } - logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "LombardVerifierSet", verifierRule) + logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "LombardConfigurationSet", verifierRule, bridgeRule, tokenAdapterRule) if err != nil { return nil, err } @@ -1947,8 +2027,8 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardVerifierSet(opts select { case log := <-logs: - event := new(LombardTokenPoolLombardVerifierSet) - if err := _LombardTokenPool.contract.UnpackLog(event, "LombardVerifierSet", log); err != nil { + event := new(LombardTokenPoolLombardConfigurationSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "LombardConfigurationSet", log); err != nil { return err } event.Raw = log @@ -1969,9 +2049,9 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardVerifierSet(opts }), nil } -func (_LombardTokenPool *LombardTokenPoolFilterer) ParseLombardVerifierSet(log types.Log) (*LombardTokenPoolLombardVerifierSet, error) { - event := new(LombardTokenPoolLombardVerifierSet) - if err := _LombardTokenPool.contract.UnpackLog(event, "LombardVerifierSet", log); err != nil { +func (_LombardTokenPool *LombardTokenPoolFilterer) ParseLombardConfigurationSet(log types.Log) (*LombardTokenPoolLombardConfigurationSet, error) { + event := new(LombardTokenPoolLombardConfigurationSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "LombardConfigurationSet", log); err != nil { return nil, err } event.Raw = log @@ -2379,6 +2459,280 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) ParseOwnershipTransferred(log return event, nil } +type LombardTokenPoolPathRemovedIterator struct { + Event *LombardTokenPoolPathRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LombardTokenPoolPathRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LombardTokenPoolPathRemoved) + 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(LombardTokenPoolPathRemoved) + 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 *LombardTokenPoolPathRemovedIterator) Error() error { + return it.fail +} + +func (it *LombardTokenPoolPathRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LombardTokenPoolPathRemoved struct { + RemoteChainSelector uint64 + LChainId [32]byte + AllowedCaller [32]byte + Raw types.Log +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) FilterPathRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "PathRemoved", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return &LombardTokenPoolPathRemovedIterator{contract: _LombardTokenPool.contract, event: "PathRemoved", logs: logs, sub: sub}, nil +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) WatchPathRemoved(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathRemoved, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "PathRemoved", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LombardTokenPoolPathRemoved) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathRemoved", 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 (_LombardTokenPool *LombardTokenPoolFilterer) ParsePathRemoved(log types.Log) (*LombardTokenPoolPathRemoved, error) { + event := new(LombardTokenPoolPathRemoved) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LombardTokenPoolPathSetIterator struct { + Event *LombardTokenPoolPathSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LombardTokenPoolPathSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LombardTokenPoolPathSet) + 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(LombardTokenPoolPathSet) + 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 *LombardTokenPoolPathSetIterator) Error() error { + return it.fail +} + +func (it *LombardTokenPoolPathSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LombardTokenPoolPathSet struct { + RemoteChainSelector uint64 + LChainId [32]byte + AllowedCaller [32]byte + Raw types.Log +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) FilterPathSet(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathSetIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "PathSet", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return &LombardTokenPoolPathSetIterator{contract: _LombardTokenPool.contract, event: "PathSet", logs: logs, sub: sub}, nil +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) WatchPathSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathSet, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "PathSet", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LombardTokenPoolPathSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathSet", 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 (_LombardTokenPool *LombardTokenPoolFilterer) ParsePathSet(log types.Log) (*LombardTokenPoolPathSet, error) { + event := new(LombardTokenPoolPathSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + type LombardTokenPoolRateLimitConfiguredIterator struct { Event *LombardTokenPoolRateLimitConfigured @@ -3167,6 +3521,11 @@ type GetFee struct { TokenFeeBps uint16 IsEnabled bool } +type GetLombardConfig struct { + VerifierResolver common.Address + Bridge common.Address + TokenAdapter common.Address +} func (LombardTokenPoolChainAdded) Topic() common.Hash { return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") @@ -3200,8 +3559,8 @@ func (LombardTokenPoolLockedOrBurned) Topic() common.Hash { return common.HexToHash("0xf33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae10") } -func (LombardTokenPoolLombardVerifierSet) Topic() common.Hash { - return common.HexToHash("0xa817b8930bcb4b25cbd026589d9815aceaf8ec0882ebf9bdf32f1e22f69ff745") +func (LombardTokenPoolLombardConfigurationSet) Topic() common.Hash { + return common.HexToHash("0x01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d") } func (LombardTokenPoolOutboundRateLimitConsumed) Topic() common.Hash { @@ -3216,6 +3575,14 @@ func (LombardTokenPoolOwnershipTransferred) Topic() common.Hash { return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") } +func (LombardTokenPoolPathRemoved) Topic() common.Hash { + return common.HexToHash("0x8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b") +} + +func (LombardTokenPoolPathSet) Topic() common.Hash { + return common.HexToHash("0x83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c9") +} + func (LombardTokenPoolRateLimitConfigured) Topic() common.Hash { return common.HexToHash("0x41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb") } @@ -3257,6 +3624,12 @@ type LombardTokenPoolInterface interface { error) + GetLombardConfig(opts *bind.CallOpts) (GetLombardConfig, + + error) + + GetPath(opts *bind.CallOpts, remoteChainSelector uint64) (LombardTokenPoolPath, error) + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) @@ -3273,7 +3646,7 @@ type LombardTokenPoolInterface interface { GetTokenTransferFeeConfig(opts *bind.CallOpts, arg0 common.Address, destChainSelector uint64, arg2 uint16, arg3 []byte) (IPoolV2TokenTransferFeeConfig, error) - GetVerifierResolver(opts *bind.CallOpts) (common.Address, error) + IBridge(opts *bind.CallOpts) (common.Address, error) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) @@ -3281,12 +3654,8 @@ type LombardTokenPoolInterface interface { IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) - LockOrBurn(opts *bind.CallOpts, arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) - Owner(opts *bind.CallOpts) (common.Address, error) - ReleaseOrMint(opts *bind.CallOpts, arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) - SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) TypeAndVersion(opts *bind.CallOpts) (string, error) @@ -3299,14 +3668,22 @@ type LombardTokenPoolInterface interface { ApplyTokenTransferFeeConfigUpdates(opts *bind.TransactOpts, tokenTransferFeeConfigArgs []TokenPoolTokenTransferFeeConfigArgs, disableTokenTransferFeeConfigs []uint64) (*types.Transaction, error) + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + LockOrBurn0(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1, blockConfirmationRequested uint16, tokenArgs []byte) (*types.Transaction, error) + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + ReleaseOrMint0(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1, blockConfirmationRequested uint16) (*types.Transaction, error) + RemovePath(opts *bind.TransactOpts, remoteChainSelector uint64) (*types.Transaction, error) + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) SetDynamicConfig(opts *bind.TransactOpts, router common.Address, minBlockConfirmations uint16, rateLimitAdmin common.Address) (*types.Transaction, error) + SetPath(opts *bind.TransactOpts, remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) + SetRateLimitConfig(opts *bind.TransactOpts, rateLimitConfigArgs []TokenPoolRateLimitConfigArgs) (*types.Transaction, error) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) @@ -3361,11 +3738,11 @@ type LombardTokenPoolInterface interface { ParseLockedOrBurned(log types.Log) (*LombardTokenPoolLockedOrBurned, error) - FilterLombardVerifierSet(opts *bind.FilterOpts, verifier []common.Address) (*LombardTokenPoolLombardVerifierSetIterator, error) + FilterLombardConfigurationSet(opts *bind.FilterOpts, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (*LombardTokenPoolLombardConfigurationSetIterator, error) - WatchLombardVerifierSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardVerifierSet, verifier []common.Address) (event.Subscription, error) + WatchLombardConfigurationSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardConfigurationSet, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (event.Subscription, error) - ParseLombardVerifierSet(log types.Log) (*LombardTokenPoolLombardVerifierSet, error) + ParseLombardConfigurationSet(log types.Log) (*LombardTokenPoolLombardConfigurationSet, error) FilterOutboundRateLimitConsumed(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LombardTokenPoolOutboundRateLimitConsumedIterator, error) @@ -3385,6 +3762,18 @@ type LombardTokenPoolInterface interface { ParseOwnershipTransferred(log types.Log) (*LombardTokenPoolOwnershipTransferred, error) + FilterPathRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathRemovedIterator, error) + + WatchPathRemoved(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathRemoved, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) + + ParsePathRemoved(log types.Log) (*LombardTokenPoolPathRemoved, error) + + FilterPathSet(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathSetIterator, error) + + WatchPathSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathSet, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) + + ParsePathSet(log types.Log) (*LombardTokenPoolPathSet, error) + FilterRateLimitConfigured(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LombardTokenPoolRateLimitConfiguredIterator, error) WatchRateLimitConfigured(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolRateLimitConfigured, remoteChainSelector []uint64) (event.Subscription, error) diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index b0aa8d9639..9416a000a3 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -259,14 +259,14 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21811) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97332) -LombardTokenPool_constructor:test_constructor() (gas: 4527336) -LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 323898) -LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95305) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98499) +LombardTokenPool_constructor:test_constructor() (gas: 4535154) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 323907) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95314) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98508) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 315565) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5195862) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5203680) LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 247408) LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 490553) LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54568) diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 5e99cb0d78..c088b4282e 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,7 +21,7 @@ hybrid_lock_release_usdc_token_pool: ../solc/ccip/HybridLockReleaseUSDCTokenPool hyper_liquid_compatible_erc20: ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.abi.json ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.bin 1b825f6c2f7ba630ca0dbacb241c6a8cb16a5aa62cc152f5fefe40166c3d96f6 lock_release_token_pool: ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin 08155c106ddbc4c8d584a1a844030681ac5f82a95272ecfbb11fca31d5fd65cd log_message_data_receiver: ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.abi.json ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.bin 6fe60e48711884eae82dd95cabb1c66a5644336719fa1219df1ceceec11e6bce -lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 452027b48e67b27d17c8c5c2ec3146aba5b4277009618dcbd7cc6e4d26e6df6e +lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 4c47f591d4a817fa0a47a21d9ea651e0e51028940b8cfa89fa8bcb8df997bab2 maybe_revert_message_receiver: ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin ee264f67a2356cc4eebe839a5a88367cbcdc27a7520cca56263319e9afe97a1a message_hasher: ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin cb3448514ff88dd019316135cf6c10f6b0d6afcb8ded227884c910efe4274ba1 mock_lbtc_token_pool: ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.abi.json ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.bin ec43e91571836b9cf45e1a0ebdcea8dc5540e510cd96bf6560aaff6ec2ba8f11 From c700ee6e0354484b77c35152974bcffe6fe1f473 Mon Sep 17 00:00:00 2001 From: Suryansh <39276431+0xsuryansh@users.noreply.github.com> Date: Wed, 3 Dec 2025 21:32:45 +0530 Subject: [PATCH 07/16] Lombard Token Pool v2 flow (#1437) --- .../LombardTokenPool._lockOrBurn.t.sol | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol new file mode 100644 index 0000000000..084a10d8db --- /dev/null +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.24; + +import {Pool} from "../../../libraries/Pool.sol"; + +import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; +import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; + +contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { + function setUp() public virtual override { + super.setUp(); + vm.startPrank(s_allowedOnRamp); + } + + function test_lockOrBurn_ForwardsToVerifier() public { + uint256 amount = 1e18; + deal(address(s_token), address(s_pool), amount); + + (Pool.LockOrBurnOutV1 memory out, uint256 destAmount) = s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encodePacked(address(0xDEAD)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: amount, + localToken: address(s_token) + }), + 0, + "" + ); + + assertEq(destAmount, amount); + assertEq(out.destTokenAddress, abi.encode(s_remoteToken)); + assertEq(out.destPoolData, abi.encode(uint8(DEFAULT_TOKEN_DECIMALS))); + assertEq(s_token.balanceOf(s_verifierResolver.getOutboundImplementation(DEST_CHAIN_SELECTOR, "")), amount); + assertEq(s_token.balanceOf(address(s_pool)), 0); + } + + function test_lockOrBurn_RevertWhen_OutboundImplementationNotFoundForVerifier() public { + uint256 amount = 1e18; + deal(address(s_token), address(s_pool), amount); + vm.mockCall( + address(s_verifierResolver), + abi.encodeCall(s_verifierResolver.getOutboundImplementation, (DEST_CHAIN_SELECTOR, "")), + abi.encode(address(0)) + ); + + vm.expectRevert(LombardTokenPool.OutboundImplementationNotFoundForVerifier.selector); + s_pool.lockOrBurn( + Pool.LockOrBurnInV1({ + receiver: abi.encodePacked(address(0xDEAD)), + remoteChainSelector: DEST_CHAIN_SELECTOR, + originalSender: OWNER, + amount: amount, + localToken: address(s_token) + }), + 0, + "" + ); + } +} From 4d79408f515e2e2e0b362cf7f993d2c53fe04961 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 15:19:34 +0530 Subject: [PATCH 08/16] comments fix --- .../evm/contracts/pools/Lombard/LombardTokenPool.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index 6ff984ca06..14a8ef4fff 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -36,13 +36,13 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { error ExecutionError(); error HashMismatch(); - /// @param remoteChainSelector CCIP selector of destination chain - /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion - /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message + /// @param remoteChainSelector CCIP selector of destination chain. + /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion. + /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message. event PathSet(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); - /// @param remoteChainSelector CCIP selector of destination chain - /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion - /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message + /// @param remoteChainSelector CCIP selector of destination chain. + /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion. + /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message. event PathRemoved(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); event LombardConfigurationSet(address indexed verifier, address indexed bridge, address indexed tokenAdapter); From 6f0223c6700e68270a23820ea2eae68b821e6a00 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 15:55:17 +0530 Subject: [PATCH 09/16] snapshot fix --- chains/evm/.gas-snapshot | 1 + chains/evm/contracts/pools/Lombard/LombardTokenPool.sol | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index 9416a000a3..297dc21e0a 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -265,6 +265,7 @@ LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 953 LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98508) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) +LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247181) LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 315565) LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5203680) LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 247408) diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index 14a8ef4fff..7d7314fd9b 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -221,7 +221,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { revert ZeroLombardChainId(); } - // only remote pool is expected allowed caller + // only remote pool is expected allowed caller. if (!isRemotePool(remoteChainSelector, allowedCaller)) { revert InvalidRemotePoolForChain(remoteChainSelector, allowedCaller); } From 04d79fb9a93a473899487f0e30e4c7695735cc07 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Thu, 4 Dec 2025 19:27:36 +0530 Subject: [PATCH 10/16] minor comment + test fixes --- .../lombard_token_pool/lombard_token_pool.go | 2 +- chains/evm/.gas-snapshot | 14 ++--- .../interfaces/lombard/IBridgeV2.sol | 36 ----------- .../contracts/interfaces/lombard/IMailbox.sol | 16 ----- .../pools/Lombard/LombardTokenPool.sol | 13 +++- .../pools/Lombard/interfaces/IBridgeV2.sol | 59 +++++++++++-------- .../test/mocks/MockLombardBridgeV2.sol | 12 ++++ .../LombardTokenPool.lockOrBurn.t.sol | 8 +-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 9 files changed, 70 insertions(+), 92 deletions(-) delete mode 100644 chains/evm/contracts/interfaces/lombard/IBridgeV2.sol delete mode 100644 chains/evm/contracts/interfaces/lombard/IMailbox.sol diff --git a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go index 0f7b264633..de0d0ff7da 100644 --- a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go +++ b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go @@ -107,7 +107,7 @@ type TokenPoolTokenTransferFeeConfigArgs struct { var LombardTokenPoolMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV2\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV2\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", - Bin: "0x610160806040523461031b576101008161685e803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a461639c90816104c2823960805181818161178f015281816122a30152818161245b0152818161311e01528181613311015281816133ed0152818161368a015281816138ac01528181613a76015281816143bc0152614416015260a051818181611a2f01528181614282015281816152f60152615379015260c051818181610d9d0152818161186b0152818161233d015281816131b90152613947015260e05181818161197e015281816124e20152818161337901528181613afd0152614d33015261010051818181610b09015281816125a201528181612dfb0152613bc4015261012051818181610ad0015261173c015261014051818181610b45015261254e0152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461449b57508063181f5a771461443a57806321df0da7146143e9578063240028e8146143855780632422ac45146142a657806324f65ee7146142685780632c063404146141cf57806338ff8c3814614163578063390775371461383a578063489a68f2146130795780634c5ef0ed146130325780635fa1356514612ea657806362ddd3c414612e1f578063708e1f7914612dce5780637437ff9f14612d7d57806379ba509714612cb65780638926f54f14612c7057806389720a6214612ba95780638da5cb5b14612b755780639a4575b91461222c5780639c893fe91461215f578063a42a7b8b14611ff8578063acfecf9114611ee2578063b1c71c6514611661578063b794658014611624578063c4bffe2b146114f9578063c7230a601461134c578063d8aa3f4014611212578063dc04fa1f14610dc1578063dc0bd97114610d70578063dcbd41bc14610b6c578063dd65bdb114610aa3578063e8a1da17146103e3578063f2fde38b146103145763fdf16875146101a257600080fd5b34610311576060600319360112610311576101bb61471d565b906101c46147d4565b6044359273ffffffffffffffffffffffffffffffffffffffff841680850361030d576101ee615483565b73ffffffffffffffffffffffffffffffffffffffff821680156102e557946102df917fba9213054b14c2e884f779120bb196f0735cef27140498a9d26117eeab77a1179596600254907fffffffffffffffffffff0000000000000000000000000000000000000000000075ffff00000000000000000000000000000000000000008860a01b16921617176002557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556040519384938491604091949361ffff73ffffffffffffffffffffffffffffffffffffffff9283606087019816865216602085015216910152565b0390a180f35b6004857f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b80fd5b50346103115760206003193601126103115773ffffffffffffffffffffffffffffffffffffffff61034361471d565b61034b615483565b163381146103bb57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346103115760406003193601126103115760043567ffffffffffffffff8111610900576104159036906004016148f7565b9060243567ffffffffffffffff811161030d5790610438849236906004016148f7565b939091610443615483565b83905b8282106109085750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610904578060051b830135858112156108fc578301610120813603126108fc57604051946104aa86614620565b6104b3826147b2565b8652602082013567ffffffffffffffff81116109005782019436601f87011215610900578535956104e387614cfe565b966104f1604051988961463c565b80885260208089019160051b830101903682116108fc5760208301905b8282106108c9575050505060208701958652604083013567ffffffffffffffff81116108c557610541903690850161486a565b916040880192835261056b61055936606087016150fb565b9460608a0195865260c03691016150fb565b95608089019687528351511561089d5761058f67ffffffffffffffff8a5116615f52565b156108665767ffffffffffffffff89511682526007602052604082206105b68651826158c5565b6105c48851600283016158c5565b6004855191019080519067ffffffffffffffff8211610839576105e78354614f49565b601f81116107fe575b50602090601f831160011461075f5761063e9291869183610754575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b88518051821015610678579061067260019261066b8367ffffffffffffffff8f511692614f06565b51906154ce565b01610643565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074667ffffffffffffffff60019796949851169251935191516107126106dd604051968796875261010060208801526101008701906146da565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a1019392909193610479565b015190508e8061060c565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e657509084600195949392106107af575b505050811b019055610641565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a2565b9293602060018192878601518155019501930161078c565b6108299084875260208720601f850160051c8101916020861061082f575b601f0160051c0190615197565b8d6105f0565b909150819061081c565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108f8576020916108ed839283369189010161486a565b81520191019061050e565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092a6109258486889a9699979a615080565b614c2b565b169161093583615bb5565b15610a7757828452600760205261095160056040862001615b52565b94845b865181101561098a5760019085875260076020526109836005604089200161097c838b614f06565b5190615d4b565b5001610954565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c68154614f49565b80610a36575b5050500180549088815581610a18575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610446565b885260208820908101905b818110156109dc57888155600101610a23565b601f8111600114610a4c5750555b888a806109cc565b81835260208320610a6791601f01861c810190600101615197565b8082528160208120915555610a44565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b5034610311578060031936011261031157606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346103115760206003193601126103115760043567ffffffffffffffff811161090057610b9e903690600401614928565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d4e575b610d2257825b818110610bd1578380f35b610bdc818385615090565b67ffffffffffffffff610bee82614c2b565b1690610c07826000526006602052604060002054151590565b15610cf657907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cb6610c90602060019897018b610c48826150a0565b15610cbd578790526003602052610c6f60408d20610c6936604088016150fb565b906158c5565b868c526004602052610c8b60408d20610c693660a088016150fb565b6150a0565b916040519215158352610ca96020840160408301615153565b60a0608084019101615153565ba201610bc6565b60026040828a610c8b94526007602052610cdf828220610c6936858c016150fb565b8a815260076020522001610c693660a088016150fb565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc0565b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115760406003193601126103115760043567ffffffffffffffff811161090057610df3903690600401614928565b60243567ffffffffffffffff811161030d57610e139036906004016148f7565b919092610e1e615483565b845b828110610e8a57505050825b818110610e37578380f35b8067ffffffffffffffff610e516109256001948688615080565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e2c565b610e98610925828585615090565b610ea3828585615090565b90602082019060e0830190610eb7826150a0565b156111dd5760a0840161271061ffff610ecf836150ad565b1610156111ce5760c085019161271061ffff610eea856150ad565b1610156111965763ffffffff610eff866150bc565b16156111615767ffffffffffffffff1694858c52600a60205260408c20610f25866150bc565b63ffffffff16908054906040840191610f3d836150bc565b60201b67ffffffff0000000016936060860194610f59866150bc565b60401b6bffffffff0000000000000000169660800196610f78886150bc565b60601b6fffffffff0000000000000000000000001691610f978a6150ad565b60801b71ffff000000000000000000000000000000001693610fb88c6150ad565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16171717815561106b876150a0565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110bc906150cd565b63ffffffff1687526110cd906150cd565b63ffffffff1660208701526110e1906150cd565b63ffffffff1660408601526110f5906150cd565b63ffffffff166060850152611109906147f6565b61ffff16608084015261111b906147f6565b61ffff1660a083015261112d906147c7565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e20565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111a5866150ad565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111a56024936150ad565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346103115760806003193601126103115761122c61471d565b5061123561479b565b61123d6147e5565b5060643567ffffffffffffffff81116108c5579167ffffffffffffffff60409261126d60e0953690600401614805565b50508260c0855161127d81614604565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112b582614604565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346103115760406003193601126103115760043567ffffffffffffffff81116109005761137e9036906004016148f7565b9060243573ffffffffffffffffffffffffffffffffffffffff8116908181036108fc576113a9615483565b845b8481106113b6578580f35b80602073ffffffffffffffffffffffffffffffffffffffff6113e36113de6024958a8a615080565b614c40565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114ee5787906114b8575b6001925080611434575b50016113ab565b611462818573ffffffffffffffffffffffffffffffffffffffff61145c6113de878d8d615080565b16615738565b847f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff6114a96113de878d8d615080565b1693604051908152a33861142d565b509060203d81116114e7575b6114ce818361463c565b6020826000928101031261031157509060019151611423565b503d6114c4565b6040513d89823e3d90fd5b5034610311578060031936011261031157604051906005548083528260208101600584526020842092845b81811061160b5750506115399250038361463c565b815161155d61154782614cfe565b91611555604051938461463c565b808352614cfe565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bc578067ffffffffffffffff6115a960019388614f06565b51166115b58286614f06565b520161158a565b50925090604051928392602084019060208552518091526040840192915b8181106115e8575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115da565b8454835260019485019487945060209093019201611524565b50346103115760206003193601126103115761165d611649611644614784565b61505e565b6040519182916020835260208301906146da565b0390f35b5034610311576060600319360112610311576004359067ffffffffffffffff8211610311578160040160a06003198436030112610900576116a06147d4565b9060443567ffffffffffffffff811161030d576116c1903690600401614805565b9390946116cc614eed565b5060248101956116db87614c2b565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ed7578492611e9b575b5073ffffffffffffffffffffffffffffffffffffffff821615611e73576117cf907f0000000000000000000000000000000000000000000000000000000000000000976117bf606486013580958b615738565b6117c7614eed565b503691614833565b60848301926117dd84614c40565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e295777ffffffffffffffff0000000000000000000000000000000061181e8a614c2b565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611d91578691611def575b50611dc75767ffffffffffffffff6118b28a614c2b565b166118ca816000526006602052604060002054151590565b15611d9c57602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015611d91578690611d40575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d145761ffff8716918215611c825761ffff60025460a01c1680611bb7575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a95575b611a8b8a611a276116448e6119ba8e8e615e7f565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6119ee84614c2b565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614c2b565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611a6360408261463c565b60405192611a708461459d565b835260208301526040519283926040845260408401906148cd565b9060208301520390f35b833b156108f8578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611ae491615b02565b6064890160a09052610104890190611afb92614c9e565b94611b05906147b2565b67ffffffffffffffff166084880152604401611b2090614763565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611b4990614763565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b7e916146da565b03925af18015611bac57611b97575b80808080806119a5565b611ba282809261463c565b6103115780611b8d565b6040513d84823e3d90fd5b808410611c52575067ffffffffffffffff611bd18b614c2b565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611c248d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611965565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611c948b614c2b565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611ce78d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611967565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611d89575b81611d5a6020938361463c565b81010312611d8557611d8073ffffffffffffffffffffffffffffffffffffffff91614bfd565b61192b565b8580fd5b3d9150611d4d565b6040513d88823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e21575b81611e0a6020938361463c565b81010312611d8557611e1b90614c1e565b3861189b565b3d9150611dfd565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a87614c40565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ecf575b81611eb76020938361463c565b8101031261030d57611ec890614bfd565b903861176c565b3d9150611eaa565b6040513d86823e3d90fd5b503461031157611ef136614888565b611ef9615483565b67ffffffffffffffff831692611f1c846000526006602052604060002054151590565b15611fcc578385526007602052611f4b60056040872001611f3e368587614833565b6020815191012090615d4b565b15611f915750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611f8b604051928392602084526020840191614c9e565b0390a280f35b90611fc8906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614cdd565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115767ffffffffffffffff61201b614784565b168152600760205261203260056040832001615b52565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061207761206183614cfe565b9261206f604051948561463c565b808452614cfe565b01835b81811061214e575050825b82518110156120cb578061209b60019285614f06565b51855260086020526120af60408620614f9c565b6120b98285614f06565b526120c48184614f06565b5001612085565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b82821061210357505050500390f35b9193602061213e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288516146da565b96019201920185949391926120f4565b80606060208093860101520161207a565b50346103115760206003193601126103115767ffffffffffffffff612182614784565b61218a615483565b16808252600b6020526040822090604051916121a58361459d565b600181549182855201549060208401918252156122005760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115760043567ffffffffffffffff8111610900578060040160a060031983360301126108c55761226a614eed565b5060405160209261227b848361463c565b8482526084810161228b81614c40565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b5457602482019377ffffffffffffffff000000000000000000000000000000006122f186614c2b565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612ac1578891612b1f575b50612af75767ffffffffffffffff61238486614c2b565b1661239c816000526006602052604060002054151590565b15612acc578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612ac1578890612a75575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a495786606484013594859367ffffffffffffffff61243589614c2b565b1680845260078a526124836040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a91616007565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081612937575b5050505067ffffffffffffffff61251f86614c2b565b168752600b8652604087206040516125368161459d565b6001825492838352015491888201928352156128f9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128f157905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128e6578c916128b9575b506126326116448b614c2b565b8b815191818082019384920101031261283e57519081810361288b5750508961265b8680614bac565b90500361284357604490519601958961267d61267689614c40565b9680614bac565b908092918101031261283e57604094610104938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977e8a119800000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a484015260e060c48401528160e48401525af19687156128325780976127d1575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611a1f6116449661275c6127566127939a614c2b565b93614c40565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b9160405190828201528181526127aa60408261463c565b604051926127b78461459d565b83528183015261165d6040519282849384528301906148cd565b909196506040823d60401161282a575b816127ee6040938361463c565b810103126103115750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff612711565b3d91506127e1565b604051903d90823e3d90fd5b600080fd5b611fc88a6128518780614bac565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614c9e565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128df575b6128d0818361463c565b8101031261283e575138612625565b503d6128c6565b6040513d8e823e3d90fd5b50859061258b565b60248967ffffffffffffffff61290e8a614c2b565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b1561030d5783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d6129828d80615b02565b6064870160a0905261010487019061299992614c9e565b926129a3906147b2565b67ffffffffffffffff1660848601526044016129be90614763565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129e890614763565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a1e916146da565b03925af18015611bac57612a34575b8080612509565b81612a3e9161463c565b6108f8578638612a2d565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612aba575b612a8b818361463c565b81010312612ab657612ab173ffffffffffffffffffffffffffffffffffffffff91614bfd565b6123fc565b8780fd5b503d612a81565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b4d575b612b36818361463c565b81010312612ab657612b4790614c1e565b3861236d565b503d612b2c565b8573ffffffffffffffffffffffffffffffffffffffff611e4a602493614c40565b5034610311578060031936011261031157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103115760c060031936011261031157612bc361471d565b612bcb61479b565b9060643561ffff8116810361030d5760843567ffffffffffffffff81116108fc57612bfa903690600401614805565b9160a4359360028510156108f857612c159560443591614d16565b90604051918291602083016020845282518091526020604085019301915b818110612c41575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c33565b5034610311576020600319360112610311576020612cac67ffffffffffffffff612c98614784565b166000526006602052604060002054151590565b6040519015158152f35b5034610311578060031936011261031157805473ffffffffffffffffffffffffffffffffffffffff81163303612d55577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346103115780600319360112610311576002546009546040805173ffffffffffffffffffffffffffffffffffffffff808516825260a09490941c61ffff1660208201529290911690820152606090f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461031157612e2e36614888565b612e3a93929193615483565b67ffffffffffffffff8216612e5c816000526006602052604060002054151590565b15612e7b5750612e789293612e72913691614833565b906154ce565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b503461031157606060031936011261031157612ec0614784565b6024359060443567ffffffffffffffff811161030d57612ee4903690600401614805565b612eec615483565b67ffffffffffffffff831692612f0f846000526006602052604060002054151590565b15613006578415612fde57612f2e612f28368486614833565b82614c61565b15611f91575060208103612fa157816020918101031261283e5760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f798161459d565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fc86040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c9e565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760406003193601126103115761304c614784565b906024359067ffffffffffffffff8211610311576020612cac84613073366004870161486a565b90614c61565b5034610311576040600319360112610311576004359067ffffffffffffffff821161031157816004016101006003198436030112610900576130b96147d4565b91806040516130c7816145e8565b5260648401359260c485016130f76130f16130ec6130e58488614bac565b3691614833565b615282565b86615376565b94608487019061310682614c40565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361381957602488019577ffffffffffffffff0000000000000000000000000000000061316c88614c2b565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114ee5787916137df575b506137b75767ffffffffffffffff61320088614c2b565b16613218816000526006602052604060002054151590565b1561378c57602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156114ee578791613752575b50156137265761328f87614c2b565b946132a560a48b01966130736130e58986614bac565b156136df5761ffff1690811561362b5767ffffffffffffffff6132c789614c2b565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061333960408c2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016948561345c575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6133e76127568f6133e186614c40565b50614c2b565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a280604051613453816145e8565b52604051908152f35b853b15612ab65792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526134ae8680615b02565b60648b0161010090526101648b01906134c692614c9e565b936134d0906147b2565b67ffffffffffffffff1660848a01526134eb60448801614763565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c489015261351490614763565b73ffffffffffffffffffffffffffffffffffffffff1660e48801526135399084615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8884030161010489015261356e9291614c9e565b906135799083615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526135ae9291614c9e565b9160e4016135bb91615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526135f09291614c9e565b908b6024840152604483015203925af18015611bac57613616575b8080808080806133a0565b61362182809261463c565b610311578061360b565b67ffffffffffffffff61363d89614c2b565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a806136b2600260408d200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391616007565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2613362565b6136e98683614bac565b611fc86040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c9e565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d602011613784575b8161376d6020938361463c565b810103126108f85761377e90614c1e565b38613280565b3d9150613760565b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011613811575b816137fa6020938361463c565b810103126108f85761380b90614c1e565b386131e9565b3d91506137ed565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a85614c40565b50346103115760206003193601126103115760043567ffffffffffffffff81116109005780600401916101006003198336030112610311578060405161387f816145e8565b52606482013590608483019361389485614c40565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361414257602484019177ffffffffffffffff000000000000000000000000000000006138fa84614c2b565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611bac578291614108575b506140e05767ffffffffffffffff61398e84614c2b565b166139a6816000526006602052604060002054151590565b156140b457602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611bac57829161407a575b501561404e57613a1d83614c2b565b613a3260a48701916130736130e58487614bac565b156140445784959667ffffffffffffffff613a4c86614c2b565b168084526007602052613a9e6002604086200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016988991616007565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613e7e575b50505090613b3560e4870182614bac565b8192910160408382031261030d57823567ffffffffffffffff81116108fc5781613b6091850161486a565b9260208101359067ffffffffffffffff8211611d8557613b8192910161486a565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613e7357908592918391613e11575b50613c548373ffffffffffffffffffffffffffffffffffffffff613c6697604051988996879586937fa62085060000000000000000000000000000000000000000000000000000000085526040600486015260448501906146da565b906003198483030160248501526146da565b0393165af18015613e065783928491613d77575b5015613d4f57613c9060209160c4890190614bac565b908092918101031261283e573503613d27575067ffffffffffffffff60209461344385613ce96044613ce27ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614c2b565b9401614c40565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613d89818461463c565b820160608382031261030d57825190613da460208501614c1e565b9360408101519067ffffffffffffffff82116108f8570181601f82011215611d8557805191613dd28361467d565b90613de0604051928361463c565b838252602084840101116108f85790602080613dff94930191016146b7565b9138613c7a565b6040513d85823e3d90fd5b9193949250506020813d602011613e6b575b81613e306020938361463c565b810103126108fc57918491613c548373ffffffffffffffffffffffffffffffffffffffff613e61613c669897614bfd565b9397505050613bf8565b3d9150613e23565b6040513d87823e3d90fd5b813b1561030d579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613ecd91615b02565b606488016101009052610164880190613ee592614c9e565b93613eef906147b2565b67ffffffffffffffff166084870152613f0a60448601614763565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613f3390614763565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613f58908c615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610104860152613f8d9291614c9e565b613f9a60c483018c615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610124860152613fcf9291614c9e565b9060e401613fdd908b615b02565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140129291614c9e565b8c602483015282604483015203925af18015611bac57614034575b8080613b24565b8161403e9161463c565b3861402d565b6136e99083614bac565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d6020116140ac575b816140956020938361463c565b81010312610900576140a690614c1e565b38613a0e565b3d9150614088565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d60201161413a575b816141236020938361463c565b810103126109005761413490614c1e565b38613977565b3d9150614116565b60248273ffffffffffffffffffffffffffffffffffffffff611e4a88614c40565b5034610311576020600319360112610311576040809167ffffffffffffffff61418a614784565b82602085516141988161459d565b8281520152168152600b6020522081516141b18161459d565b60206001835493848452015491019081528251918252516020820152f35b50346103115760c0600319360112610311576141e961471d565b506141f261479b565b6141fa614740565b506084359161ffff831683036103115760a4359067ffffffffffffffff82116103115760a063ffffffff8061ffff614241888861423a3660048b01614805565b5050614a6d565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b5034610311578060031936011261031157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610311576040600319360112610311576142c0614784565b602435918215158303610311576101406143836142dd85856149ea565b61433360409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b5034610311576020600319360112610311576020906143a261471d565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115780600319360112610311575061165d60405161445d60408261463c565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d64657600000000000060208201526040519182916020835260208301906146da565b905034610900576020600319360112610900576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c557602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115614573575b8115614549575b811561451f575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438614518565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150614511565b7f33171031000000000000000000000000000000000000000000000000000000008114915061450a565b6040810190811067ffffffffffffffff8211176145b957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff8211176145b957604052565b60e0810190811067ffffffffffffffff8211176145b957604052565b60a0810190811067ffffffffffffffff8211176145b957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176145b957604052565b67ffffffffffffffff81116145b957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381106146ca5750506000910152565b81810151838201526020016146ba565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614716815180928187528780880191016146b7565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b6004359067ffffffffffffffff8216820361283e57565b6024359067ffffffffffffffff8216820361283e57565b359067ffffffffffffffff8216820361283e57565b3590811515820361283e57565b6024359061ffff8216820361283e57565b6044359061ffff8216820361283e57565b359061ffff8216820361283e57565b9181601f8401121561283e5782359167ffffffffffffffff831161283e576020838186019501011161283e57565b92919261483f8261467d565b9161484d604051938461463c565b82948184528183011161283e578281602093846000960137010152565b9080601f8301121561283e5781602061488593359101614833565b90565b90604060031983011261283e5760043567ffffffffffffffff8116810361283e57916024359067ffffffffffffffff821161283e576148c991600401614805565b9091565b6148859160206148e683516040845260408401906146da565b9201519060208184039101526146da565b9181601f8401121561283e5782359167ffffffffffffffff831161283e576020808501948460051b01011161283e57565b9181601f8401121561283e5782359167ffffffffffffffff831161283e576020808501948460081b01011161283e57565b6040519061496682614620565b60006080838281528260208201528260408201528260608201520152565b9060405161499181614620565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916149fc614959565b50614a05614959565b50614a3957166000526007602052604060002090614885614a2d6002614a32614a2d86614984565b6151fd565b9401614984565b1690816000526003602052614a54614a2d6040600020614984565b916000526004602052614885614a2d6040600020614984565b67ffffffffffffffff16600052600a602052604060002060405190614a9182614604565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c0880152614b935761ffff1680614b2a5750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c1690818110614b6357505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561283e570180359067ffffffffffffffff821161283e5760200191813603831361283e57565b519073ffffffffffffffffffffffffffffffffffffffff8216820361283e57565b5190811515820361283e57565b3567ffffffffffffffff8116810361283e5790565b3573ffffffffffffffffffffffffffffffffffffffff8116810361283e5790565b9067ffffffffffffffff61488592166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61488595931681528160208201520191614c9e565b67ffffffffffffffff81116145b95760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614ecb57614dcf9467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614c9e565b916002821015614e9c578380600094819460a483015203915afa908115614e9057600091614dfb575090565b3d8083833e614e0a818361463c565b8101906020818303126108c55780519067ffffffffffffffff821161030d570181601f820112156108c557805190614e4182614cfe565b93614e4f604051958661463c565b82855260208086019360051b8301019384116103115750602001905b828210614e785750505090565b60208091614e8584614bfd565b815201910190614e6b565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614ee160208261463c565b60008152600036813790565b60405190614efa8261459d565b60606020838281520152565b8051821015614f1a5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015614f92575b6020831014614f6357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614f58565b9060405191826000825492614fb084614f49565b808452936001811690811561501e5750600114614fd7575b50614fd59250038361463c565b565b90506000929192526020600020906000915b818310615002575050906020614fd59282010138614fc8565b6020919350806001915483858901015201910190918492614fe9565b60209350614fd59592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614fc8565b67ffffffffffffffff1660005260076020526148856004604060002001614f9c565b9190811015614f1a5760051b0190565b9190811015614f1a5760081b0190565b35801515810361283e5790565b3561ffff8116810361283e5790565b3563ffffffff8116810361283e5790565b359063ffffffff8216820361283e57565b35906fffffffffffffffffffffffffffffffff8216820361283e57565b919082606091031261283e576040516060810181811067ffffffffffffffff8211176145b957604052604061514e818395615135816147c7565b8552615143602082016150de565b6020860152016150de565b910152565b6fffffffffffffffffffffffffffffffff61519160408093615174816147c7565b1515865283615185602083016150de565b166020870152016150de565b16910152565b8181106151a2575050565b60008155600101615197565b818102929181159184041417156151c157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116151c157565b615205614959565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691615262602085019361525c61524f63ffffffff875116426151f0565b85608089015116906151ae565b90615af5565b8082101561527b57505b16825263ffffffff4216905290565b905061526c565b805180156152f2576020036152b457805160208281019183018390031261283e57519060ff82116152b4575060ff1690565b611fc8906040519182917f953576f70000000000000000000000000000000000000000000000000000000083526020600484015260248301906146da565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff82116151c157565b60ff16604d81116151c157600a0a90565b8115615347570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff81169282841461547c5782841161545257906153bb91615318565b91604d60ff8416118015615419575b6153e3575050906153dd6148859261532c565b906151ae565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506154238361532c565b8015615347577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484116153ca565b61545b91615318565b91604d60ff8416116153e3575050906154766148859261532c565b9061533d565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff6001541633036154a457565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b9080511561570e5767ffffffffffffffff81516020830120921691826000526007602052615503816005604060002001615fb2565b156156ca5760005260086020526040600020815167ffffffffffffffff81116145b9576155308254614f49565b601f8111615698575b506020601f82116001146155d257916155ac827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea95936155c2956000916155c7575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90556040519182916020835260208301906146da565b0390a2565b90508401513861557b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b8181106156805750926155c29492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea989610615649575b5050811b019055611649565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388061563d565b9192602060018192868a015181550194019201615602565b6156c490836000526020600020601f840160051c8101916020851061082f57601f0160051c0190615197565b38615539565b5090611fc86040519283927f393b8ad200000000000000000000000000000000000000000000000000000000845260048401526040602484015260448301906146da565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815261580e92909161579d60648461463c565b166000806040958651946157b1888761463c565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d156158bd573d916157f28361467d565b926157ff8751948561463c565b83523d6000602085013e6162c3565b80518061581a57505050565b816020918101031261283e5760206158329101614c1e565b1561583a5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6060916162c3565b815191929115615a47576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff602085015116106159e457614fd591925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615a45604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615ad6575b615a7557614fd59192615908565b606483615a45604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615a67565b919082018092116151c157565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561283e57016020813591019167ffffffffffffffff821161283e57813603831361283e57565b906040519182815491828252602082019060005260206000209260005b818110615b84575050614fd59250038361463c565b8454835260019485019487945060209093019201615b6f565b8054821015614f1a5760005260206000200190600090565b6000818152600660205260409020548015615d44577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151c157600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151c157818103615cd5575b5050506005548015615ca6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615c63816005615b9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615d2c615ce6615cf7936005615b9d565b90549060031b1c9283926005615b9d565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615c2a565b5050600090565b9060018201918160005282602052604060002054801515600014615e76577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151c1578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151c157818103615e3f575b50505080548015615ca6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615e008282615b9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615e5f615e4f615cf79386615b9d565b90549060031b1c92839286615b9d565b905560005283602052604060002055388080615dc8565b50505050600090565b9061ffff9067ffffffffffffffff615e9960208501614c2b565b16600052600a60205260406000208260405191615eb583614604565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c161515910152161515600014615f4b57505b168015615f4357612710615f3c606061488594013592836151ae565b04906151f0565b506060013590565b9050615f20565b80600052600660205260406000205415600014615fac57600554680100000000000000008110156145b957615f93615cf78260018594016005556005615b9d565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615d4457805490680100000000000000008210156145b95782615ff0615cf7846001809601855584615b9d565b905580549260005201602052604060002055600190565b9182549060ff8260a01c161580156162bb575b6162b5576fffffffffffffffffffffffffffffffff8216916001850190815461605f63ffffffff6fffffffffffffffffffffffffffffffff83169360801c16426151f0565b9081616217575b50508481106161cb57508383106160c05750506160956fffffffffffffffffffffffffffffffff9283926151f0565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c92831561615f57816160d8916151f0565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908082116151c15761612661612b9273ffffffffffffffffffffffffffffffffffffffff96615af5565b61533d565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b82869293961161628b576162329261525c9160801c906151ae565b808410156162865750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880616066565b61623d565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b50821561601a565b9192901561633e57508151156162d7575090565b3b156162e05790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156163515750805190602001fd5b611fc8906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906146da56fea164736f6c634300081a000a", + Bin: "0x610160806040523461031b5761010081616851803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a461638f90816104c2823960805181818161178f015281816122a30152818161245b0152818161311101528181613304015281816133e00152818161367d0152818161389f01528181613a69015281816143af0152614409015260a051818181611a2f01528181614275015281816152e9015261536c015260c051818181610d9d0152818161186b0152818161233d015281816131ac015261393a015260e05181818161197e015281816124e20152818161336c01528181613af00152614d26015261010051818181610b09015281816125a201528181612dee0152613bb7015261012051818181610ad0015261173c015261014051818181610b45015261254e0152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461448e57508063181f5a771461442d57806321df0da7146143dc578063240028e8146143785780632422ac451461429957806324f65ee71461425b5780632c063404146141c257806338ff8c3814614156578063390775371461382d578063489a68f21461306c5780634c5ef0ed146130255780635fa1356514612e9957806362ddd3c414612e12578063708e1f7914612dc15780637437ff9f14612d7057806379ba509714612ca95780638926f54f14612c6357806389720a6214612b9c5780638da5cb5b14612b685780639a4575b91461222c5780639c893fe91461215f578063a42a7b8b14611ff8578063acfecf9114611ee2578063b1c71c6514611661578063b794658014611624578063c4bffe2b146114f9578063c7230a601461134c578063d8aa3f4014611212578063dc04fa1f14610dc1578063dc0bd97114610d70578063dcbd41bc14610b6c578063dd65bdb114610aa3578063e8a1da17146103e3578063f2fde38b146103145763fdf16875146101a257600080fd5b34610311576060600319360112610311576101bb614710565b906101c46147c7565b6044359273ffffffffffffffffffffffffffffffffffffffff841680850361030d576101ee615476565b73ffffffffffffffffffffffffffffffffffffffff821680156102e557946102df917fba9213054b14c2e884f779120bb196f0735cef27140498a9d26117eeab77a1179596600254907fffffffffffffffffffff0000000000000000000000000000000000000000000075ffff00000000000000000000000000000000000000008860a01b16921617176002557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556040519384938491604091949361ffff73ffffffffffffffffffffffffffffffffffffffff9283606087019816865216602085015216910152565b0390a180f35b6004857f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b80fd5b50346103115760206003193601126103115773ffffffffffffffffffffffffffffffffffffffff610343614710565b61034b615476565b163381146103bb57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346103115760406003193601126103115760043567ffffffffffffffff8111610900576104159036906004016148ea565b9060243567ffffffffffffffff811161030d5790610438849236906004016148ea565b939091610443615476565b83905b8282106109085750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610904578060051b830135858112156108fc578301610120813603126108fc57604051946104aa86614613565b6104b3826147a5565b8652602082013567ffffffffffffffff81116109005782019436601f87011215610900578535956104e387614cf1565b966104f1604051988961462f565b80885260208089019160051b830101903682116108fc5760208301905b8282106108c9575050505060208701958652604083013567ffffffffffffffff81116108c557610541903690850161485d565b916040880192835261056b61055936606087016150ee565b9460608a0195865260c03691016150ee565b95608089019687528351511561089d5761058f67ffffffffffffffff8a5116615f45565b156108665767ffffffffffffffff89511682526007602052604082206105b68651826158b8565b6105c48851600283016158b8565b6004855191019080519067ffffffffffffffff8211610839576105e78354614f3c565b601f81116107fe575b50602090601f831160011461075f5761063e9291869183610754575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b88518051821015610678579061067260019261066b8367ffffffffffffffff8f511692614ef9565b51906154c1565b01610643565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074667ffffffffffffffff60019796949851169251935191516107126106dd604051968796875261010060208801526101008701906146cd565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a1019392909193610479565b015190508e8061060c565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e657509084600195949392106107af575b505050811b019055610641565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a2565b9293602060018192878601518155019501930161078c565b6108299084875260208720601f850160051c8101916020861061082f575b601f0160051c019061518a565b8d6105f0565b909150819061081c565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108f8576020916108ed839283369189010161485d565b81520191019061050e565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092a6109258486889a9699979a615073565b614c1e565b169161093583615ba8565b15610a7757828452600760205261095160056040862001615b45565b94845b865181101561098a5760019085875260076020526109836005604089200161097c838b614ef9565b5190615d3e565b5001610954565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c68154614f3c565b80610a36575b5050500180549088815581610a18575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610446565b885260208820908101905b818110156109dc57888155600101610a23565b601f8111600114610a4c5750555b888a806109cc565b81835260208320610a6791601f01861c81019060010161518a565b8082528160208120915555610a44565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b5034610311578060031936011261031157606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346103115760206003193601126103115760043567ffffffffffffffff811161090057610b9e90369060040161491b565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d4e575b610d2257825b818110610bd1578380f35b610bdc818385615083565b67ffffffffffffffff610bee82614c1e565b1690610c07826000526006602052604060002054151590565b15610cf657907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cb6610c90602060019897018b610c4882615093565b15610cbd578790526003602052610c6f60408d20610c6936604088016150ee565b906158b8565b868c526004602052610c8b60408d20610c693660a088016150ee565b615093565b916040519215158352610ca96020840160408301615146565b60a0608084019101615146565ba201610bc6565b60026040828a610c8b94526007602052610cdf828220610c6936858c016150ee565b8a815260076020522001610c693660a088016150ee565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc0565b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115760406003193601126103115760043567ffffffffffffffff811161090057610df390369060040161491b565b60243567ffffffffffffffff811161030d57610e139036906004016148ea565b919092610e1e615476565b845b828110610e8a57505050825b818110610e37578380f35b8067ffffffffffffffff610e516109256001948688615073565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e2c565b610e98610925828585615083565b610ea3828585615083565b90602082019060e0830190610eb782615093565b156111dd5760a0840161271061ffff610ecf836150a0565b1610156111ce5760c085019161271061ffff610eea856150a0565b1610156111965763ffffffff610eff866150af565b16156111615767ffffffffffffffff1694858c52600a60205260408c20610f25866150af565b63ffffffff16908054906040840191610f3d836150af565b60201b67ffffffff0000000016936060860194610f59866150af565b60401b6bffffffff0000000000000000169660800196610f78886150af565b60601b6fffffffff0000000000000000000000001691610f978a6150a0565b60801b71ffff000000000000000000000000000000001693610fb88c6150a0565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16171717815561106b87615093565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110bc906150c0565b63ffffffff1687526110cd906150c0565b63ffffffff1660208701526110e1906150c0565b63ffffffff1660408601526110f5906150c0565b63ffffffff166060850152611109906147e9565b61ffff16608084015261111b906147e9565b61ffff1660a083015261112d906147ba565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e20565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111a5866150a0565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111a56024936150a0565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346103115760806003193601126103115761122c614710565b5061123561478e565b61123d6147d8565b5060643567ffffffffffffffff81116108c5579167ffffffffffffffff60409261126d60e09536906004016147f8565b50508260c0855161127d816145f7565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112b5826145f7565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346103115760406003193601126103115760043567ffffffffffffffff81116109005761137e9036906004016148ea565b9060243573ffffffffffffffffffffffffffffffffffffffff8116908181036108fc576113a9615476565b845b8481106113b6578580f35b80602073ffffffffffffffffffffffffffffffffffffffff6113e36113de6024958a8a615073565b614c33565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114ee5787906114b8575b6001925080611434575b50016113ab565b611462818573ffffffffffffffffffffffffffffffffffffffff61145c6113de878d8d615073565b1661572b565b847f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff6114a96113de878d8d615073565b1693604051908152a33861142d565b509060203d81116114e7575b6114ce818361462f565b6020826000928101031261031157509060019151611423565b503d6114c4565b6040513d89823e3d90fd5b5034610311578060031936011261031157604051906005548083528260208101600584526020842092845b81811061160b5750506115399250038361462f565b815161155d61154782614cf1565b91611555604051938461462f565b808352614cf1565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bc578067ffffffffffffffff6115a960019388614ef9565b51166115b58286614ef9565b520161158a565b50925090604051928392602084019060208552518091526040840192915b8181106115e8575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115da565b8454835260019485019487945060209093019201611524565b50346103115760206003193601126103115761165d611649611644614777565b615051565b6040519182916020835260208301906146cd565b0390f35b5034610311576060600319360112610311576004359067ffffffffffffffff8211610311578160040160a06003198436030112610900576116a06147c7565b9060443567ffffffffffffffff811161030d576116c19036906004016147f8565b9390946116cc614ee0565b5060248101956116db87614c1e565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ed7578492611e9b575b5073ffffffffffffffffffffffffffffffffffffffff821615611e73576117cf907f0000000000000000000000000000000000000000000000000000000000000000976117bf606486013580958b61572b565b6117c7614ee0565b503691614826565b60848301926117dd84614c33565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e295777ffffffffffffffff0000000000000000000000000000000061181e8a614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611d91578691611def575b50611dc75767ffffffffffffffff6118b28a614c1e565b166118ca816000526006602052604060002054151590565b15611d9c57602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015611d91578690611d40575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d145761ffff8716918215611c825761ffff60025460a01c1680611bb7575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a95575b611a8b8a611a276116448e6119ba8e8e615e72565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6119ee84614c1e565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614c1e565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611a6360408261462f565b60405192611a7084614590565b835260208301526040519283926040845260408401906148c0565b9060208301520390f35b833b156108f8578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611ae491615af5565b6064890160a09052610104890190611afb92614c91565b94611b05906147a5565b67ffffffffffffffff166084880152604401611b2090614756565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611b4990614756565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b7e916146cd565b03925af18015611bac57611b97575b80808080806119a5565b611ba282809261462f565b6103115780611b8d565b6040513d84823e3d90fd5b808410611c52575067ffffffffffffffff611bd18b614c1e565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611c248d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611965565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611c948b614c1e565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611ce78d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611967565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611d89575b81611d5a6020938361462f565b81010312611d8557611d8073ffffffffffffffffffffffffffffffffffffffff91614bf0565b61192b565b8580fd5b3d9150611d4d565b6040513d88823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e21575b81611e0a6020938361462f565b81010312611d8557611e1b90614c11565b3861189b565b3d9150611dfd565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a87614c33565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ecf575b81611eb76020938361462f565b8101031261030d57611ec890614bf0565b903861176c565b3d9150611eaa565b6040513d86823e3d90fd5b503461031157611ef13661487b565b611ef9615476565b67ffffffffffffffff831692611f1c846000526006602052604060002054151590565b15611fcc578385526007602052611f4b60056040872001611f3e368587614826565b6020815191012090615d3e565b15611f915750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611f8b604051928392602084526020840191614c91565b0390a280f35b90611fc8906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614cd0565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115767ffffffffffffffff61201b614777565b168152600760205261203260056040832001615b45565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061207761206183614cf1565b9261206f604051948561462f565b808452614cf1565b01835b81811061214e575050825b82518110156120cb578061209b60019285614ef9565b51855260086020526120af60408620614f8f565b6120b98285614ef9565b526120c48184614ef9565b5001612085565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b82821061210357505050500390f35b9193602061213e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288516146cd565b96019201920185949391926120f4565b80606060208093860101520161207a565b50346103115760206003193601126103115767ffffffffffffffff612182614777565b61218a615476565b16808252600b6020526040822090604051916121a583614590565b600181549182855201549060208401918252156122005760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115760043567ffffffffffffffff8111610900578060040160a060031983360301126108c55761226a614ee0565b5060405160209261227b848361462f565b8482526084810161228b81614c33565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b4757602482019377ffffffffffffffff000000000000000000000000000000006122f186614c1e565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612ab4578891612b12575b50612aea5767ffffffffffffffff61238486614c1e565b1661239c816000526006602052604060002054151590565b15612abf578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612ab4578890612a68575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a3c5786606484013594859367ffffffffffffffff61243589614c1e565b1680845260078a526124836040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a91615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908161292a575b5050505067ffffffffffffffff61251f86614c1e565b168752600b86526040872060405161253681614590565b6001825492838352015491888201928352156128ec577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128e457905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128d9578c916128ac575b506126326116448b614c1e565b8b815191818082019384920101031261283157519081810361287e5750508961265b8680614b9f565b90500361283657604490519601958961267d61267689614c33565b9680614b9f565b90809291810103126128315760409460c4938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977f793ea55b00000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a48401525af19687156128255780976127c4575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611a1f6116449661274f6127496127869a614c1e565b93614c33565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b91604051908282015281815261279d60408261462f565b604051926127aa84614590565b83528183015261165d6040519282849384528301906148c0565b909196506040823d60401161281d575b816127e16040938361462f565b810103126103115750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff612704565b3d91506127d4565b604051903d90823e3d90fd5b600080fd5b611fc88a6128448780614b9f565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614c91565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128d2575b6128c3818361462f565b81010312612831575138612625565b503d6128b9565b6040513d8e823e3d90fd5b50859061258b565b60248967ffffffffffffffff6129018a614c1e565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b1561030d5783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d6129758d80615af5565b6064870160a0905261010487019061298c92614c91565b92612996906147a5565b67ffffffffffffffff1660848601526044016129b190614756565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129db90614756565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a11916146cd565b03925af18015611bac57612a27575b8080612509565b81612a319161462f565b6108f8578638612a20565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612aad575b612a7e818361462f565b81010312612aa957612aa473ffffffffffffffffffffffffffffffffffffffff91614bf0565b6123fc565b8780fd5b503d612a74565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b40575b612b29818361462f565b81010312612aa957612b3a90614c11565b3861236d565b503d612b1f565b8573ffffffffffffffffffffffffffffffffffffffff611e4a602493614c33565b5034610311578060031936011261031157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103115760c060031936011261031157612bb6614710565b612bbe61478e565b9060643561ffff8116810361030d5760843567ffffffffffffffff81116108fc57612bed9036906004016147f8565b9160a4359360028510156108f857612c089560443591614d09565b90604051918291602083016020845282518091526020604085019301915b818110612c34575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c26565b5034610311576020600319360112610311576020612c9f67ffffffffffffffff612c8b614777565b166000526006602052604060002054151590565b6040519015158152f35b5034610311578060031936011261031157805473ffffffffffffffffffffffffffffffffffffffff81163303612d48577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346103115780600319360112610311576002546009546040805173ffffffffffffffffffffffffffffffffffffffff808516825260a09490941c61ffff1660208201529290911690820152606090f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461031157612e213661487b565b612e2d93929193615476565b67ffffffffffffffff8216612e4f816000526006602052604060002054151590565b15612e6e5750612e6b9293612e65913691614826565b906154c1565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b503461031157606060031936011261031157612eb3614777565b6024359060443567ffffffffffffffff811161030d57612ed79036906004016147f8565b612edf615476565b67ffffffffffffffff831692612f02846000526006602052604060002054151590565b15612ff9578415612fd157612f21612f1b368486614826565b82614c54565b15611f91575060208103612f945781602091810103126128315760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f6c81614590565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fc86040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c91565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760406003193601126103115761303f614777565b906024359067ffffffffffffffff8211610311576020612c9f84613066366004870161485d565b90614c54565b5034610311576040600319360112610311576004359067ffffffffffffffff821161031157816004016101006003198436030112610900576130ac6147c7565b91806040516130ba816145db565b5260648401359260c485016130ea6130e46130df6130d88488614b9f565b3691614826565b615275565b86615369565b9460848701906130f982614c33565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361380c57602488019577ffffffffffffffff0000000000000000000000000000000061315f88614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114ee5787916137d2575b506137aa5767ffffffffffffffff6131f388614c1e565b1661320b816000526006602052604060002054151590565b1561377f57602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156114ee578791613745575b50156137195761328287614c1e565b9461329860a48b01966130666130d88986614b9f565b156136d25761ffff1690811561361e5767ffffffffffffffff6132ba89614c1e565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061332c60408c2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016948561344f575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6133da6127498f6133d486614c33565b50614c1e565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a280604051613446816145db565b52604051908152f35b853b15612aa95792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526134a18680615af5565b60648b0161010090526101648b01906134b992614c91565b936134c3906147a5565b67ffffffffffffffff1660848a01526134de60448801614756565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c489015261350790614756565b73ffffffffffffffffffffffffffffffffffffffff1660e488015261352c9084615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c888403016101048901526135619291614c91565b9061356c9083615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526135a19291614c91565b9160e4016135ae91615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526135e39291614c91565b908b6024840152604483015203925af18015611bac57613609575b808080808080613393565b61361482809261462f565b61031157806135fe565b67ffffffffffffffff61363089614c1e565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a806136a5600260408d200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2613355565b6136dc8683614b9f565b611fc86040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c91565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d602011613777575b816137606020938361462f565b810103126108f85761377190614c11565b38613273565b3d9150613753565b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011613804575b816137ed6020938361462f565b810103126108f8576137fe90614c11565b386131dc565b3d91506137e0565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a85614c33565b50346103115760206003193601126103115760043567ffffffffffffffff811161090057806004019161010060031983360301126103115780604051613872816145db565b52606482013590608483019361388785614c33565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361413557602484019177ffffffffffffffff000000000000000000000000000000006138ed84614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611bac5782916140fb575b506140d35767ffffffffffffffff61398184614c1e565b16613999816000526006602052604060002054151590565b156140a757602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611bac57829161406d575b501561404157613a1083614c1e565b613a2560a48701916130666130d88487614b9f565b156140375784959667ffffffffffffffff613a3f86614c1e565b168084526007602052613a916002604086200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016988991615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613e71575b50505090613b2860e4870182614b9f565b8192910160408382031261030d57823567ffffffffffffffff81116108fc5781613b5391850161485d565b9260208101359067ffffffffffffffff8211611d8557613b7492910161485d565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613e6657908592918391613e04575b50613c478373ffffffffffffffffffffffffffffffffffffffff613c5997604051988996879586937fa62085060000000000000000000000000000000000000000000000000000000085526040600486015260448501906146cd565b906003198483030160248501526146cd565b0393165af18015613df95783928491613d6a575b5015613d4257613c8360209160c4890190614b9f565b9080929181010312612831573503613d1a575067ffffffffffffffff60209461343685613cdc6044613cd57ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614c1e565b9401614c33565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613d7c818461462f565b820160608382031261030d57825190613d9760208501614c11565b9360408101519067ffffffffffffffff82116108f8570181601f82011215611d8557805191613dc583614670565b90613dd3604051928361462f565b838252602084840101116108f85790602080613df294930191016146aa565b9138613c6d565b6040513d85823e3d90fd5b9193949250506020813d602011613e5e575b81613e236020938361462f565b810103126108fc57918491613c478373ffffffffffffffffffffffffffffffffffffffff613e54613c599897614bf0565b9397505050613beb565b3d9150613e16565b6040513d87823e3d90fd5b813b1561030d579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613ec091615af5565b606488016101009052610164880190613ed892614c91565b93613ee2906147a5565b67ffffffffffffffff166084870152613efd60448601614756565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613f2690614756565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613f4b908c615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610104860152613f809291614c91565b613f8d60c483018c615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610124860152613fc29291614c91565b9060e401613fd0908b615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140059291614c91565b8c602483015282604483015203925af18015611bac57614027575b8080613b17565b816140319161462f565b38614020565b6136dc9083614b9f565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d60201161409f575b816140886020938361462f565b810103126109005761409990614c11565b38613a01565b3d915061407b565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d60201161412d575b816141166020938361462f565b810103126109005761412790614c11565b3861396a565b3d9150614109565b60248273ffffffffffffffffffffffffffffffffffffffff611e4a88614c33565b5034610311576020600319360112610311576040809167ffffffffffffffff61417d614777565b826020855161418b81614590565b8281520152168152600b6020522081516141a481614590565b60206001835493848452015491019081528251918252516020820152f35b50346103115760c0600319360112610311576141dc614710565b506141e561478e565b6141ed614733565b506084359161ffff831683036103115760a4359067ffffffffffffffff82116103115760a063ffffffff8061ffff614234888861422d3660048b016147f8565b5050614a60565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b5034610311578060031936011261031157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610311576040600319360112610311576142b3614777565b602435918215158303610311576101406143766142d085856149dd565b61432660409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b503461031157602060031936011261031157602090614395614710565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115780600319360112610311575061165d60405161445060408261462f565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d64657600000000000060208201526040519182916020835260208301906146cd565b905034610900576020600319360112610900576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c557602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115614566575b811561453c575b8115614512575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861450b565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150614504565b7f3317103100000000000000000000000000000000000000000000000000000000811491506144fd565b6040810190811067ffffffffffffffff8211176145ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff8211176145ac57604052565b60e0810190811067ffffffffffffffff8211176145ac57604052565b60a0810190811067ffffffffffffffff8211176145ac57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176145ac57604052565b67ffffffffffffffff81116145ac57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381106146bd5750506000910152565b81810151838201526020016146ad565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614709815180928187528780880191016146aa565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b6004359067ffffffffffffffff8216820361283157565b6024359067ffffffffffffffff8216820361283157565b359067ffffffffffffffff8216820361283157565b3590811515820361283157565b6024359061ffff8216820361283157565b6044359061ffff8216820361283157565b359061ffff8216820361283157565b9181601f840112156128315782359167ffffffffffffffff8311612831576020838186019501011161283157565b92919261483282614670565b91614840604051938461462f565b829481845281830111612831578281602093846000960137010152565b9080601f830112156128315781602061487893359101614826565b90565b9060406003198301126128315760043567ffffffffffffffff8116810361283157916024359067ffffffffffffffff8211612831576148bc916004016147f8565b9091565b6148789160206148d983516040845260408401906146cd565b9201519060208184039101526146cd565b9181601f840112156128315782359167ffffffffffffffff8311612831576020808501948460051b01011161283157565b9181601f840112156128315782359167ffffffffffffffff8311612831576020808501948460081b01011161283157565b6040519061495982614613565b60006080838281528260208201528260408201528260608201520152565b9060405161498481614613565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916149ef61494c565b506149f861494c565b50614a2c57166000526007602052604060002090614878614a206002614a25614a2086614977565b6151f0565b9401614977565b1690816000526003602052614a47614a206040600020614977565b916000526004602052614878614a206040600020614977565b67ffffffffffffffff16600052600a602052604060002060405190614a84826145f7565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c0880152614b865761ffff1680614b1d5750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c1690818110614b5657505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612831570180359067ffffffffffffffff82116128315760200191813603831361283157565b519073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b5190811515820361283157565b3567ffffffffffffffff811681036128315790565b3573ffffffffffffffffffffffffffffffffffffffff811681036128315790565b9067ffffffffffffffff61487892166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61487895931681528160208201520191614c91565b67ffffffffffffffff81116145ac5760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614ebe57614dc29467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614c91565b916002821015614e8f578380600094819460a483015203915afa908115614e8357600091614dee575090565b3d8083833e614dfd818361462f565b8101906020818303126108c55780519067ffffffffffffffff821161030d570181601f820112156108c557805190614e3482614cf1565b93614e42604051958661462f565b82855260208086019360051b8301019384116103115750602001905b828210614e6b5750505090565b60208091614e7884614bf0565b815201910190614e5e565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614ed460208261462f565b60008152600036813790565b60405190614eed82614590565b60606020838281520152565b8051821015614f0d5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015614f85575b6020831014614f5657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614f4b565b9060405191826000825492614fa384614f3c565b80845293600181169081156150115750600114614fca575b50614fc89250038361462f565b565b90506000929192526020600020906000915b818310614ff5575050906020614fc89282010138614fbb565b6020919350806001915483858901015201910190918492614fdc565b60209350614fc89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614fbb565b67ffffffffffffffff1660005260076020526148786004604060002001614f8f565b9190811015614f0d5760051b0190565b9190811015614f0d5760081b0190565b3580151581036128315790565b3561ffff811681036128315790565b3563ffffffff811681036128315790565b359063ffffffff8216820361283157565b35906fffffffffffffffffffffffffffffffff8216820361283157565b9190826060910312612831576040516060810181811067ffffffffffffffff8211176145ac576040526040615141818395615128816147ba565b8552615136602082016150d1565b6020860152016150d1565b910152565b6fffffffffffffffffffffffffffffffff61518460408093615167816147ba565b1515865283615178602083016150d1565b166020870152016150d1565b16910152565b818110615195575050565b6000815560010161518a565b818102929181159184041417156151b457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116151b457565b6151f861494c565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691615255602085019361524f61524263ffffffff875116426151e3565b85608089015116906151a1565b90615ae8565b8082101561526e57505b16825263ffffffff4216905290565b905061525f565b805180156152e5576020036152a757805160208281019183018390031261283157519060ff82116152a7575060ff1690565b611fc8906040519182917f953576f70000000000000000000000000000000000000000000000000000000083526020600484015260248301906146cd565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff82116151b457565b60ff16604d81116151b457600a0a90565b811561533a570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff81169282841461546f5782841161544557906153ae9161530b565b91604d60ff841611801561540c575b6153d6575050906153d06148789261531f565b906151a1565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506154168361531f565b801561533a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484116153bd565b61544e9161530b565b91604d60ff8416116153d6575050906154696148789261531f565b90615330565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff60015416330361549757565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b908051156157015767ffffffffffffffff815160208301209216918260005260076020526154f6816005604060002001615fa5565b156156bd5760005260086020526040600020815167ffffffffffffffff81116145ac576155238254614f3c565b601f811161568b575b506020601f82116001146155c5579161559f827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea95936155b5956000916155ba575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90556040519182916020835260208301906146cd565b0390a2565b90508401513861556e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b8181106156735750926155b59492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea98961061563c575b5050811b019055611649565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880615630565b9192602060018192868a0151815501940192016155f5565b6156b790836000526020600020601f840160051c8101916020851061082f57601f0160051c019061518a565b3861552c565b5090611fc86040519283927f393b8ad200000000000000000000000000000000000000000000000000000000845260048401526040602484015260448301906146cd565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815261580192909161579060648461462f565b166000806040958651946157a4888761462f565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d156158b0573d916157e583614670565b926157f28751948561462f565b83523d6000602085013e6162b6565b80518061580d57505050565b81602091810103126128315760206158259101614c11565b1561582d5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6060916162b6565b815191929115615a3a576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff602085015116106159d757614fc891925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615a38604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615ac9575b615a6857614fc891926158fb565b606483615a38604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615a5a565b919082018092116151b457565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561283157016020813591019167ffffffffffffffff821161283157813603831361283157565b906040519182815491828252602082019060005260206000209260005b818110615b77575050614fc89250038361462f565b8454835260019485019487945060209093019201615b62565b8054821015614f0d5760005260206000200190600090565b6000818152600660205260409020548015615d37577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151b457600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151b457818103615cc8575b5050506005548015615c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615c56816005615b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615d1f615cd9615cea936005615b90565b90549060031b1c9283926005615b90565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615c1d565b5050600090565b9060018201918160005282602052604060002054801515600014615e69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151b4578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151b457818103615e32575b50505080548015615c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615df38282615b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615e52615e42615cea9386615b90565b90549060031b1c92839286615b90565b905560005283602052604060002055388080615dbb565b50505050600090565b9061ffff9067ffffffffffffffff615e8c60208501614c1e565b16600052600a60205260406000208260405191615ea8836145f7565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c161515910152161515600014615f3e57505b168015615f3657612710615f2f606061487894013592836151a1565b04906151e3565b506060013590565b9050615f13565b80600052600660205260406000205415600014615f9f57600554680100000000000000008110156145ac57615f86615cea8260018594016005556005615b90565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615d3757805490680100000000000000008210156145ac5782615fe3615cea846001809601855584615b90565b905580549260005201602052604060002055600190565b9182549060ff8260a01c161580156162ae575b6162a8576fffffffffffffffffffffffffffffffff8216916001850190815461605263ffffffff6fffffffffffffffffffffffffffffffff83169360801c16426151e3565b908161620a575b50508481106161be57508383106160b35750506160886fffffffffffffffffffffffffffffffff9283926151e3565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c92831561615257816160cb916151e3565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908082116151b45761611961611e9273ffffffffffffffffffffffffffffffffffffffff96615ae8565b615330565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b82869293961161627e576162259261524f9160801c906151a1565b808410156162795750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880616059565b616230565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b50821561600d565b9192901561633157508151156162ca575090565b3b156162d35790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156163445750805190602001fd5b611fc8906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906146cd56fea164736f6c634300081a000a", } var LombardTokenPoolABI = LombardTokenPoolMetaData.ABI diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index 297dc21e0a..4870b587e3 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -259,17 +259,17 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21811) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97332) -LombardTokenPool_constructor:test_constructor() (gas: 4535154) -LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 323907) -LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95314) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98508) +LombardTokenPool_constructor:test_constructor() (gas: 4531545) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 368356) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95305) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98499) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247181) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 315565) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5203680) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 315278) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5199965) LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 247408) -LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 490553) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 490597) LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54568) LombardTokenPool_setPath:test_setPath() (gas: 69366) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) diff --git a/chains/evm/contracts/interfaces/lombard/IBridgeV2.sol b/chains/evm/contracts/interfaces/lombard/IBridgeV2.sol deleted file mode 100644 index 93f5cc1c83..0000000000 --- a/chains/evm/contracts/interfaces/lombard/IBridgeV2.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -/// @notice Minimal Lombard bridge interface needed by the token pool and verifier. -interface IBridgeV2 { - /// @notice Message version supported by the bridge. - function MSG_VERSION() external view returns (uint8); - - /// @notice Address of the mailbox contract used to deliver payloads on the destination chain. - function mailbox() external view returns (address); - - /// @notice Returns the allowed destination token identifier for a given chain and local token. - /// @param destinationChainId Lombard chain identifier. - /// @param localToken Address of the token on the source chain (or adapter). - function getAllowedDestinationToken(bytes32 destinationChainId, address localToken) external view returns (bytes32); - - /// @notice Initiates a deposit into the Lombard bridge. - /// @param destinationChain Destination Lombard chain identifier. - /// @param token Token or adapter address on the source chain. - /// @param sender Sender address on the source chain. - /// @param recipient Recipient address on the destination chain, left padded to 32 bytes. - /// @param amount Amount of tokens to bridge. - /// @param destinationCaller Address allowed to handle the bridged payload on destination. - /// @param payload Optional opaque payload hashed by the bridge. - /// @return nonce Bridge-assigned deposit nonce. - /// @return payloadHash Hash of the payload emitted by the bridge. - function deposit( - bytes32 destinationChain, - address token, - address sender, - bytes32 recipient, - uint256 amount, - bytes32 destinationCaller, - bytes calldata payload - ) external returns (uint64 nonce, bytes32 payloadHash); -} diff --git a/chains/evm/contracts/interfaces/lombard/IMailbox.sol b/chains/evm/contracts/interfaces/lombard/IMailbox.sol deleted file mode 100644 index 60af6d013e..0000000000 --- a/chains/evm/contracts/interfaces/lombard/IMailbox.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -/// @notice Minimal interface to deliver and handle Lombard bridge payloads. -interface IMailbox { - /// @notice Verifies and executes a bridged payload. - /// @param payload Raw payload emitted on the source chain. - /// @param proof Bridging proof for the payload. - /// @return payloadHash Hash of the payload. - /// @return executed True if the payload was successfully handled. - /// @return returnData Optional data returned by the handler. - function deliverAndHandle( - bytes calldata payload, - bytes calldata proof - ) external returns (bytes32 payloadHash, bool executed, bytes memory returnData); -} diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index 7d7314fd9b..5801ee9031 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -36,8 +36,9 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { error ExecutionError(); error HashMismatch(); + /// The following events are emitted for Lombard-specific configuration updates and are utilized by Lombard. /// @param remoteChainSelector CCIP selector of destination chain. - /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion. + /// @param lChainId The chain ID according to Lombard Multi Chain ID convention. /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message. event PathSet(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); /// @param remoteChainSelector CCIP selector of destination chain. @@ -68,6 +69,12 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { /// @notice Mapping of CCIP chain selector to chain specific config. mapping(uint64 chainSelector => Path path) internal s_chainSelectorToPath; + /// @param verifier The address of Lombard verifier resolver. Used in V2 flows to fetch the outbound + /// implementation that handles token burns and cross-chain attestations. + /// @param bridge The Lombard BridgeV2 contract that handles cross-chain token transfers. + /// @param adapter Optional source-chain token address override. Used for non-upgradeable tokens like BTC.b + /// on Avalanche where an adapter contract performs mint/burn on behalf of the actual token. When set, this + /// address is passed to bridge.deposit() instead of the pool's token address. Set to address(0) if not needed. constructor( IERC20Metadata token, address verifier, @@ -128,6 +135,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { revert PathNotExist(lockOrBurnIn.remoteChainSelector); } + // For some tokens we need to override the source token with an adapter address sourceTokenOrAdapter = i_tokenAdapter != address(0) ? i_tokenAdapter : address(i_token); // verify bridge destination token equal to pool bytes32 bridgeDestToken = i_bridge.getAllowedDestinationToken(path.lChainId, sourceTokenOrAdapter); @@ -146,8 +154,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { sender: lockOrBurnIn.originalSender, recipient: abi.decode(lockOrBurnIn.receiver, (bytes32)), amount: lockOrBurnIn.amount, - destinationCaller: path.allowedCaller, - payload: "" + destinationCaller: path.allowedCaller }); emit LockedOrBurned({ diff --git a/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol b/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol index 48fe4c1747..05542f6464 100644 --- a/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol +++ b/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol @@ -2,7 +2,41 @@ pragma solidity ^0.8.24; /// @custom:security-contact legal@lombard.finance -interface IBridgeV2 { +interface IBridgeV1 { + event DestinationBridgeSet(bytes32 indexed destinationChain, bytes32 indexed destinationBridge); + event DestinationTokenAdded( + bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken + ); + event DestinationTokenRemoved( + bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken + ); + event RateLimitsSet(address indexed token, bytes32 indexed sourceChainId, uint256 limit, uint256 window); + + event SenderConfigChanged(address indexed sender, uint32 feeDiscount, bool whitelisted); + + /// @notice Emitted when the is a deposit in the bridge + event DepositToBridge(address indexed fromAddress, bytes32 indexed toAddress, bytes32 indexed payloadHash); + + /// @notice Emitted when a withdraw is made from the bridge + event WithdrawFromBridge(address indexed recipient, bytes32 indexed chainId, address indexed token, uint256 amount); + + function mailbox() external view returns (address); + + function MSG_VERSION() external view returns (uint8); + + function deposit( + bytes32 destinationChain, + address token, + address sender, + bytes32 recipient, + uint256 amount, + bytes32 destinationCaller + ) external payable returns (uint256, bytes32); + + function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32); +} + +interface IBridgeV2 is IBridgeV1 { error BridgeV2_ZeroAmount(); error BridgeV2_ZeroRecipient(); error BridgeV2_InvalidRecipient(); @@ -25,27 +59,6 @@ interface IBridgeV2 { error BridgeV2_NotEnoughFee(uint256 expected, uint256 actual); error BridgeV2_TooBigDiscount(); - event DestinationBridgeSet(bytes32 indexed destinationChain, bytes32 indexed destinationBridge); - event DestinationTokenAdded( - bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken - ); - event DestinationTokenRemoved( - bytes32 indexed destinationChain, bytes32 indexed destinationToken, address indexed sourceToken - ); - event RateLimitsSet(address indexed token, bytes32 indexed sourceChainId, uint256 limit, uint256 window); - - event SenderConfigChanged(address indexed sender, uint32 feeDiscount, bool whitelisted); - - /// @notice Emitted when the is a deposit in the bridge - event DepositToBridge(address indexed fromAddress, bytes32 indexed toAddress, bytes32 indexed payloadHash); - - /// @notice Emitted when a withdraw is made from the bridge - event WithdrawFromBridge(address indexed recipient, bytes32 indexed chainId, address indexed token, uint256 amount); - - function mailbox() external view returns (address); - - function MSG_VERSION() external view returns (uint8); - function deposit( bytes32 destinationChain, address token, @@ -55,6 +68,4 @@ interface IBridgeV2 { bytes32 destinationCaller, bytes calldata payload ) external payable returns (uint256, bytes32); - - function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32); } diff --git a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol b/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol index d219eb589d..2d1ee6616e 100644 --- a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol +++ b/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol @@ -51,6 +51,18 @@ contract MockLombardBridgeV2 is IBridgeV2 { return (1, keccak256(abi.encodePacked(block.timestamp, token))); } + function deposit( + bytes32, // destinationChain + address token, + address, // sender + bytes32, // recipient + uint256, // amount + bytes32 // destinationCaller + ) external payable returns (uint256 nonce, bytes32 payloadHash) { + s_lastDepositToken = token; + return (1, keccak256(abi.encodePacked(block.timestamp, token))); + } + function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32) { return s_allowedDestinationTokens[destinationChain][sourceToken]; } diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol index 6d9744e773..5ef754a621 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol @@ -1,8 +1,9 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; -import {Pool} from "../../../libraries/Pool.sol"; +import {IBridgeV1} from "../../../pools/Lombard/interfaces/IBridgeV2.sol"; +import {Pool} from "../../../libraries/Pool.sol"; import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; import {TokenPool} from "../../../pools/TokenPool.sol"; import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; @@ -48,15 +49,14 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { vm.expectCall( address(s_bridge), abi.encodeCall( - s_bridge.deposit, + IBridgeV1.deposit, ( L_CHAIN_ID, address(s_token), OWNER, bytes32(uint256(uint160(address(0xDEAD)))), amount, - bytes32(uint256(uint160(s_remotePool))), - "" + bytes32(uint256(uint160(s_remotePool))) ) ) ); diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index c088b4282e..2f61599f24 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,7 +21,7 @@ hybrid_lock_release_usdc_token_pool: ../solc/ccip/HybridLockReleaseUSDCTokenPool hyper_liquid_compatible_erc20: ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.abi.json ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.bin 1b825f6c2f7ba630ca0dbacb241c6a8cb16a5aa62cc152f5fefe40166c3d96f6 lock_release_token_pool: ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin 08155c106ddbc4c8d584a1a844030681ac5f82a95272ecfbb11fca31d5fd65cd log_message_data_receiver: ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.abi.json ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.bin 6fe60e48711884eae82dd95cabb1c66a5644336719fa1219df1ceceec11e6bce -lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 4c47f591d4a817fa0a47a21d9ea651e0e51028940b8cfa89fa8bcb8df997bab2 +lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 6d74ff7071051634741ab148cfa7eef212afc83718c6c1abd616c98c03490848 maybe_revert_message_receiver: ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin ee264f67a2356cc4eebe839a5a88367cbcdc27a7520cca56263319e9afe97a1a message_hasher: ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin cb3448514ff88dd019316135cf6c10f6b0d6afcb8ded227884c910efe4274ba1 mock_lbtc_token_pool: ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.abi.json ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.bin ec43e91571836b9cf45e1a0ebdcea8dc5540e510cd96bf6560aaff6ec2ba8f11 From 894fb3e47fa34e508a4459fffadb4294371e3d81 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 9 Dec 2025 12:59:33 +0530 Subject: [PATCH 11/16] comment, interface, mock fixes --- chains/evm/.gas-snapshot | 10 +++--- .../pools/Lombard/LombardTokenPool.sol | 10 +++--- .../{IBridgeV2.sol => IBridgeV1.sol} | 34 ------------------- .../test/helpers/LombardTokenPoolHelper.sol | 4 +-- ...rdBridgeV2.sol => MockLombardBridgeV1.sol} | 4 +-- .../LombardTokenPool._getTokenDecimals.t.sol | 7 ++-- .../LombardTokenPool._lockOrBurn.t.sol | 4 +-- .../LombardTokenPool.constructor.t.sol | 12 +++---- .../LombardTokenPool.lockOrBurn.t.sol | 16 ++++----- .../LombardTokenPool.releaseOrMint.t.sol | 14 ++++---- .../LombardTokenPoolSetup.t.sol | 9 +++-- 11 files changed, 45 insertions(+), 79 deletions(-) rename chains/evm/contracts/pools/Lombard/interfaces/{IBridgeV2.sol => IBridgeV1.sol} (57%) rename chains/evm/contracts/test/mocks/{MockLombardBridgeV2.sol => MockLombardBridgeV1.sol} (94%) diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index 4870b587e3..4c46df1240 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -265,11 +265,11 @@ LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 953 LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98499) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) -LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247181) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 315278) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5199965) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 247408) -LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 490597) +LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 248868) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 317505) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5202086) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 249096) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 492653) LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54568) LombardTokenPool_setPath:test_setPath() (gas: 69366) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index 5801ee9031..2f75b7bf68 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.24; import {ICrossChainVerifierResolver} from "../../interfaces/ICrossChainVerifierResolver.sol"; -import {IBridgeV2} from "./interfaces/IBridgeV2.sol"; +import {IBridgeV1} from "./interfaces/IBridgeV1.sol"; import {IMailbox} from "./interfaces/IMailbox.sol"; import {ITypeAndVersion} from "@chainlink/contracts/src/v0.8/shared/interfaces/ITypeAndVersion.sol"; @@ -39,11 +39,11 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { /// The following events are emitted for Lombard-specific configuration updates and are utilized by Lombard. /// @param remoteChainSelector CCIP selector of destination chain. /// @param lChainId The chain ID according to Lombard Multi Chain ID convention. - /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message. + /// @param allowedCaller The address that's allowed to call the bridge on the destination chain. event PathSet(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); /// @param remoteChainSelector CCIP selector of destination chain. /// @param lChainId The chain id of destination chain by Lombard Multi Chain Id conversion. - /// @param allowedCaller The address of TokenPool on destination chain allowed to handle GMP message. + /// @param allowedCaller The address that's allowed to call the bridge on the destination chain. event PathRemoved(uint64 indexed remoteChainSelector, bytes32 indexed lChainId, bytes32 allowedCaller); event LombardConfigurationSet(address indexed verifier, address indexed bridge, address indexed tokenAdapter); @@ -59,7 +59,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { /// @notice Supported bridge message version. uint8 internal constant SUPPORTED_BRIDGE_MSG_VERSION = 1; /// @notice The address of bridge contract. - IBridgeV2 public immutable i_bridge; + IBridgeV1 public immutable i_bridge; /// @notice Lombard verifier resolver address. lockOrBurn fetches the outbound implementation and forwards tokens to it. address internal immutable i_lombardVerifierResolver; /// @notice Optional token adapter used for chains like Avalanche BTC.b. Since each pool manages a single token, @@ -78,7 +78,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { constructor( IERC20Metadata token, address verifier, - IBridgeV2 bridge, + IBridgeV1 bridge, address adapter, address advancedPoolHooks, address rmnProxy, diff --git a/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol b/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV1.sol similarity index 57% rename from chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol rename to chains/evm/contracts/pools/Lombard/interfaces/IBridgeV1.sol index 05542f6464..eb407f1a8b 100644 --- a/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV2.sol +++ b/chains/evm/contracts/pools/Lombard/interfaces/IBridgeV1.sol @@ -35,37 +35,3 @@ interface IBridgeV1 { function getAllowedDestinationToken(bytes32 destinationChain, address sourceToken) external view returns (bytes32); } - -interface IBridgeV2 is IBridgeV1 { - error BridgeV2_ZeroAmount(); - error BridgeV2_ZeroRecipient(); - error BridgeV2_InvalidRecipient(); - error BridgeV2_ZeroPath(); - error BridgeV2_ZeroBridge(); - error BridgeV2_ZeroChainId(); - error BridgeV2_ZeroSender(); - error BridgeV2_ZeroToken(); - error BridgeV2_InvalidToken(); - error BridgeV2_ZeroMailbox(); - error BridgeV2_AlreadyAllowed(bytes32 tokenId); - error BridgeV2_TokenNotAllowed(); - error BridgeV2_PathNotAllowed(); - error BridgeV2_MailboxExpected(); - error BridgeV2_BadMsgSender(); - error BridgeV2_SenderNotWhitelisted(address); - error BridgeV2_VersionMismatch(uint8 expected, uint8 actual); - error BridgeV2_InvalidMsgBodyLength(uint256 expected, uint256 actual); - error BridgeV2_PayloadSpent(); - error BridgeV2_NotEnoughFee(uint256 expected, uint256 actual); - error BridgeV2_TooBigDiscount(); - - function deposit( - bytes32 destinationChain, - address token, - address sender, - bytes32 recipient, - uint256 amount, - bytes32 destinationCaller, - bytes calldata payload - ) external payable returns (uint256, bytes32); -} diff --git a/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol b/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol index cb4a7465ff..41e46fad94 100644 --- a/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol +++ b/chains/evm/contracts/test/helpers/LombardTokenPoolHelper.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; -import {IBridgeV2} from "../../pools/Lombard/interfaces/IBridgeV2.sol"; +import {IBridgeV1} from "../../pools/Lombard/interfaces/IBridgeV1.sol"; import {LombardTokenPool} from "../../pools/Lombard/LombardTokenPool.sol"; import {IERC20Metadata} from "@openzeppelin/contracts@4.8.3/token/ERC20/extensions/IERC20Metadata.sol"; @@ -10,7 +10,7 @@ contract LombardTokenPoolHelper is LombardTokenPool { constructor( IERC20Metadata token, address verifier, - IBridgeV2 bridge, + IBridgeV1 bridge, address adapter, address advancedPoolHooks, address rmnProxy, diff --git a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol b/chains/evm/contracts/test/mocks/MockLombardBridgeV1.sol similarity index 94% rename from chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol rename to chains/evm/contracts/test/mocks/MockLombardBridgeV1.sol index 2d1ee6616e..159f580b42 100644 --- a/chains/evm/contracts/test/mocks/MockLombardBridgeV2.sol +++ b/chains/evm/contracts/test/mocks/MockLombardBridgeV1.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import {IBridgeV2} from "../../pools/Lombard/interfaces/IBridgeV2.sol"; +import {IBridgeV1} from "../../pools/Lombard/interfaces/IBridgeV1.sol"; // solhint-disable func-name-mixedcase -contract MockLombardBridgeV2 is IBridgeV2 { +contract MockLombardBridgeV1 is IBridgeV1 { uint8 internal immutable i_msgVersion; address internal s_mailbox; diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol index 92f80e699d..45920d2b06 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._getTokenDecimals.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.24; import {BaseTest} from "../../BaseTest.t.sol"; import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; -import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; +import {MockLombardBridgeV1} from "../../mocks/MockLombardBridgeV1.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {BurnMintERC20} from "@chainlink/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol"; @@ -14,14 +14,13 @@ contract LombardTokenPool_getTokenDecimals is BaseTest { BurnMintERC20 internal s_token; LombardTokenPoolHelper internal s_helper; MockVerifier internal s_resolver; - MockLombardBridgeV2 internal s_bridge; - address internal constant VERIFIER = address(0xBEEF); + MockLombardBridgeV1 internal s_bridge; function setUp() public override { super.setUp(); s_token = new BurnMintERC20("Lombard", "LBD", 18, 0, 0); s_resolver = new MockVerifier(""); - s_bridge = new MockLombardBridgeV2(1, address(0)); + s_bridge = new MockLombardBridgeV1(1, address(0)); s_helper = new LombardTokenPoolHelper( s_token, address(s_resolver), diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol index 084a10d8db..1d26c1ec39 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool._lockOrBurn.t.sol @@ -18,7 +18,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { (Pool.LockOrBurnOutV1 memory out, uint256 destAmount) = s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xDEAD)), + receiver: abi.encodePacked(s_receiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: amount, @@ -47,7 +47,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { vm.expectRevert(LombardTokenPool.OutboundImplementationNotFoundForVerifier.selector); s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xDEAD)), + receiver: abi.encodePacked(s_receiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: amount, diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol index 03b20f5111..ed487b2dab 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.constructor.t.sol @@ -2,16 +2,16 @@ pragma solidity ^0.8.24; import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; -import {IBridgeV2} from "../../../pools/Lombard/interfaces/IBridgeV2.sol"; +import {IBridgeV1} from "../../../pools/Lombard/interfaces/IBridgeV1.sol"; -import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; +import {MockLombardBridgeV1} from "../../mocks/MockLombardBridgeV1.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {BurnMintERC20} from "@chainlink/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol"; import {Test} from "forge-std/Test.sol"; contract LombardTokenPool_constructor is Test { BurnMintERC20 internal s_token; - MockLombardBridgeV2 internal s_bridge; + MockLombardBridgeV1 internal s_bridge; address internal s_resolver; address internal constant RMN = address(0xAA01); address internal constant ROUTER = address(0xBB02); @@ -19,7 +19,7 @@ contract LombardTokenPool_constructor is Test { function setUp() public { s_token = new BurnMintERC20("Lombard", "LBD", 18, 0, 0); s_resolver = address(new MockVerifier("")); - s_bridge = new MockLombardBridgeV2(1, address(0)); + s_bridge = new MockLombardBridgeV1(1, address(0)); } function test_constructor() public { @@ -39,13 +39,13 @@ contract LombardTokenPool_constructor is Test { } function test_constructor_RevertsWhen_InvalidBridgeVersion() public { - MockLombardBridgeV2 wrongVersionBridge = new MockLombardBridgeV2(2, address(0)); + MockLombardBridgeV1 wrongVersionBridge = new MockLombardBridgeV1(2, address(0)); vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.InvalidMessageVersion.selector, 1, 2)); new LombardTokenPool(s_token, s_resolver, wrongVersionBridge, address(0), address(0), RMN, ROUTER, 18); } function test_constructor_RevertsWhen_ZeroBridge() public { vm.expectRevert(LombardTokenPool.ZeroBridge.selector); - new LombardTokenPool(s_token, s_resolver, IBridgeV2(address(0)), address(0), address(0), RMN, ROUTER, 18); + new LombardTokenPool(s_token, s_resolver, IBridgeV1(address(0)), address(0), address(0), RMN, ROUTER, 18); } } diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol index 5ef754a621..299e30a8b8 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.lockOrBurn.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; -import {IBridgeV1} from "../../../pools/Lombard/interfaces/IBridgeV2.sol"; +import {IBridgeV1} from "../../../pools/Lombard/interfaces/IBridgeV1.sol"; import {Pool} from "../../../libraries/Pool.sol"; import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; @@ -23,7 +23,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { (Pool.LockOrBurnOutV1 memory out, uint256 destAmount) = s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xDEAD)), + receiver: abi.encodePacked(s_receiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: amount, @@ -54,7 +54,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { L_CHAIN_ID, address(s_token), OWNER, - bytes32(uint256(uint160(address(0xDEAD)))), + bytes32(uint256(uint160(s_receiver))), amount, bytes32(uint256(uint160(s_remotePool))) ) @@ -71,7 +71,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { Pool.LockOrBurnOutV1 memory out = s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encode(address(0xDEAD)), + receiver: abi.encode(s_receiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: amount, @@ -116,7 +116,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { Pool.LockOrBurnOutV1 memory out = adapterPool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encode(address(0x9999)), + receiver: abi.encode(s_adapterReceiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: amount, @@ -140,7 +140,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { vm.expectRevert(LombardTokenPool.OutboundImplementationNotFoundForVerifier.selector); s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xDEAD)), + receiver: abi.encodePacked(s_receiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: amount, @@ -155,7 +155,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { vm.expectRevert(abi.encodeWithSelector(LombardTokenPool.PathNotExist.selector, DEST_CHAIN_SELECTOR)); s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encodePacked(address(0xBEEF)), + receiver: abi.encodePacked(s_releaseRecipient), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: 1e18, @@ -191,7 +191,7 @@ contract LombardTokenPool_lockOrBurn is LombardTokenPoolSetup { ); s_pool.lockOrBurn( Pool.LockOrBurnInV1({ - receiver: abi.encode(address(0xCAFE)), + receiver: abi.encode(s_receiver), remoteChainSelector: DEST_CHAIN_SELECTOR, originalSender: OWNER, amount: 1e18, diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol index 618fc8ec4f..a476a116c0 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPool.releaseOrMint.t.sol @@ -2,10 +2,8 @@ pragma solidity ^0.8.24; import {Pool} from "../../../libraries/Pool.sol"; - import {LombardTokenPool} from "../../../pools/Lombard/LombardTokenPool.sol"; import {TokenPool} from "../../../pools/TokenPool.sol"; - import {MockMailbox} from "../../mocks/MockMailbox.sol"; import {LombardTokenPoolSetup} from "./LombardTokenPoolSetup.t.sol"; @@ -21,16 +19,16 @@ contract LombardTokenPool_releaseOrMint is LombardTokenPoolSetup { MockMailbox mailbox = new MockMailbox(); mailbox.setResult(PAYLOAD_HASH, true, ""); s_bridge.setMailbox(address(mailbox)); - + bytes memory rawPayload = bytes("rawPayload"); Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ originalSender: abi.encodePacked(OWNER), remoteChainSelector: DEST_CHAIN_SELECTOR, - receiver: address(0xBEEF), + receiver: s_releaseRecipient, sourceDenominatedAmount: 5e17, localToken: address(s_token), sourcePoolAddress: abi.encode(s_remotePool), sourcePoolData: abi.encode(PAYLOAD_HASH), - offchainTokenData: abi.encode(bytes("rawPayload"), bytes("proof")) + offchainTokenData: abi.encode(rawPayload, bytes("proof")) }); vm.expectEmit(); @@ -45,7 +43,7 @@ contract LombardTokenPool_releaseOrMint is LombardTokenPoolSetup { Pool.ReleaseOrMintOutV1 memory out = s_pool.releaseOrMint(releaseOrMintIn); assertEq(out.destinationAmount, releaseOrMintIn.sourceDenominatedAmount); - assertEq(mailbox.s_lastRawPayload(), bytes("rawPayload")); + assertEq(mailbox.s_lastRawPayload(), rawPayload); } function test_releaseOrMint_V1_RevertWhen_ExecutionError() public { @@ -56,7 +54,7 @@ contract LombardTokenPool_releaseOrMint is LombardTokenPoolSetup { Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ originalSender: abi.encodePacked(OWNER), remoteChainSelector: DEST_CHAIN_SELECTOR, - receiver: address(0xBEEF), + receiver: s_releaseRecipient, sourceDenominatedAmount: 1, localToken: address(s_token), sourcePoolAddress: abi.encode(s_remotePool), @@ -76,7 +74,7 @@ contract LombardTokenPool_releaseOrMint is LombardTokenPoolSetup { Pool.ReleaseOrMintInV1 memory releaseOrMintIn = Pool.ReleaseOrMintInV1({ originalSender: abi.encodePacked(OWNER), remoteChainSelector: DEST_CHAIN_SELECTOR, - receiver: address(0xBEEF), + receiver: s_releaseRecipient, sourceDenominatedAmount: 1, localToken: address(s_token), sourcePoolAddress: abi.encode(s_remotePool), diff --git a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol index 5a23d6bd50..cab491f4e0 100644 --- a/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol +++ b/chains/evm/contracts/test/pools/LombardTokenPool/LombardTokenPoolSetup.t.sol @@ -4,23 +4,26 @@ pragma solidity ^0.8.24; import {Router} from "../../../Router.sol"; import {TokenPool} from "../../../pools/TokenPool.sol"; import {LombardTokenPoolHelper} from "../../helpers/LombardTokenPoolHelper.sol"; -import {MockLombardBridgeV2} from "../../mocks/MockLombardBridgeV2.sol"; +import {MockLombardBridgeV1} from "../../mocks/MockLombardBridgeV1.sol"; import {MockVerifier} from "../../mocks/MockVerifier.sol"; import {TokenPoolSetup} from "../TokenPool/TokenPoolSetup.t.sol"; contract LombardTokenPoolSetup is TokenPoolSetup { LombardTokenPoolHelper internal s_pool; MockVerifier internal s_verifierResolver; - MockLombardBridgeV2 internal s_bridge; + MockLombardBridgeV1 internal s_bridge; address internal constant VERIFIER_IMPL = address(0x2345); address internal s_remotePool = makeAddr("remotePool"); address internal s_remoteToken = makeAddr("remoteToken"); + address internal s_receiver = makeAddr("receiver"); + address internal s_releaseRecipient = makeAddr("releaseRecipient"); + address internal s_adapterReceiver = makeAddr("adapterReceiver"); function setUp() public virtual override { super.setUp(); s_verifierResolver = new MockVerifier(""); - s_bridge = new MockLombardBridgeV2(1, address(0)); + s_bridge = new MockLombardBridgeV1(1, address(0)); s_pool = new LombardTokenPoolHelper( s_token, From cf9dcdcf96867956f81e16bdb27b8991f1392762 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 9 Dec 2025 13:12:08 +0530 Subject: [PATCH 12/16] wrapper update --- .../generated/latest/lombard_token_pool/lombard_token_pool.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go index de0d0ff7da..c64a16e07f 100644 --- a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go +++ b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go @@ -106,7 +106,7 @@ type TokenPoolTokenTransferFeeConfigArgs struct { } var LombardTokenPoolMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV2\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV2\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", Bin: "0x610160806040523461031b5761010081616851803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a461638f90816104c2823960805181818161178f015281816122a30152818161245b0152818161311101528181613304015281816133e00152818161367d0152818161389f01528181613a69015281816143af0152614409015260a051818181611a2f01528181614275015281816152e9015261536c015260c051818181610d9d0152818161186b0152818161233d015281816131ac015261393a015260e05181818161197e015281816124e20152818161336c01528181613af00152614d26015261010051818181610b09015281816125a201528181612dee0152613bb7015261012051818181610ad0015261173c015261014051818181610b45015261254e0152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461448e57508063181f5a771461442d57806321df0da7146143dc578063240028e8146143785780632422ac451461429957806324f65ee71461425b5780632c063404146141c257806338ff8c3814614156578063390775371461382d578063489a68f21461306c5780634c5ef0ed146130255780635fa1356514612e9957806362ddd3c414612e12578063708e1f7914612dc15780637437ff9f14612d7057806379ba509714612ca95780638926f54f14612c6357806389720a6214612b9c5780638da5cb5b14612b685780639a4575b91461222c5780639c893fe91461215f578063a42a7b8b14611ff8578063acfecf9114611ee2578063b1c71c6514611661578063b794658014611624578063c4bffe2b146114f9578063c7230a601461134c578063d8aa3f4014611212578063dc04fa1f14610dc1578063dc0bd97114610d70578063dcbd41bc14610b6c578063dd65bdb114610aa3578063e8a1da17146103e3578063f2fde38b146103145763fdf16875146101a257600080fd5b34610311576060600319360112610311576101bb614710565b906101c46147c7565b6044359273ffffffffffffffffffffffffffffffffffffffff841680850361030d576101ee615476565b73ffffffffffffffffffffffffffffffffffffffff821680156102e557946102df917fba9213054b14c2e884f779120bb196f0735cef27140498a9d26117eeab77a1179596600254907fffffffffffffffffffff0000000000000000000000000000000000000000000075ffff00000000000000000000000000000000000000008860a01b16921617176002557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556040519384938491604091949361ffff73ffffffffffffffffffffffffffffffffffffffff9283606087019816865216602085015216910152565b0390a180f35b6004857f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b80fd5b50346103115760206003193601126103115773ffffffffffffffffffffffffffffffffffffffff610343614710565b61034b615476565b163381146103bb57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346103115760406003193601126103115760043567ffffffffffffffff8111610900576104159036906004016148ea565b9060243567ffffffffffffffff811161030d5790610438849236906004016148ea565b939091610443615476565b83905b8282106109085750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610904578060051b830135858112156108fc578301610120813603126108fc57604051946104aa86614613565b6104b3826147a5565b8652602082013567ffffffffffffffff81116109005782019436601f87011215610900578535956104e387614cf1565b966104f1604051988961462f565b80885260208089019160051b830101903682116108fc5760208301905b8282106108c9575050505060208701958652604083013567ffffffffffffffff81116108c557610541903690850161485d565b916040880192835261056b61055936606087016150ee565b9460608a0195865260c03691016150ee565b95608089019687528351511561089d5761058f67ffffffffffffffff8a5116615f45565b156108665767ffffffffffffffff89511682526007602052604082206105b68651826158b8565b6105c48851600283016158b8565b6004855191019080519067ffffffffffffffff8211610839576105e78354614f3c565b601f81116107fe575b50602090601f831160011461075f5761063e9291869183610754575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b88518051821015610678579061067260019261066b8367ffffffffffffffff8f511692614ef9565b51906154c1565b01610643565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074667ffffffffffffffff60019796949851169251935191516107126106dd604051968796875261010060208801526101008701906146cd565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a1019392909193610479565b015190508e8061060c565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e657509084600195949392106107af575b505050811b019055610641565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a2565b9293602060018192878601518155019501930161078c565b6108299084875260208720601f850160051c8101916020861061082f575b601f0160051c019061518a565b8d6105f0565b909150819061081c565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108f8576020916108ed839283369189010161485d565b81520191019061050e565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092a6109258486889a9699979a615073565b614c1e565b169161093583615ba8565b15610a7757828452600760205261095160056040862001615b45565b94845b865181101561098a5760019085875260076020526109836005604089200161097c838b614ef9565b5190615d3e565b5001610954565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c68154614f3c565b80610a36575b5050500180549088815581610a18575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610446565b885260208820908101905b818110156109dc57888155600101610a23565b601f8111600114610a4c5750555b888a806109cc565b81835260208320610a6791601f01861c81019060010161518a565b8082528160208120915555610a44565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b5034610311578060031936011261031157606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346103115760206003193601126103115760043567ffffffffffffffff811161090057610b9e90369060040161491b565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d4e575b610d2257825b818110610bd1578380f35b610bdc818385615083565b67ffffffffffffffff610bee82614c1e565b1690610c07826000526006602052604060002054151590565b15610cf657907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cb6610c90602060019897018b610c4882615093565b15610cbd578790526003602052610c6f60408d20610c6936604088016150ee565b906158b8565b868c526004602052610c8b60408d20610c693660a088016150ee565b615093565b916040519215158352610ca96020840160408301615146565b60a0608084019101615146565ba201610bc6565b60026040828a610c8b94526007602052610cdf828220610c6936858c016150ee565b8a815260076020522001610c693660a088016150ee565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc0565b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115760406003193601126103115760043567ffffffffffffffff811161090057610df390369060040161491b565b60243567ffffffffffffffff811161030d57610e139036906004016148ea565b919092610e1e615476565b845b828110610e8a57505050825b818110610e37578380f35b8067ffffffffffffffff610e516109256001948688615073565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e2c565b610e98610925828585615083565b610ea3828585615083565b90602082019060e0830190610eb782615093565b156111dd5760a0840161271061ffff610ecf836150a0565b1610156111ce5760c085019161271061ffff610eea856150a0565b1610156111965763ffffffff610eff866150af565b16156111615767ffffffffffffffff1694858c52600a60205260408c20610f25866150af565b63ffffffff16908054906040840191610f3d836150af565b60201b67ffffffff0000000016936060860194610f59866150af565b60401b6bffffffff0000000000000000169660800196610f78886150af565b60601b6fffffffff0000000000000000000000001691610f978a6150a0565b60801b71ffff000000000000000000000000000000001693610fb88c6150a0565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16171717815561106b87615093565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110bc906150c0565b63ffffffff1687526110cd906150c0565b63ffffffff1660208701526110e1906150c0565b63ffffffff1660408601526110f5906150c0565b63ffffffff166060850152611109906147e9565b61ffff16608084015261111b906147e9565b61ffff1660a083015261112d906147ba565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e20565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111a5866150a0565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111a56024936150a0565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346103115760806003193601126103115761122c614710565b5061123561478e565b61123d6147d8565b5060643567ffffffffffffffff81116108c5579167ffffffffffffffff60409261126d60e09536906004016147f8565b50508260c0855161127d816145f7565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112b5826145f7565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346103115760406003193601126103115760043567ffffffffffffffff81116109005761137e9036906004016148ea565b9060243573ffffffffffffffffffffffffffffffffffffffff8116908181036108fc576113a9615476565b845b8481106113b6578580f35b80602073ffffffffffffffffffffffffffffffffffffffff6113e36113de6024958a8a615073565b614c33565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114ee5787906114b8575b6001925080611434575b50016113ab565b611462818573ffffffffffffffffffffffffffffffffffffffff61145c6113de878d8d615073565b1661572b565b847f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff6114a96113de878d8d615073565b1693604051908152a33861142d565b509060203d81116114e7575b6114ce818361462f565b6020826000928101031261031157509060019151611423565b503d6114c4565b6040513d89823e3d90fd5b5034610311578060031936011261031157604051906005548083528260208101600584526020842092845b81811061160b5750506115399250038361462f565b815161155d61154782614cf1565b91611555604051938461462f565b808352614cf1565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bc578067ffffffffffffffff6115a960019388614ef9565b51166115b58286614ef9565b520161158a565b50925090604051928392602084019060208552518091526040840192915b8181106115e8575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115da565b8454835260019485019487945060209093019201611524565b50346103115760206003193601126103115761165d611649611644614777565b615051565b6040519182916020835260208301906146cd565b0390f35b5034610311576060600319360112610311576004359067ffffffffffffffff8211610311578160040160a06003198436030112610900576116a06147c7565b9060443567ffffffffffffffff811161030d576116c19036906004016147f8565b9390946116cc614ee0565b5060248101956116db87614c1e565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ed7578492611e9b575b5073ffffffffffffffffffffffffffffffffffffffff821615611e73576117cf907f0000000000000000000000000000000000000000000000000000000000000000976117bf606486013580958b61572b565b6117c7614ee0565b503691614826565b60848301926117dd84614c33565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e295777ffffffffffffffff0000000000000000000000000000000061181e8a614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611d91578691611def575b50611dc75767ffffffffffffffff6118b28a614c1e565b166118ca816000526006602052604060002054151590565b15611d9c57602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015611d91578690611d40575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d145761ffff8716918215611c825761ffff60025460a01c1680611bb7575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a95575b611a8b8a611a276116448e6119ba8e8e615e72565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6119ee84614c1e565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614c1e565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611a6360408261462f565b60405192611a7084614590565b835260208301526040519283926040845260408401906148c0565b9060208301520390f35b833b156108f8578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611ae491615af5565b6064890160a09052610104890190611afb92614c91565b94611b05906147a5565b67ffffffffffffffff166084880152604401611b2090614756565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611b4990614756565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b7e916146cd565b03925af18015611bac57611b97575b80808080806119a5565b611ba282809261462f565b6103115780611b8d565b6040513d84823e3d90fd5b808410611c52575067ffffffffffffffff611bd18b614c1e565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611c248d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611965565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611c948b614c1e565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611ce78d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611967565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611d89575b81611d5a6020938361462f565b81010312611d8557611d8073ffffffffffffffffffffffffffffffffffffffff91614bf0565b61192b565b8580fd5b3d9150611d4d565b6040513d88823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e21575b81611e0a6020938361462f565b81010312611d8557611e1b90614c11565b3861189b565b3d9150611dfd565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a87614c33565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ecf575b81611eb76020938361462f565b8101031261030d57611ec890614bf0565b903861176c565b3d9150611eaa565b6040513d86823e3d90fd5b503461031157611ef13661487b565b611ef9615476565b67ffffffffffffffff831692611f1c846000526006602052604060002054151590565b15611fcc578385526007602052611f4b60056040872001611f3e368587614826565b6020815191012090615d3e565b15611f915750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611f8b604051928392602084526020840191614c91565b0390a280f35b90611fc8906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614cd0565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115767ffffffffffffffff61201b614777565b168152600760205261203260056040832001615b45565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061207761206183614cf1565b9261206f604051948561462f565b808452614cf1565b01835b81811061214e575050825b82518110156120cb578061209b60019285614ef9565b51855260086020526120af60408620614f8f565b6120b98285614ef9565b526120c48184614ef9565b5001612085565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b82821061210357505050500390f35b9193602061213e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288516146cd565b96019201920185949391926120f4565b80606060208093860101520161207a565b50346103115760206003193601126103115767ffffffffffffffff612182614777565b61218a615476565b16808252600b6020526040822090604051916121a583614590565b600181549182855201549060208401918252156122005760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115760043567ffffffffffffffff8111610900578060040160a060031983360301126108c55761226a614ee0565b5060405160209261227b848361462f565b8482526084810161228b81614c33565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b4757602482019377ffffffffffffffff000000000000000000000000000000006122f186614c1e565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612ab4578891612b12575b50612aea5767ffffffffffffffff61238486614c1e565b1661239c816000526006602052604060002054151590565b15612abf578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612ab4578890612a68575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a3c5786606484013594859367ffffffffffffffff61243589614c1e565b1680845260078a526124836040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a91615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908161292a575b5050505067ffffffffffffffff61251f86614c1e565b168752600b86526040872060405161253681614590565b6001825492838352015491888201928352156128ec577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128e457905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128d9578c916128ac575b506126326116448b614c1e565b8b815191818082019384920101031261283157519081810361287e5750508961265b8680614b9f565b90500361283657604490519601958961267d61267689614c33565b9680614b9f565b90809291810103126128315760409460c4938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977f793ea55b00000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a48401525af19687156128255780976127c4575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611a1f6116449661274f6127496127869a614c1e565b93614c33565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b91604051908282015281815261279d60408261462f565b604051926127aa84614590565b83528183015261165d6040519282849384528301906148c0565b909196506040823d60401161281d575b816127e16040938361462f565b810103126103115750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff612704565b3d91506127d4565b604051903d90823e3d90fd5b600080fd5b611fc88a6128448780614b9f565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614c91565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128d2575b6128c3818361462f565b81010312612831575138612625565b503d6128b9565b6040513d8e823e3d90fd5b50859061258b565b60248967ffffffffffffffff6129018a614c1e565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b1561030d5783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d6129758d80615af5565b6064870160a0905261010487019061298c92614c91565b92612996906147a5565b67ffffffffffffffff1660848601526044016129b190614756565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129db90614756565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a11916146cd565b03925af18015611bac57612a27575b8080612509565b81612a319161462f565b6108f8578638612a20565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612aad575b612a7e818361462f565b81010312612aa957612aa473ffffffffffffffffffffffffffffffffffffffff91614bf0565b6123fc565b8780fd5b503d612a74565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b40575b612b29818361462f565b81010312612aa957612b3a90614c11565b3861236d565b503d612b1f565b8573ffffffffffffffffffffffffffffffffffffffff611e4a602493614c33565b5034610311578060031936011261031157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103115760c060031936011261031157612bb6614710565b612bbe61478e565b9060643561ffff8116810361030d5760843567ffffffffffffffff81116108fc57612bed9036906004016147f8565b9160a4359360028510156108f857612c089560443591614d09565b90604051918291602083016020845282518091526020604085019301915b818110612c34575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c26565b5034610311576020600319360112610311576020612c9f67ffffffffffffffff612c8b614777565b166000526006602052604060002054151590565b6040519015158152f35b5034610311578060031936011261031157805473ffffffffffffffffffffffffffffffffffffffff81163303612d48577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346103115780600319360112610311576002546009546040805173ffffffffffffffffffffffffffffffffffffffff808516825260a09490941c61ffff1660208201529290911690820152606090f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461031157612e213661487b565b612e2d93929193615476565b67ffffffffffffffff8216612e4f816000526006602052604060002054151590565b15612e6e5750612e6b9293612e65913691614826565b906154c1565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b503461031157606060031936011261031157612eb3614777565b6024359060443567ffffffffffffffff811161030d57612ed79036906004016147f8565b612edf615476565b67ffffffffffffffff831692612f02846000526006602052604060002054151590565b15612ff9578415612fd157612f21612f1b368486614826565b82614c54565b15611f91575060208103612f945781602091810103126128315760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f6c81614590565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fc86040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c91565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760406003193601126103115761303f614777565b906024359067ffffffffffffffff8211610311576020612c9f84613066366004870161485d565b90614c54565b5034610311576040600319360112610311576004359067ffffffffffffffff821161031157816004016101006003198436030112610900576130ac6147c7565b91806040516130ba816145db565b5260648401359260c485016130ea6130e46130df6130d88488614b9f565b3691614826565b615275565b86615369565b9460848701906130f982614c33565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361380c57602488019577ffffffffffffffff0000000000000000000000000000000061315f88614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114ee5787916137d2575b506137aa5767ffffffffffffffff6131f388614c1e565b1661320b816000526006602052604060002054151590565b1561377f57602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156114ee578791613745575b50156137195761328287614c1e565b9461329860a48b01966130666130d88986614b9f565b156136d25761ffff1690811561361e5767ffffffffffffffff6132ba89614c1e565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061332c60408c2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016948561344f575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6133da6127498f6133d486614c33565b50614c1e565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a280604051613446816145db565b52604051908152f35b853b15612aa95792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526134a18680615af5565b60648b0161010090526101648b01906134b992614c91565b936134c3906147a5565b67ffffffffffffffff1660848a01526134de60448801614756565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c489015261350790614756565b73ffffffffffffffffffffffffffffffffffffffff1660e488015261352c9084615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c888403016101048901526135619291614c91565b9061356c9083615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526135a19291614c91565b9160e4016135ae91615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526135e39291614c91565b908b6024840152604483015203925af18015611bac57613609575b808080808080613393565b61361482809261462f565b61031157806135fe565b67ffffffffffffffff61363089614c1e565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a806136a5600260408d200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2613355565b6136dc8683614b9f565b611fc86040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c91565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d602011613777575b816137606020938361462f565b810103126108f85761377190614c11565b38613273565b3d9150613753565b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011613804575b816137ed6020938361462f565b810103126108f8576137fe90614c11565b386131dc565b3d91506137e0565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a85614c33565b50346103115760206003193601126103115760043567ffffffffffffffff811161090057806004019161010060031983360301126103115780604051613872816145db565b52606482013590608483019361388785614c33565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361413557602484019177ffffffffffffffff000000000000000000000000000000006138ed84614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611bac5782916140fb575b506140d35767ffffffffffffffff61398184614c1e565b16613999816000526006602052604060002054151590565b156140a757602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611bac57829161406d575b501561404157613a1083614c1e565b613a2560a48701916130666130d88487614b9f565b156140375784959667ffffffffffffffff613a3f86614c1e565b168084526007602052613a916002604086200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016988991615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613e71575b50505090613b2860e4870182614b9f565b8192910160408382031261030d57823567ffffffffffffffff81116108fc5781613b5391850161485d565b9260208101359067ffffffffffffffff8211611d8557613b7492910161485d565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613e6657908592918391613e04575b50613c478373ffffffffffffffffffffffffffffffffffffffff613c5997604051988996879586937fa62085060000000000000000000000000000000000000000000000000000000085526040600486015260448501906146cd565b906003198483030160248501526146cd565b0393165af18015613df95783928491613d6a575b5015613d4257613c8360209160c4890190614b9f565b9080929181010312612831573503613d1a575067ffffffffffffffff60209461343685613cdc6044613cd57ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614c1e565b9401614c33565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613d7c818461462f565b820160608382031261030d57825190613d9760208501614c11565b9360408101519067ffffffffffffffff82116108f8570181601f82011215611d8557805191613dc583614670565b90613dd3604051928361462f565b838252602084840101116108f85790602080613df294930191016146aa565b9138613c6d565b6040513d85823e3d90fd5b9193949250506020813d602011613e5e575b81613e236020938361462f565b810103126108fc57918491613c478373ffffffffffffffffffffffffffffffffffffffff613e54613c599897614bf0565b9397505050613beb565b3d9150613e16565b6040513d87823e3d90fd5b813b1561030d579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613ec091615af5565b606488016101009052610164880190613ed892614c91565b93613ee2906147a5565b67ffffffffffffffff166084870152613efd60448601614756565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613f2690614756565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613f4b908c615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610104860152613f809291614c91565b613f8d60c483018c615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610124860152613fc29291614c91565b9060e401613fd0908b615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140059291614c91565b8c602483015282604483015203925af18015611bac57614027575b8080613b17565b816140319161462f565b38614020565b6136dc9083614b9f565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d60201161409f575b816140886020938361462f565b810103126109005761409990614c11565b38613a01565b3d915061407b565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d60201161412d575b816141166020938361462f565b810103126109005761412790614c11565b3861396a565b3d9150614109565b60248273ffffffffffffffffffffffffffffffffffffffff611e4a88614c33565b5034610311576020600319360112610311576040809167ffffffffffffffff61417d614777565b826020855161418b81614590565b8281520152168152600b6020522081516141a481614590565b60206001835493848452015491019081528251918252516020820152f35b50346103115760c0600319360112610311576141dc614710565b506141e561478e565b6141ed614733565b506084359161ffff831683036103115760a4359067ffffffffffffffff82116103115760a063ffffffff8061ffff614234888861422d3660048b016147f8565b5050614a60565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b5034610311578060031936011261031157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610311576040600319360112610311576142b3614777565b602435918215158303610311576101406143766142d085856149dd565b61432660409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b503461031157602060031936011261031157602090614395614710565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115780600319360112610311575061165d60405161445060408261462f565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d64657600000000000060208201526040519182916020835260208301906146cd565b905034610900576020600319360112610900576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c557602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115614566575b811561453c575b8115614512575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861450b565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150614504565b7f3317103100000000000000000000000000000000000000000000000000000000811491506144fd565b6040810190811067ffffffffffffffff8211176145ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff8211176145ac57604052565b60e0810190811067ffffffffffffffff8211176145ac57604052565b60a0810190811067ffffffffffffffff8211176145ac57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176145ac57604052565b67ffffffffffffffff81116145ac57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381106146bd5750506000910152565b81810151838201526020016146ad565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614709815180928187528780880191016146aa565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b6004359067ffffffffffffffff8216820361283157565b6024359067ffffffffffffffff8216820361283157565b359067ffffffffffffffff8216820361283157565b3590811515820361283157565b6024359061ffff8216820361283157565b6044359061ffff8216820361283157565b359061ffff8216820361283157565b9181601f840112156128315782359167ffffffffffffffff8311612831576020838186019501011161283157565b92919261483282614670565b91614840604051938461462f565b829481845281830111612831578281602093846000960137010152565b9080601f830112156128315781602061487893359101614826565b90565b9060406003198301126128315760043567ffffffffffffffff8116810361283157916024359067ffffffffffffffff8211612831576148bc916004016147f8565b9091565b6148789160206148d983516040845260408401906146cd565b9201519060208184039101526146cd565b9181601f840112156128315782359167ffffffffffffffff8311612831576020808501948460051b01011161283157565b9181601f840112156128315782359167ffffffffffffffff8311612831576020808501948460081b01011161283157565b6040519061495982614613565b60006080838281528260208201528260408201528260608201520152565b9060405161498481614613565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916149ef61494c565b506149f861494c565b50614a2c57166000526007602052604060002090614878614a206002614a25614a2086614977565b6151f0565b9401614977565b1690816000526003602052614a47614a206040600020614977565b916000526004602052614878614a206040600020614977565b67ffffffffffffffff16600052600a602052604060002060405190614a84826145f7565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c0880152614b865761ffff1680614b1d5750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c1690818110614b5657505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612831570180359067ffffffffffffffff82116128315760200191813603831361283157565b519073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b5190811515820361283157565b3567ffffffffffffffff811681036128315790565b3573ffffffffffffffffffffffffffffffffffffffff811681036128315790565b9067ffffffffffffffff61487892166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61487895931681528160208201520191614c91565b67ffffffffffffffff81116145ac5760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614ebe57614dc29467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614c91565b916002821015614e8f578380600094819460a483015203915afa908115614e8357600091614dee575090565b3d8083833e614dfd818361462f565b8101906020818303126108c55780519067ffffffffffffffff821161030d570181601f820112156108c557805190614e3482614cf1565b93614e42604051958661462f565b82855260208086019360051b8301019384116103115750602001905b828210614e6b5750505090565b60208091614e7884614bf0565b815201910190614e5e565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614ed460208261462f565b60008152600036813790565b60405190614eed82614590565b60606020838281520152565b8051821015614f0d5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015614f85575b6020831014614f5657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614f4b565b9060405191826000825492614fa384614f3c565b80845293600181169081156150115750600114614fca575b50614fc89250038361462f565b565b90506000929192526020600020906000915b818310614ff5575050906020614fc89282010138614fbb565b6020919350806001915483858901015201910190918492614fdc565b60209350614fc89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614fbb565b67ffffffffffffffff1660005260076020526148786004604060002001614f8f565b9190811015614f0d5760051b0190565b9190811015614f0d5760081b0190565b3580151581036128315790565b3561ffff811681036128315790565b3563ffffffff811681036128315790565b359063ffffffff8216820361283157565b35906fffffffffffffffffffffffffffffffff8216820361283157565b9190826060910312612831576040516060810181811067ffffffffffffffff8211176145ac576040526040615141818395615128816147ba565b8552615136602082016150d1565b6020860152016150d1565b910152565b6fffffffffffffffffffffffffffffffff61518460408093615167816147ba565b1515865283615178602083016150d1565b166020870152016150d1565b16910152565b818110615195575050565b6000815560010161518a565b818102929181159184041417156151b457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116151b457565b6151f861494c565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691615255602085019361524f61524263ffffffff875116426151e3565b85608089015116906151a1565b90615ae8565b8082101561526e57505b16825263ffffffff4216905290565b905061525f565b805180156152e5576020036152a757805160208281019183018390031261283157519060ff82116152a7575060ff1690565b611fc8906040519182917f953576f70000000000000000000000000000000000000000000000000000000083526020600484015260248301906146cd565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff82116151b457565b60ff16604d81116151b457600a0a90565b811561533a570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff81169282841461546f5782841161544557906153ae9161530b565b91604d60ff841611801561540c575b6153d6575050906153d06148789261531f565b906151a1565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506154168361531f565b801561533a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484116153bd565b61544e9161530b565b91604d60ff8416116153d6575050906154696148789261531f565b90615330565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff60015416330361549757565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b908051156157015767ffffffffffffffff815160208301209216918260005260076020526154f6816005604060002001615fa5565b156156bd5760005260086020526040600020815167ffffffffffffffff81116145ac576155238254614f3c565b601f811161568b575b506020601f82116001146155c5579161559f827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea95936155b5956000916155ba575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90556040519182916020835260208301906146cd565b0390a2565b90508401513861556e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b8181106156735750926155b59492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea98961061563c575b5050811b019055611649565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880615630565b9192602060018192868a0151815501940192016155f5565b6156b790836000526020600020601f840160051c8101916020851061082f57601f0160051c019061518a565b3861552c565b5090611fc86040519283927f393b8ad200000000000000000000000000000000000000000000000000000000845260048401526040602484015260448301906146cd565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815261580192909161579060648461462f565b166000806040958651946157a4888761462f565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d156158b0573d916157e583614670565b926157f28751948561462f565b83523d6000602085013e6162b6565b80518061580d57505050565b81602091810103126128315760206158259101614c11565b1561582d5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6060916162b6565b815191929115615a3a576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff602085015116106159d757614fc891925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615a38604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615ac9575b615a6857614fc891926158fb565b606483615a38604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615a5a565b919082018092116151b457565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561283157016020813591019167ffffffffffffffff821161283157813603831361283157565b906040519182815491828252602082019060005260206000209260005b818110615b77575050614fc89250038361462f565b8454835260019485019487945060209093019201615b62565b8054821015614f0d5760005260206000200190600090565b6000818152600660205260409020548015615d37577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151b457600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151b457818103615cc8575b5050506005548015615c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615c56816005615b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615d1f615cd9615cea936005615b90565b90549060031b1c9283926005615b90565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615c1d565b5050600090565b9060018201918160005282602052604060002054801515600014615e69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151b4578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151b457818103615e32575b50505080548015615c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615df38282615b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615e52615e42615cea9386615b90565b90549060031b1c92839286615b90565b905560005283602052604060002055388080615dbb565b50505050600090565b9061ffff9067ffffffffffffffff615e8c60208501614c1e565b16600052600a60205260406000208260405191615ea8836145f7565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c161515910152161515600014615f3e57505b168015615f3657612710615f2f606061487894013592836151a1565b04906151e3565b506060013590565b9050615f13565b80600052600660205260406000205415600014615f9f57600554680100000000000000008110156145ac57615f86615cea8260018594016005556005615b90565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615d3757805490680100000000000000008210156145ac5782615fe3615cea846001809601855584615b90565b905580549260005201602052604060002055600190565b9182549060ff8260a01c161580156162ae575b6162a8576fffffffffffffffffffffffffffffffff8216916001850190815461605263ffffffff6fffffffffffffffffffffffffffffffff83169360801c16426151e3565b908161620a575b50508481106161be57508383106160b35750506160886fffffffffffffffffffffffffffffffff9283926151e3565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c92831561615257816160cb916151e3565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908082116151b45761611961611e9273ffffffffffffffffffffffffffffffffffffffff96615ae8565b615330565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b82869293961161627e576162259261524f9160801c906151a1565b808410156162795750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880616059565b616230565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b50821561600d565b9192901561633157508151156162ca575090565b3b156162d35790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156163445750805190602001fd5b611fc8906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906146cd56fea164736f6c634300081a000a", } diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 2f61599f24..e45c734962 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,7 +21,7 @@ hybrid_lock_release_usdc_token_pool: ../solc/ccip/HybridLockReleaseUSDCTokenPool hyper_liquid_compatible_erc20: ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.abi.json ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.bin 1b825f6c2f7ba630ca0dbacb241c6a8cb16a5aa62cc152f5fefe40166c3d96f6 lock_release_token_pool: ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin 08155c106ddbc4c8d584a1a844030681ac5f82a95272ecfbb11fca31d5fd65cd log_message_data_receiver: ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.abi.json ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.bin 6fe60e48711884eae82dd95cabb1c66a5644336719fa1219df1ceceec11e6bce -lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 6d74ff7071051634741ab148cfa7eef212afc83718c6c1abd616c98c03490848 +lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 3d9ff3cee050a570c0d15627c93caa26913a5a5ebca4c718b4534c4e5434354d maybe_revert_message_receiver: ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin ee264f67a2356cc4eebe839a5a88367cbcdc27a7520cca56263319e9afe97a1a message_hasher: ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin cb3448514ff88dd019316135cf6c10f6b0d6afcb8ded227884c910efe4274ba1 mock_lbtc_token_pool: ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.abi.json ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.bin ec43e91571836b9cf45e1a0ebdcea8dc5540e510cd96bf6560aaff6ec2ba8f11 From 3847066625a397c5d8eda68751b08abfdc72f72c Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 9 Dec 2025 13:22:02 +0530 Subject: [PATCH 13/16] wrapper + snap update --- chains/evm/.gas-snapshot | 18 +++++++++++++----- ...wrapper-dependency-versions-do-not-edit.txt | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index f44f6c9406..12b0888065 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -259,11 +259,19 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21811) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97332) -LombardTokenPool_constructor:test_constructor() (gas: 3962656) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 92010) -LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12070) -LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14385) -LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247098) +LombardTokenPool_constructor:test_constructor() (gas: 4531545) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 368356) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95305) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98499) +LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) +LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) +LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 248868) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 317505) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5202086) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 249096) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 492653) +LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54568) +LombardTokenPool_setPath:test_setPath() (gas: 69366) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_MaxLengthFields() (gas: 436236) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithData() (gas: 57857) diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 55e573bc87..7401b283be 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,7 +21,7 @@ hybrid_lock_release_usdc_token_pool: ../solc/ccip/HybridLockReleaseUSDCTokenPool hyper_liquid_compatible_erc20: ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.abi.json ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.bin 1b825f6c2f7ba630ca0dbacb241c6a8cb16a5aa62cc152f5fefe40166c3d96f6 lock_release_token_pool: ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin 08155c106ddbc4c8d584a1a844030681ac5f82a95272ecfbb11fca31d5fd65cd log_message_data_receiver: ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.abi.json ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.bin 6fe60e48711884eae82dd95cabb1c66a5644336719fa1219df1ceceec11e6bce -lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 17a87f7c4d25a4b0a6f4f8962d7c0baa1bd157d94e61a7a23cc9c81d8b6107ae +lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 3d9ff3cee050a570c0d15627c93caa26913a5a5ebca4c718b4534c4e5434354d maybe_revert_message_receiver: ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin ee264f67a2356cc4eebe839a5a88367cbcdc27a7520cca56263319e9afe97a1a message_hasher: ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin cb3448514ff88dd019316135cf6c10f6b0d6afcb8ded227884c910efe4274ba1 mock_lbtc_token_pool: ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.abi.json ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.bin ec43e91571836b9cf45e1a0ebdcea8dc5540e510cd96bf6560aaff6ec2ba8f11 From d1d304a5ddbea976946cdc357b2cf6c63ad1c7a8 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Tue, 9 Dec 2025 18:41:49 +0530 Subject: [PATCH 14/16] comment fix --- chains/evm/contracts/pools/Lombard/LombardTokenPool.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol index 2f75b7bf68..0e217335ce 100644 --- a/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol +++ b/chains/evm/contracts/pools/Lombard/LombardTokenPool.sol @@ -71,7 +71,7 @@ contract LombardTokenPool is TokenPool, ITypeAndVersion { /// @param verifier The address of Lombard verifier resolver. Used in V2 flows to fetch the outbound /// implementation that handles token burns and cross-chain attestations. - /// @param bridge The Lombard BridgeV2 contract that handles cross-chain token transfers. + /// @param bridge The Lombard BridgeV1 contract that handles cross-chain token transfers. /// @param adapter Optional source-chain token address override. Used for non-upgradeable tokens like BTC.b /// on Avalanche where an adapter contract performs mint/burn on behalf of the actual token. When set, this /// address is passed to bridge.deposit() instead of the pool's token address. Set to address(0) if not needed. From cc1f3d44ee1e32cf647ed22a2469ce3ad44a28f3 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 10 Dec 2025 15:24:18 +0530 Subject: [PATCH 15/16] merge fix --- .../lombard_token_pool/lombard_token_pool.go | 28 +++++++++++++++++-- chains/evm/.gas-snapshot | 22 +++++++-------- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go index 920b477923..cb9f76bb22 100644 --- a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go +++ b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go @@ -106,8 +106,8 @@ type TokenPoolTokenTransferFeeConfigArgs struct { } var LombardTokenPoolMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"minBlockConfirmations\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", - Bin: "0x610160806040523461031b5761010081616851803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a461638f90816104c2823960805181818161178f015281816122a30152818161245b0152818161311101528181613304015281816133e00152818161367d0152818161389f01528181613a69015281816143af0152614409015260a051818181611a2f01528181614275015281816152e9015261536c015260c051818181610d9d0152818161186b0152818161233d015281816131ac015261393a015260e05181818161197e015281816124e20152818161336c01528181613af00152614d26015261010051818181610b09015281816125a201528181612dee0152613bb7015261012051818181610ad0015261173c015261014051818181610b45015261254e0152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461448e57508063181f5a771461442d57806321df0da7146143dc578063240028e8146143785780632422ac451461429957806324f65ee71461425b5780632c063404146141c257806338ff8c3814614156578063390775371461382d578063489a68f21461306c5780634c5ef0ed146130255780635fa1356514612e9957806362ddd3c414612e12578063708e1f7914612dc15780637437ff9f14612d7057806379ba509714612ca95780638926f54f14612c6357806389720a6214612b9c5780638da5cb5b14612b685780639a4575b91461222c5780639c893fe91461215f578063a42a7b8b14611ff8578063acfecf9114611ee2578063b1c71c6514611661578063b794658014611624578063c4bffe2b146114f9578063c7230a601461134c578063d8aa3f4014611212578063dc04fa1f14610dc1578063dc0bd97114610d70578063dcbd41bc14610b6c578063dd65bdb114610aa3578063e8a1da17146103e3578063f2fde38b146103145763fdf16875146101a257600080fd5b34610311576060600319360112610311576101bb614710565b906101c46147c7565b6044359273ffffffffffffffffffffffffffffffffffffffff841680850361030d576101ee615476565b73ffffffffffffffffffffffffffffffffffffffff821680156102e557946102df917fba9213054b14c2e884f779120bb196f0735cef27140498a9d26117eeab77a1179596600254907fffffffffffffffffffff0000000000000000000000000000000000000000000075ffff00000000000000000000000000000000000000008860a01b16921617176002557fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556040519384938491604091949361ffff73ffffffffffffffffffffffffffffffffffffffff9283606087019816865216602085015216910152565b0390a180f35b6004857f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b80fd5b50346103115760206003193601126103115773ffffffffffffffffffffffffffffffffffffffff610343614710565b61034b615476565b163381146103bb57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346103115760406003193601126103115760043567ffffffffffffffff8111610900576104159036906004016148ea565b9060243567ffffffffffffffff811161030d5790610438849236906004016148ea565b939091610443615476565b83905b8282106109085750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610904578060051b830135858112156108fc578301610120813603126108fc57604051946104aa86614613565b6104b3826147a5565b8652602082013567ffffffffffffffff81116109005782019436601f87011215610900578535956104e387614cf1565b966104f1604051988961462f565b80885260208089019160051b830101903682116108fc5760208301905b8282106108c9575050505060208701958652604083013567ffffffffffffffff81116108c557610541903690850161485d565b916040880192835261056b61055936606087016150ee565b9460608a0195865260c03691016150ee565b95608089019687528351511561089d5761058f67ffffffffffffffff8a5116615f45565b156108665767ffffffffffffffff89511682526007602052604082206105b68651826158b8565b6105c48851600283016158b8565b6004855191019080519067ffffffffffffffff8211610839576105e78354614f3c565b601f81116107fe575b50602090601f831160011461075f5761063e9291869183610754575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b88518051821015610678579061067260019261066b8367ffffffffffffffff8f511692614ef9565b51906154c1565b01610643565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074667ffffffffffffffff60019796949851169251935191516107126106dd604051968796875261010060208801526101008701906146cd565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a1019392909193610479565b015190508e8061060c565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e657509084600195949392106107af575b505050811b019055610641565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a2565b9293602060018192878601518155019501930161078c565b6108299084875260208720601f850160051c8101916020861061082f575b601f0160051c019061518a565b8d6105f0565b909150819061081c565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108f8576020916108ed839283369189010161485d565b81520191019061050e565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092a6109258486889a9699979a615073565b614c1e565b169161093583615ba8565b15610a7757828452600760205261095160056040862001615b45565b94845b865181101561098a5760019085875260076020526109836005604089200161097c838b614ef9565b5190615d3e565b5001610954565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c68154614f3c565b80610a36575b5050500180549088815581610a18575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610446565b885260208820908101905b818110156109dc57888155600101610a23565b601f8111600114610a4c5750555b888a806109cc565b81835260208320610a6791601f01861c81019060010161518a565b8082528160208120915555610a44565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b5034610311578060031936011261031157606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346103115760206003193601126103115760043567ffffffffffffffff811161090057610b9e90369060040161491b565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d4e575b610d2257825b818110610bd1578380f35b610bdc818385615083565b67ffffffffffffffff610bee82614c1e565b1690610c07826000526006602052604060002054151590565b15610cf657907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cb6610c90602060019897018b610c4882615093565b15610cbd578790526003602052610c6f60408d20610c6936604088016150ee565b906158b8565b868c526004602052610c8b60408d20610c693660a088016150ee565b615093565b916040519215158352610ca96020840160408301615146565b60a0608084019101615146565ba201610bc6565b60026040828a610c8b94526007602052610cdf828220610c6936858c016150ee565b8a815260076020522001610c693660a088016150ee565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc0565b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115760406003193601126103115760043567ffffffffffffffff811161090057610df390369060040161491b565b60243567ffffffffffffffff811161030d57610e139036906004016148ea565b919092610e1e615476565b845b828110610e8a57505050825b818110610e37578380f35b8067ffffffffffffffff610e516109256001948688615073565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e2c565b610e98610925828585615083565b610ea3828585615083565b90602082019060e0830190610eb782615093565b156111dd5760a0840161271061ffff610ecf836150a0565b1610156111ce5760c085019161271061ffff610eea856150a0565b1610156111965763ffffffff610eff866150af565b16156111615767ffffffffffffffff1694858c52600a60205260408c20610f25866150af565b63ffffffff16908054906040840191610f3d836150af565b60201b67ffffffff0000000016936060860194610f59866150af565b60401b6bffffffff0000000000000000169660800196610f78886150af565b60601b6fffffffff0000000000000000000000001691610f978a6150a0565b60801b71ffff000000000000000000000000000000001693610fb88c6150a0565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16171717815561106b87615093565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110bc906150c0565b63ffffffff1687526110cd906150c0565b63ffffffff1660208701526110e1906150c0565b63ffffffff1660408601526110f5906150c0565b63ffffffff166060850152611109906147e9565b61ffff16608084015261111b906147e9565b61ffff1660a083015261112d906147ba565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e20565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111a5866150a0565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111a56024936150a0565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346103115760806003193601126103115761122c614710565b5061123561478e565b61123d6147d8565b5060643567ffffffffffffffff81116108c5579167ffffffffffffffff60409261126d60e09536906004016147f8565b50508260c0855161127d816145f7565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112b5826145f7565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346103115760406003193601126103115760043567ffffffffffffffff81116109005761137e9036906004016148ea565b9060243573ffffffffffffffffffffffffffffffffffffffff8116908181036108fc576113a9615476565b845b8481106113b6578580f35b80602073ffffffffffffffffffffffffffffffffffffffff6113e36113de6024958a8a615073565b614c33565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114ee5787906114b8575b6001925080611434575b50016113ab565b611462818573ffffffffffffffffffffffffffffffffffffffff61145c6113de878d8d615073565b1661572b565b847f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff6114a96113de878d8d615073565b1693604051908152a33861142d565b509060203d81116114e7575b6114ce818361462f565b6020826000928101031261031157509060019151611423565b503d6114c4565b6040513d89823e3d90fd5b5034610311578060031936011261031157604051906005548083528260208101600584526020842092845b81811061160b5750506115399250038361462f565b815161155d61154782614cf1565b91611555604051938461462f565b808352614cf1565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bc578067ffffffffffffffff6115a960019388614ef9565b51166115b58286614ef9565b520161158a565b50925090604051928392602084019060208552518091526040840192915b8181106115e8575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115da565b8454835260019485019487945060209093019201611524565b50346103115760206003193601126103115761165d611649611644614777565b615051565b6040519182916020835260208301906146cd565b0390f35b5034610311576060600319360112610311576004359067ffffffffffffffff8211610311578160040160a06003198436030112610900576116a06147c7565b9060443567ffffffffffffffff811161030d576116c19036906004016147f8565b9390946116cc614ee0565b5060248101956116db87614c1e565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ed7578492611e9b575b5073ffffffffffffffffffffffffffffffffffffffff821615611e73576117cf907f0000000000000000000000000000000000000000000000000000000000000000976117bf606486013580958b61572b565b6117c7614ee0565b503691614826565b60848301926117dd84614c33565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e295777ffffffffffffffff0000000000000000000000000000000061181e8a614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611d91578691611def575b50611dc75767ffffffffffffffff6118b28a614c1e565b166118ca816000526006602052604060002054151590565b15611d9c57602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015611d91578690611d40575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d145761ffff8716918215611c825761ffff60025460a01c1680611bb7575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a95575b611a8b8a611a276116448e6119ba8e8e615e72565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6119ee84614c1e565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614c1e565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611a6360408261462f565b60405192611a7084614590565b835260208301526040519283926040845260408401906148c0565b9060208301520390f35b833b156108f8578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611ae491615af5565b6064890160a09052610104890190611afb92614c91565b94611b05906147a5565b67ffffffffffffffff166084880152604401611b2090614756565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611b4990614756565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b7e916146cd565b03925af18015611bac57611b97575b80808080806119a5565b611ba282809261462f565b6103115780611b8d565b6040513d84823e3d90fd5b808410611c52575067ffffffffffffffff611bd18b614c1e565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611c248d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611965565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611c948b614c1e565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611ce78d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611967565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611d89575b81611d5a6020938361462f565b81010312611d8557611d8073ffffffffffffffffffffffffffffffffffffffff91614bf0565b61192b565b8580fd5b3d9150611d4d565b6040513d88823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e21575b81611e0a6020938361462f565b81010312611d8557611e1b90614c11565b3861189b565b3d9150611dfd565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a87614c33565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ecf575b81611eb76020938361462f565b8101031261030d57611ec890614bf0565b903861176c565b3d9150611eaa565b6040513d86823e3d90fd5b503461031157611ef13661487b565b611ef9615476565b67ffffffffffffffff831692611f1c846000526006602052604060002054151590565b15611fcc578385526007602052611f4b60056040872001611f3e368587614826565b6020815191012090615d3e565b15611f915750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611f8b604051928392602084526020840191614c91565b0390a280f35b90611fc8906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614cd0565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115767ffffffffffffffff61201b614777565b168152600760205261203260056040832001615b45565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061207761206183614cf1565b9261206f604051948561462f565b808452614cf1565b01835b81811061214e575050825b82518110156120cb578061209b60019285614ef9565b51855260086020526120af60408620614f8f565b6120b98285614ef9565b526120c48184614ef9565b5001612085565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b82821061210357505050500390f35b9193602061213e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288516146cd565b96019201920185949391926120f4565b80606060208093860101520161207a565b50346103115760206003193601126103115767ffffffffffffffff612182614777565b61218a615476565b16808252600b6020526040822090604051916121a583614590565b600181549182855201549060208401918252156122005760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760206003193601126103115760043567ffffffffffffffff8111610900578060040160a060031983360301126108c55761226a614ee0565b5060405160209261227b848361462f565b8482526084810161228b81614c33565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b4757602482019377ffffffffffffffff000000000000000000000000000000006122f186614c1e565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612ab4578891612b12575b50612aea5767ffffffffffffffff61238486614c1e565b1661239c816000526006602052604060002054151590565b15612abf578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612ab4578890612a68575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a3c5786606484013594859367ffffffffffffffff61243589614c1e565b1680845260078a526124836040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a91615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908161292a575b5050505067ffffffffffffffff61251f86614c1e565b168752600b86526040872060405161253681614590565b6001825492838352015491888201928352156128ec577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128e457905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128d9578c916128ac575b506126326116448b614c1e565b8b815191818082019384920101031261283157519081810361287e5750508961265b8680614b9f565b90500361283657604490519601958961267d61267689614c33565b9680614b9f565b90809291810103126128315760409460c4938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977f793ea55b00000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a48401525af19687156128255780976127c4575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611a1f6116449661274f6127496127869a614c1e565b93614c33565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b91604051908282015281815261279d60408261462f565b604051926127aa84614590565b83528183015261165d6040519282849384528301906148c0565b909196506040823d60401161281d575b816127e16040938361462f565b810103126103115750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff612704565b3d91506127d4565b604051903d90823e3d90fd5b600080fd5b611fc88a6128448780614b9f565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614c91565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128d2575b6128c3818361462f565b81010312612831575138612625565b503d6128b9565b6040513d8e823e3d90fd5b50859061258b565b60248967ffffffffffffffff6129018a614c1e565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b1561030d5783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d6129758d80615af5565b6064870160a0905261010487019061298c92614c91565b92612996906147a5565b67ffffffffffffffff1660848601526044016129b190614756565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129db90614756565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a11916146cd565b03925af18015611bac57612a27575b8080612509565b81612a319161462f565b6108f8578638612a20565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612aad575b612a7e818361462f565b81010312612aa957612aa473ffffffffffffffffffffffffffffffffffffffff91614bf0565b6123fc565b8780fd5b503d612a74565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b40575b612b29818361462f565b81010312612aa957612b3a90614c11565b3861236d565b503d612b1f565b8573ffffffffffffffffffffffffffffffffffffffff611e4a602493614c33565b5034610311578060031936011261031157602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346103115760c060031936011261031157612bb6614710565b612bbe61478e565b9060643561ffff8116810361030d5760843567ffffffffffffffff81116108fc57612bed9036906004016147f8565b9160a4359360028510156108f857612c089560443591614d09565b90604051918291602083016020845282518091526020604085019301915b818110612c34575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c26565b5034610311576020600319360112610311576020612c9f67ffffffffffffffff612c8b614777565b166000526006602052604060002054151590565b6040519015158152f35b5034610311578060031936011261031157805473ffffffffffffffffffffffffffffffffffffffff81163303612d48577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346103115780600319360112610311576002546009546040805173ffffffffffffffffffffffffffffffffffffffff808516825260a09490941c61ffff1660208201529290911690820152606090f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461031157612e213661487b565b612e2d93929193615476565b67ffffffffffffffff8216612e4f816000526006602052604060002054151590565b15612e6e5750612e6b9293612e65913691614826565b906154c1565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b503461031157606060031936011261031157612eb3614777565b6024359060443567ffffffffffffffff811161030d57612ed79036906004016147f8565b612edf615476565b67ffffffffffffffff831692612f02846000526006602052604060002054151590565b15612ff9578415612fd157612f21612f1b368486614826565b82614c54565b15611f91575060208103612f945781602091810103126128315760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f6c81614590565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fc86040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c91565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346103115760406003193601126103115761303f614777565b906024359067ffffffffffffffff8211610311576020612c9f84613066366004870161485d565b90614c54565b5034610311576040600319360112610311576004359067ffffffffffffffff821161031157816004016101006003198436030112610900576130ac6147c7565b91806040516130ba816145db565b5260648401359260c485016130ea6130e46130df6130d88488614b9f565b3691614826565b615275565b86615369565b9460848701906130f982614c33565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361380c57602488019577ffffffffffffffff0000000000000000000000000000000061315f88614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114ee5787916137d2575b506137aa5767ffffffffffffffff6131f388614c1e565b1661320b816000526006602052604060002054151590565b1561377f57602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156114ee578791613745575b50156137195761328287614c1e565b9461329860a48b01966130666130d88986614b9f565b156136d25761ffff1690811561361e5767ffffffffffffffff6132ba89614c1e565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061332c60408c2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016948561344f575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6133da6127498f6133d486614c33565b50614c1e565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a280604051613446816145db565b52604051908152f35b853b15612aa95792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526134a18680615af5565b60648b0161010090526101648b01906134b992614c91565b936134c3906147a5565b67ffffffffffffffff1660848a01526134de60448801614756565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c489015261350790614756565b73ffffffffffffffffffffffffffffffffffffffff1660e488015261352c9084615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c888403016101048901526135619291614c91565b9061356c9083615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526135a19291614c91565b9160e4016135ae91615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526135e39291614c91565b908b6024840152604483015203925af18015611bac57613609575b808080808080613393565b61361482809261462f565b61031157806135fe565b67ffffffffffffffff61363089614c1e565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a806136a5600260408d200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2613355565b6136dc8683614b9f565b611fc86040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614c91565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d602011613777575b816137606020938361462f565b810103126108f85761377190614c11565b38613273565b3d9150613753565b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011613804575b816137ed6020938361462f565b810103126108f8576137fe90614c11565b386131dc565b3d91506137e0565b60248573ffffffffffffffffffffffffffffffffffffffff611e4a85614c33565b50346103115760206003193601126103115760043567ffffffffffffffff811161090057806004019161010060031983360301126103115780604051613872816145db565b52606482013590608483019361388785614c33565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361413557602484019177ffffffffffffffff000000000000000000000000000000006138ed84614c1e565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611bac5782916140fb575b506140d35767ffffffffffffffff61398184614c1e565b16613999816000526006602052604060002054151590565b156140a757602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611bac57829161406d575b501561404157613a1083614c1e565b613a2560a48701916130666130d88487614b9f565b156140375784959667ffffffffffffffff613a3f86614c1e565b168084526007602052613a916002604086200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016988991615ffa565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613e71575b50505090613b2860e4870182614b9f565b8192910160408382031261030d57823567ffffffffffffffff81116108fc5781613b5391850161485d565b9260208101359067ffffffffffffffff8211611d8557613b7492910161485d565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613e6657908592918391613e04575b50613c478373ffffffffffffffffffffffffffffffffffffffff613c5997604051988996879586937fa62085060000000000000000000000000000000000000000000000000000000085526040600486015260448501906146cd565b906003198483030160248501526146cd565b0393165af18015613df95783928491613d6a575b5015613d4257613c8360209160c4890190614b9f565b9080929181010312612831573503613d1a575067ffffffffffffffff60209461343685613cdc6044613cd57ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614c1e565b9401614c33565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613d7c818461462f565b820160608382031261030d57825190613d9760208501614c11565b9360408101519067ffffffffffffffff82116108f8570181601f82011215611d8557805191613dc583614670565b90613dd3604051928361462f565b838252602084840101116108f85790602080613df294930191016146aa565b9138613c6d565b6040513d85823e3d90fd5b9193949250506020813d602011613e5e575b81613e236020938361462f565b810103126108fc57918491613c478373ffffffffffffffffffffffffffffffffffffffff613e54613c599897614bf0565b9397505050613beb565b3d9150613e16565b6040513d87823e3d90fd5b813b1561030d579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613ec091615af5565b606488016101009052610164880190613ed892614c91565b93613ee2906147a5565b67ffffffffffffffff166084870152613efd60448601614756565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613f2690614756565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613f4b908c615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610104860152613f809291614c91565b613f8d60c483018c615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c85840301610124860152613fc29291614c91565b9060e401613fd0908b615af5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140059291614c91565b8c602483015282604483015203925af18015611bac57614027575b8080613b17565b816140319161462f565b38614020565b6136dc9083614b9f565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d60201161409f575b816140886020938361462f565b810103126109005761409990614c11565b38613a01565b3d915061407b565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d60201161412d575b816141166020938361462f565b810103126109005761412790614c11565b3861396a565b3d9150614109565b60248273ffffffffffffffffffffffffffffffffffffffff611e4a88614c33565b5034610311576020600319360112610311576040809167ffffffffffffffff61417d614777565b826020855161418b81614590565b8281520152168152600b6020522081516141a481614590565b60206001835493848452015491019081528251918252516020820152f35b50346103115760c0600319360112610311576141dc614710565b506141e561478e565b6141ed614733565b506084359161ffff831683036103115760a4359067ffffffffffffffff82116103115760a063ffffffff8061ffff614234888861422d3660048b016147f8565b5050614a60565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b5034610311578060031936011261031157602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610311576040600319360112610311576142b3614777565b602435918215158303610311576101406143766142d085856149dd565b61432660409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b503461031157602060031936011261031157602090614395614710565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b5034610311578060031936011261031157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103115780600319360112610311575061165d60405161445060408261462f565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d64657600000000000060208201526040519182916020835260208301906146cd565b905034610900576020600319360112610900576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c557602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115614566575b811561453c575b8115614512575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861450b565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150614504565b7f3317103100000000000000000000000000000000000000000000000000000000811491506144fd565b6040810190811067ffffffffffffffff8211176145ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff8211176145ac57604052565b60e0810190811067ffffffffffffffff8211176145ac57604052565b60a0810190811067ffffffffffffffff8211176145ac57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176145ac57604052565b67ffffffffffffffff81116145ac57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381106146bd5750506000910152565b81810151838201526020016146ad565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614709815180928187528780880191016146aa565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b359073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b6004359067ffffffffffffffff8216820361283157565b6024359067ffffffffffffffff8216820361283157565b359067ffffffffffffffff8216820361283157565b3590811515820361283157565b6024359061ffff8216820361283157565b6044359061ffff8216820361283157565b359061ffff8216820361283157565b9181601f840112156128315782359167ffffffffffffffff8311612831576020838186019501011161283157565b92919261483282614670565b91614840604051938461462f565b829481845281830111612831578281602093846000960137010152565b9080601f830112156128315781602061487893359101614826565b90565b9060406003198301126128315760043567ffffffffffffffff8116810361283157916024359067ffffffffffffffff8211612831576148bc916004016147f8565b9091565b6148789160206148d983516040845260408401906146cd565b9201519060208184039101526146cd565b9181601f840112156128315782359167ffffffffffffffff8311612831576020808501948460051b01011161283157565b9181601f840112156128315782359167ffffffffffffffff8311612831576020808501948460081b01011161283157565b6040519061495982614613565b60006080838281528260208201528260408201528260608201520152565b9060405161498481614613565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916149ef61494c565b506149f861494c565b50614a2c57166000526007602052604060002090614878614a206002614a25614a2086614977565b6151f0565b9401614977565b1690816000526003602052614a47614a206040600020614977565b916000526004602052614878614a206040600020614977565b67ffffffffffffffff16600052600a602052604060002060405190614a84826145f7565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c0880152614b865761ffff1680614b1d5750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c1690818110614b5657505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612831570180359067ffffffffffffffff82116128315760200191813603831361283157565b519073ffffffffffffffffffffffffffffffffffffffff8216820361283157565b5190811515820361283157565b3567ffffffffffffffff811681036128315790565b3573ffffffffffffffffffffffffffffffffffffffff811681036128315790565b9067ffffffffffffffff61487892166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61487895931681528160208201520191614c91565b67ffffffffffffffff81116145ac5760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614ebe57614dc29467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614c91565b916002821015614e8f578380600094819460a483015203915afa908115614e8357600091614dee575090565b3d8083833e614dfd818361462f565b8101906020818303126108c55780519067ffffffffffffffff821161030d570181601f820112156108c557805190614e3482614cf1565b93614e42604051958661462f565b82855260208086019360051b8301019384116103115750602001905b828210614e6b5750505090565b60208091614e7884614bf0565b815201910190614e5e565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614ed460208261462f565b60008152600036813790565b60405190614eed82614590565b60606020838281520152565b8051821015614f0d5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015614f85575b6020831014614f5657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614f4b565b9060405191826000825492614fa384614f3c565b80845293600181169081156150115750600114614fca575b50614fc89250038361462f565b565b90506000929192526020600020906000915b818310614ff5575050906020614fc89282010138614fbb565b6020919350806001915483858901015201910190918492614fdc565b60209350614fc89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614fbb565b67ffffffffffffffff1660005260076020526148786004604060002001614f8f565b9190811015614f0d5760051b0190565b9190811015614f0d5760081b0190565b3580151581036128315790565b3561ffff811681036128315790565b3563ffffffff811681036128315790565b359063ffffffff8216820361283157565b35906fffffffffffffffffffffffffffffffff8216820361283157565b9190826060910312612831576040516060810181811067ffffffffffffffff8211176145ac576040526040615141818395615128816147ba565b8552615136602082016150d1565b6020860152016150d1565b910152565b6fffffffffffffffffffffffffffffffff61518460408093615167816147ba565b1515865283615178602083016150d1565b166020870152016150d1565b16910152565b818110615195575050565b6000815560010161518a565b818102929181159184041417156151b457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116151b457565b6151f861494c565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691615255602085019361524f61524263ffffffff875116426151e3565b85608089015116906151a1565b90615ae8565b8082101561526e57505b16825263ffffffff4216905290565b905061525f565b805180156152e5576020036152a757805160208281019183018390031261283157519060ff82116152a7575060ff1690565b611fc8906040519182917f953576f70000000000000000000000000000000000000000000000000000000083526020600484015260248301906146cd565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff82116151b457565b60ff16604d81116151b457600a0a90565b811561533a570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff81169282841461546f5782841161544557906153ae9161530b565b91604d60ff841611801561540c575b6153d6575050906153d06148789261531f565b906151a1565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506154168361531f565b801561533a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484116153bd565b61544e9161530b565b91604d60ff8416116153d6575050906154696148789261531f565b90615330565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff60015416330361549757565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b908051156157015767ffffffffffffffff815160208301209216918260005260076020526154f6816005604060002001615fa5565b156156bd5760005260086020526040600020815167ffffffffffffffff81116145ac576155238254614f3c565b601f811161568b575b506020601f82116001146155c5579161559f827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea95936155b5956000916155ba575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90556040519182916020835260208301906146cd565b0390a2565b90508401513861556e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b8181106156735750926155b59492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea98961061563c575b5050811b019055611649565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690553880615630565b9192602060018192868a0151815501940192016155f5565b6156b790836000526020600020601f840160051c8101916020851061082f57601f0160051c019061518a565b3861552c565b5090611fc86040519283927f393b8ad200000000000000000000000000000000000000000000000000000000845260048401526040602484015260448301906146cd565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815261580192909161579060648461462f565b166000806040958651946157a4888761462f565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d156158b0573d916157e583614670565b926157f28751948561462f565b83523d6000602085013e6162b6565b80518061580d57505050565b81602091810103126128315760206158259101614c11565b1561582d5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6060916162b6565b815191929115615a3a576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff602085015116106159d757614fc891925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615a38604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615ac9575b615a6857614fc891926158fb565b606483615a38604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615a5a565b919082018092116151b457565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561283157016020813591019167ffffffffffffffff821161283157813603831361283157565b906040519182815491828252602082019060005260206000209260005b818110615b77575050614fc89250038361462f565b8454835260019485019487945060209093019201615b62565b8054821015614f0d5760005260206000200190600090565b6000818152600660205260409020548015615d37577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151b457600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151b457818103615cc8575b5050506005548015615c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615c56816005615b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615d1f615cd9615cea936005615b90565b90549060031b1c9283926005615b90565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615c1d565b5050600090565b9060018201918160005282602052604060002054801515600014615e69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116151b4578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116151b457818103615e32575b50505080548015615c99577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615df38282615b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615e52615e42615cea9386615b90565b90549060031b1c92839286615b90565b905560005283602052604060002055388080615dbb565b50505050600090565b9061ffff9067ffffffffffffffff615e8c60208501614c1e565b16600052600a60205260406000208260405191615ea8836145f7565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c161515910152161515600014615f3e57505b168015615f3657612710615f2f606061487894013592836151a1565b04906151e3565b506060013590565b9050615f13565b80600052600660205260406000205415600014615f9f57600554680100000000000000008110156145ac57615f86615cea8260018594016005556005615b90565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615d3757805490680100000000000000008210156145ac5782615fe3615cea846001809601855584615b90565b905580549260005201602052604060002055600190565b9182549060ff8260a01c161580156162ae575b6162a8576fffffffffffffffffffffffffffffffff8216916001850190815461605263ffffffff6fffffffffffffffffffffffffffffffff83169360801c16426151e3565b908161620a575b50508481106161be57508383106160b35750506160886fffffffffffffffffffffffffffffffff9283926151e3565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c92831561615257816160cb916151e3565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908082116151b45761611961611e9273ffffffffffffffffffffffffffffffffffffffff96615ae8565b615330565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b82869293961161627e576162259261524f9160801c906151a1565b808410156162795750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880616059565b616230565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b50821561600d565b9192901561633157508151156162ca575090565b3b156162d35790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156163445750805190602001fd5b611fc8906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906146cd56fea164736f6c634300081a000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinBlockConfirmation\",\"inputs\":[],\"outputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBlockConfirmation\",\"inputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinBlockConfirmationSet\",\"inputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", + Bin: "0x610160806040523461031b5761010081616906803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a461644490816104c282396080518181816117920152818161229b01528181612453015281816131980152818161338b01528181613467015281816137040152818161393101528181613afb01528181614441015261449b015260a051818181611a32015281816143070152818161539e0152615421015260c051818181610da30152818161186e015281816123350152818161323301526139cc015260e051818181611981015281816124da015281816133f301528181613b820152614ddb015261010051818181610b0f0152818161259a01528181612dd60152613c49015261012051818181610ad6015261173f015261014051818181610b4b01526125460152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461452057508063181f5a77146144bf57806321df0da71461446e578063240028e81461440a5780632422ac451461432b57806324f65ee7146142ed5780632c0634041461425457806338ff8c38146141e857806339077537146138bf578063489a68f2146130f35780634c5ef0ed146130ac5780634e921c301461300d5780635fa1356514612e8157806362ddd3c414612dfa578063708e1f7914612da95780637437ff9f14612d6857806379ba509714612ca15780638926f54f14612c5b57806389720a6214612b945780638da5cb5b14612b605780639a4575b9146122245780639c893fe914612157578063a42a7b8b14611ff0578063acfecf9114611eda578063b1c71c6514611664578063b794658014611627578063c4bffe2b146114fc578063c7230a6014611352578063d8aa3f4014611218578063dc04fa1f14610dc7578063dc0bd97114610d76578063dcbd41bc14610b72578063dd65bdb114610aa9578063e8a1da17146103e5578063f2fde38b14610316578063fa41d79c146102f15763ff8e03f3146101b857600080fd5b346102ee5760406003193601126102ee576101d16147a2565b906101da6147e8565b6101e261552b565b73ffffffffffffffffffffffffffffffffffffffff83169283156102c6577f22a0dbb8195755fbfc99667a86ae684c568e9dfbb1eccf7f90084e616644797092937fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025573ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556102c06040519283928390929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b0390a180f35b6004837f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346102ee57806003193601126102ee57602061ffff60025460a01c16604051908152f35b50346102ee5760206003193601126102ee5773ffffffffffffffffffffffffffffffffffffffff6103456147a2565b61034d61552b565b163381146103bd57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346102ee5760406003193601126102ee5760043567ffffffffffffffff81116109025761041790369060040161499f565b9060243567ffffffffffffffff8111610aa5579061043a8492369060040161499f565b93909161044561552b565b83905b82821061090a5750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610906578060051b830135858112156108fe578301610120813603126108fe57604051946104ac866146a5565b6104b58261485a565b8652602082013567ffffffffffffffff81116109025782019436601f87011215610902578535956104e587614da6565b966104f360405198896146c1565b80885260208089019160051b830101903682116108fe5760208301905b8282106108cb575050505060208701958652604083013567ffffffffffffffff81116108c7576105439036908501614912565b916040880192835261056d61055b36606087016151a3565b9460608a0195865260c03691016151a3565b95608089019687528351511561089f5761059167ffffffffffffffff8a5116615ffa565b156108685767ffffffffffffffff89511682526007602052604082206105b886518261596d565b6105c688516002830161596d565b6004855191019080519067ffffffffffffffff821161083b576105e98354614ff1565b601f8111610800575b50602090601f8311600114610761576106409291869183610756575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b8851805182101561067a579061067460019261066d8367ffffffffffffffff8f511692614fae565b5190615576565b01610645565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074867ffffffffffffffff60019796949851169251935191516107146106df6040519687968752610100602088015261010087019061475f565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a101939290919361047b565b015190508e8061060e565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e857509084600195949392106107b1575b505050811b019055610643565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a4565b9293602060018192878601518155019501930161078e565b61082b9084875260208720601f850160051c81019160208610610831575b601f0160051c019061523f565b8d6105f2565b909150819061081e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108fa576020916108ef8392833691890101614912565b815201910190610510565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092c6109278486889a9699979a615128565b614cd3565b169161093783615c5d565b15610a7957828452600760205261095360056040862001615bfa565b94845b865181101561098c5760019085875260076020526109856005604089200161097e838b614fae565b5190615df3565b5001610956565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c88154614ff1565b80610a38575b5050500180549088815581610a1a575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610448565b885260208820908101905b818110156109de57888155600101610a25565b601f8111600114610a4e5750555b888a806109ce565b81835260208320610a6991601f01861c81019060010161523f565b8082528160208120915555610a46565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b8380fd5b50346102ee57806003193601126102ee57606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346102ee5760206003193601126102ee5760043567ffffffffffffffff811161090257610ba49036906004016149d0565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d54575b610d2857825b818110610bd7578380f35b610be2818385615138565b67ffffffffffffffff610bf482614cd3565b1690610c0d826000526006602052604060002054151590565b15610cfc57907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cbc610c96602060019897018b610c4e82615148565b15610cc3578790526003602052610c7560408d20610c6f36604088016151a3565b9061596d565b868c526004602052610c9160408d20610c6f3660a088016151a3565b615148565b916040519215158352610caf60208401604083016151fb565b60a06080840191016151fb565ba201610bcc565b60026040828a610c9194526007602052610ce5828220610c6f36858c016151a3565b8a815260076020522001610c6f3660a088016151a3565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc6565b50346102ee57806003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee5760406003193601126102ee5760043567ffffffffffffffff811161090257610df99036906004016149d0565b60243567ffffffffffffffff8111610aa557610e1990369060040161499f565b919092610e2461552b565b845b828110610e9057505050825b818110610e3d578380f35b8067ffffffffffffffff610e576109276001948688615128565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e32565b610e9e610927828585615138565b610ea9828585615138565b90602082019060e0830190610ebd82615148565b156111e35760a0840161271061ffff610ed583615155565b1610156111d45760c085019161271061ffff610ef085615155565b16101561119c5763ffffffff610f0586615164565b16156111675767ffffffffffffffff1694858c52600a60205260408c20610f2b86615164565b63ffffffff16908054906040840191610f4383615164565b60201b67ffffffff0000000016936060860194610f5f86615164565b60401b6bffffffff0000000000000000169660800196610f7e88615164565b60601b6fffffffff0000000000000000000000001691610f9d8a615155565b60801b71ffff000000000000000000000000000000001693610fbe8c615155565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16171717815561107187615148565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110c290615175565b63ffffffff1687526110d390615175565b63ffffffff1660208701526110e790615175565b63ffffffff1660408601526110fb90615175565b63ffffffff16606085015261110f9061489e565b61ffff1660808401526111219061489e565b61ffff1660a08301526111339061486f565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e26565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111ab86615155565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111ab602493615155565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346102ee5760806003193601126102ee576112326147a2565b5061123b614843565b61124361488d565b5060643567ffffffffffffffff81116108c7579167ffffffffffffffff60409261127360e09536906004016148ad565b50508260c0855161128381614689565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112bb82614689565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346102ee5760406003193601126102ee5760043567ffffffffffffffff81116109025761138490369060040161499f565b9061138d6147e8565b61139561552b565b835b8381106113a2578480f35b80602073ffffffffffffffffffffffffffffffffffffffff6113cf6113ca6024958989615128565b614ce8565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114f15786906114bb575b6001925080611420575b5001611397565b61144e818573ffffffffffffffffffffffffffffffffffffffff6114486113ca878c8c615128565b166157e0565b73ffffffffffffffffffffffffffffffffffffffff6114716113ca848989615128565b60405192835216907f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff871692a338611419565b509060203d81116114ea575b6114d181836146c1565b602082600092810103126102ee5750906001915161140f565b503d6114c7565b6040513d88823e3d90fd5b50346102ee57806003193601126102ee57604051906005548083528260208101600584526020842092845b81811061160e57505061153c925003836146c1565b815161156061154a82614da6565b9161155860405193846146c1565b808352614da6565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bf578067ffffffffffffffff6115ac60019388614fae565b51166115b88286614fae565b520161158d565b50925090604051928392602084019060208552518091526040840192915b8181106115eb575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115dd565b8454835260019485019487945060209093019201611527565b50346102ee5760206003193601126102ee5761166061164c61164761482c565b615106565b60405191829160208352602083019061475f565b0390f35b50346102ee5760606003193601126102ee576004359067ffffffffffffffff82116102ee578160040160a06003198436030112610902576116a361487c565b9060443567ffffffffffffffff8111610aa5576116c49036906004016148ad565b9390946116cf614f95565b5060248101956116de87614cd3565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ecf578492611e93575b5073ffffffffffffffffffffffffffffffffffffffff821615611e6b576117d2907f0000000000000000000000000000000000000000000000000000000000000000976117c2606486013580958b6157e0565b6117ca614f95565b5036916148db565b60848301926117e084614ce8565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e215777ffffffffffffffff000000000000000000000000000000006118218a614cd3565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114f1578691611de7575b50611dbf5767ffffffffffffffff6118b58a614cd3565b166118cd816000526006602052604060002054151590565b15611d9457602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa80156114f1578690611d43575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d175761ffff8716918215611c855761ffff60025460a01c1680611bba575b505b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a98575b611a8e8a611a2a6116478e6119bd8e8e615f27565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6119f184614cd3565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614cd3565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611a666040826146c1565b60405192611a7384614622565b83526020830152604051928392604084526040840190614975565b9060208301520390f35b833b156108fa578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611ae791615baa565b6064890160a09052610104890190611afe92614d46565b94611b089061485a565b67ffffffffffffffff166084880152604401611b239061480b565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611b4c9061480b565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b819161475f565b03925af18015611baf57611b9a575b80808080806119a8565b611ba58280926146c1565b6102ee5780611b90565b6040513d84823e3d90fd5b808410611c55575067ffffffffffffffff611bd48b614cd3565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac209793288580611c278d73ffffffffffffffffffffffffffffffffffffffff60408d2091169283916160af565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a238611968565b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b67ffffffffffffffff611c978b614cd3565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611cea8d73ffffffffffffffffffffffffffffffffffffffff60408d2091169283916160af565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a261196a565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611d8c575b81611d5d602093836146c1565b81010312611d8857611d8373ffffffffffffffffffffffffffffffffffffffff91614ca5565b61192e565b8580fd5b3d9150611d50565b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e19575b81611e02602093836146c1565b81010312611d8857611e1390614cc6565b3861189e565b3d9150611df5565b60248573ffffffffffffffffffffffffffffffffffffffff611e4287614ce8565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ec7575b81611eaf602093836146c1565b81010312610aa557611ec090614ca5565b903861176f565b3d9150611ea2565b6040513d86823e3d90fd5b50346102ee57611ee936614930565b611ef161552b565b67ffffffffffffffff831692611f14846000526006602052604060002054151590565b15611fc4578385526007602052611f4360056040872001611f363685876148db565b6020815191012090615df3565b15611f895750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611f83604051928392602084526020840191614d46565b0390a280f35b90611fc0906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614d85565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346102ee5760206003193601126102ee5767ffffffffffffffff61201361482c565b168152600760205261202a60056040832001615bfa565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061206f61205983614da6565b9261206760405194856146c1565b808452614da6565b01835b818110612146575050825b82518110156120c3578061209360019285614fae565b51855260086020526120a760408620615044565b6120b18285614fae565b526120bc8184614fae565b500161207d565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b8282106120fb57505050500390f35b91936020612136827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885161475f565b96019201920185949391926120ec565b806060602080938601015201612072565b50346102ee5760206003193601126102ee5767ffffffffffffffff61217a61482c565b61218261552b565b16808252600b60205260408220906040519161219d83614622565b600181549182855201549060208401918252156121f85760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346102ee5760206003193601126102ee5760043567ffffffffffffffff8111610902578060040160a060031983360301126108c757612262614f95565b5060405160209261227384836146c1565b8482526084810161228381614ce8565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b3f57602482019377ffffffffffffffff000000000000000000000000000000006122e986614cd3565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612aac578891612b0a575b50612ae25767ffffffffffffffff61237c86614cd3565b16612394816000526006602052604060002054151590565b15612ab7578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612aac578890612a60575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a345786606484013594859367ffffffffffffffff61242d89614cd3565b1680845260078a5261247b6040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a916160af565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081612922575b5050505067ffffffffffffffff61251786614cd3565b168752600b86526040872060405161252e81614622565b6001825492838352015491888201928352156128e4577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128dc57905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128d1578c916128a4575b5061262a6116478b614cd3565b8b8151918180820193849201010312612829575190818103612876575050896126538680614c54565b90500361282e57604490519601958961267561266e89614ce8565b9680614c54565b90809291810103126128295760409460c4938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977f793ea55b00000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a48401525af196871561281d5780976127bc575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611a226116479661274761274161277e9a614cd3565b93614ce8565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b9160405190828201528181526127956040826146c1565b604051926127a284614622565b835281830152611660604051928284938452830190614975565b909196506040823d604011612815575b816127d9604093836146c1565b810103126102ee5750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff6126fc565b3d91506127cc565b604051903d90823e3d90fd5b600080fd5b611fc08a61283c8780614c54565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614d46565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128ca575b6128bb81836146c1565b8101031261282957513861261d565b503d6128b1565b6040513d8e823e3d90fd5b508590612583565b60248967ffffffffffffffff6128f98a614cd3565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b15610aa55783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d61296d8d80615baa565b6064870160a0905261010487019061298492614d46565b9261298e9061485a565b67ffffffffffffffff1660848601526044016129a99061480b565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129d39061480b565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a099161475f565b03925af18015611baf57612a1f575b8080612501565b81612a29916146c1565b6108fa578638612a18565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612aa5575b612a7681836146c1565b81010312612aa157612a9c73ffffffffffffffffffffffffffffffffffffffff91614ca5565b6123f4565b8780fd5b503d612a6c565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b38575b612b2181836146c1565b81010312612aa157612b3290614cc6565b38612365565b503d612b17565b8573ffffffffffffffffffffffffffffffffffffffff611e42602493614ce8565b50346102ee57806003193601126102ee57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346102ee5760c06003193601126102ee57612bae6147a2565b612bb6614843565b9060643561ffff81168103610aa55760843567ffffffffffffffff81116108fe57612be59036906004016148ad565b9160a4359360028510156108fa57612c009560443591614dbe565b90604051918291602083016020845282518091526020604085019301915b818110612c2c575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c1e565b50346102ee5760206003193601126102ee576020612c9767ffffffffffffffff612c8361482c565b166000526006602052604060002054151590565b6040519015158152f35b50346102ee57806003193601126102ee57805473ffffffffffffffffffffffffffffffffffffffff81163303612d40577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346102ee57806003193601126102ee576002546009546040805173ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015290f35b50346102ee57806003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee57612e0936614930565b612e159392919361552b565b67ffffffffffffffff8216612e37816000526006602052604060002054151590565b15612e565750612e539293612e4d9136916148db565b90615576565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b50346102ee5760606003193601126102ee57612e9b61482c565b6024359060443567ffffffffffffffff8111610aa557612ebf9036906004016148ad565b612ec761552b565b67ffffffffffffffff831692612eea846000526006602052604060002054151590565b15612fe1578415612fb957612f09612f033684866148db565b82614d09565b15611f89575060208103612f7c5781602091810103126128295760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f5481614622565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fc06040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614d46565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346102ee5760206003193601126102ee5760043561ffff8116908181036108c7577fa7f8dbba8cdb126ce4a0e7939ec58e0161b70d808b585dd651d68e59d27e11fb9160209161305c61552b565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000006002549260a01b16911617600255604051908152a180f35b50346102ee5760406003193601126102ee576130c661482c565b906024359067ffffffffffffffff82116102ee576020612c97846130ed3660048701614912565b90614d09565b50346102ee5760406003193601126102ee576004359067ffffffffffffffff82116102ee578160040161010060031984360301126109025761313361487c565b91806040516131418161466d565b5260648401359260c4850161317161316b61316661315f8488614c54565b36916148db565b61532a565b8661541e565b94608487019061318082614ce8565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691160361389e57602488019577ffffffffffffffff000000000000000000000000000000006131e688614cd3565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613806578791613864575b5061383c5767ffffffffffffffff61327a88614cd3565b16613292816000526006602052604060002054151590565b1561381157602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156138065787916137cc575b50156137a05761330987614cd3565b9461331f60a48b01966130ed61315f8986614c54565b156137595761ffff169081156136a55767ffffffffffffffff61334189614cd3565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a806133b360408c2073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283916160af565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001694856134d6575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6134616127418f61345b86614ce8565b50614cd3565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a2806040516134cd8161466d565b52604051908152f35b853b15612aa15792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526135288680615baa565b60648b0161010090526101648b019061354092614d46565b9361354a9061485a565b67ffffffffffffffff1660848a01526135656044880161480b565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c489015261358e9061480b565b73ffffffffffffffffffffffffffffffffffffffff1660e48801526135b39084615baa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c888403016101048901526135e89291614d46565b906135f39083615baa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526136289291614d46565b9160e40161363591615baa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8584030161014486015261366a9291614d46565b908b6024840152604483015203925af18015611baf57613690575b80808080808061341a565b61369b8280926146c1565b6102ee5780613685565b67ffffffffffffffff6136b789614cd3565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a8061372c600260408d200173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283916160af565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a26133dc565b6137638683614c54565b611fc06040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614d46565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d6020116137fe575b816137e7602093836146c1565b810103126108fa576137f890614cc6565b386132fa565b3d91506137da565b6040513d89823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011613896575b8161387f602093836146c1565b810103126108fa5761389090614cc6565b38613263565b3d9150613872565b60248573ffffffffffffffffffffffffffffffffffffffff611e4285614ce8565b50346102ee5760206003193601126102ee5760043567ffffffffffffffff811161090257806004019161010060031983360301126102ee57806040516139048161466d565b52606482013590608483019361391985614ce8565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116036141c757602484019177ffffffffffffffff0000000000000000000000000000000061397f84614cd3565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611baf57829161418d575b506141655767ffffffffffffffff613a1384614cd3565b16613a2b816000526006602052604060002054151590565b1561413957602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611baf5782916140ff575b50156140d357613aa283614cd3565b613ab760a48701916130ed61315f8487614c54565b156140c95784959667ffffffffffffffff613ad186614cd3565b168084526007602052613b236002604086200173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169889916160af565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613f03575b50505090613bba60e4870182614c54565b81929101604083820312610aa557823567ffffffffffffffff81116108fe5781613be5918501614912565b9260208101359067ffffffffffffffff8211611d8857613c06929101614912565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613ef857908592918391613e96575b50613cd98373ffffffffffffffffffffffffffffffffffffffff613ceb97604051988996879586937fa620850600000000000000000000000000000000000000000000000000000000855260406004860152604485019061475f565b9060031984830301602485015261475f565b0393165af18015613e8b5783928491613dfc575b5015613dd457613d1560209160c4890190614c54565b9080929181010312612829573503613dac575067ffffffffffffffff6020946134bd85613d6e6044613d677ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614cd3565b9401614ce8565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613e0e81846146c1565b8201606083820312610aa557825190613e2960208501614cc6565b9360408101519067ffffffffffffffff82116108fa570181601f82011215611d8857805191613e5783614702565b90613e6560405192836146c1565b838252602084840101116108fa5790602080613e84949301910161473c565b9138613cff565b6040513d85823e3d90fd5b9193949250506020813d602011613ef0575b81613eb5602093836146c1565b810103126108fe57918491613cd98373ffffffffffffffffffffffffffffffffffffffff613ee6613ceb9897614ca5565b9397505050613c7d565b3d9150613ea8565b6040513d87823e3d90fd5b813b15610aa5579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613f5291615baa565b606488016101009052610164880190613f6a92614d46565b93613f749061485a565b67ffffffffffffffff166084870152613f8f6044860161480b565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613fb89061480b565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613fdd908c615baa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101048601526140129291614d46565b61401f60c483018c615baa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101248601526140549291614d46565b9060e401614062908b615baa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140979291614d46565b8c602483015282604483015203925af18015611baf576140b9575b8080613ba9565b816140c3916146c1565b386140b2565b6137639083614c54565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d602011614131575b8161411a602093836146c1565b810103126109025761412b90614cc6565b38613a93565b3d915061410d565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d6020116141bf575b816141a8602093836146c1565b81010312610902576141b990614cc6565b386139fc565b3d915061419b565b60248273ffffffffffffffffffffffffffffffffffffffff611e4288614ce8565b50346102ee5760206003193601126102ee576040809167ffffffffffffffff61420f61482c565b826020855161421d81614622565b8281520152168152600b60205220815161423681614622565b60206001835493848452015491019081528251918252516020820152f35b50346102ee5760c06003193601126102ee5761426e6147a2565b50614277614843565b61427f6147c5565b506084359161ffff831683036102ee5760a4359067ffffffffffffffff82116102ee5760a063ffffffff8061ffff6142c688886142bf3660048b016148ad565b5050614b15565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b50346102ee57806003193601126102ee57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee5760406003193601126102ee5761434561482c565b6024359182151583036102ee576101406144086143628585614a92565b6143b860409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b50346102ee5760206003193601126102ee576020906144276147a2565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b50346102ee57806003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee57806003193601126102ee57506116606040516144e26040826146c1565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d646576000000000000602082015260405191829160208352602083019061475f565b905034610902576020600319360112610902576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c757602092507faff2afbf0000000000000000000000000000000000000000000000000000000081149081156145f8575b81156145ce575b81156145a4575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861459d565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150614596565b7f33171031000000000000000000000000000000000000000000000000000000008114915061458f565b6040810190811067ffffffffffffffff82111761463e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761463e57604052565b60e0810190811067ffffffffffffffff82111761463e57604052565b60a0810190811067ffffffffffffffff82111761463e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761463e57604052565b67ffffffffffffffff811161463e57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811061474f5750506000910152565b818101518382015260200161473f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361479b8151809281875287808801910161473c565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361282957565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361282957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361282957565b359073ffffffffffffffffffffffffffffffffffffffff8216820361282957565b6004359067ffffffffffffffff8216820361282957565b6024359067ffffffffffffffff8216820361282957565b359067ffffffffffffffff8216820361282957565b3590811515820361282957565b6024359061ffff8216820361282957565b6044359061ffff8216820361282957565b359061ffff8216820361282957565b9181601f840112156128295782359167ffffffffffffffff8311612829576020838186019501011161282957565b9291926148e782614702565b916148f560405193846146c1565b829481845281830111612829578281602093846000960137010152565b9080601f830112156128295781602061492d933591016148db565b90565b9060406003198301126128295760043567ffffffffffffffff8116810361282957916024359067ffffffffffffffff821161282957614971916004016148ad565b9091565b61492d91602061498e835160408452604084019061475f565b92015190602081840391015261475f565b9181601f840112156128295782359167ffffffffffffffff8311612829576020808501948460051b01011161282957565b9181601f840112156128295782359167ffffffffffffffff8311612829576020808501948460081b01011161282957565b60405190614a0e826146a5565b60006080838281528260208201528260408201528260608201520152565b90604051614a39816146a5565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff91614aa4614a01565b50614aad614a01565b50614ae15716600052600760205260406000209061492d614ad56002614ada614ad586614a2c565b6152a5565b9401614a2c565b1690816000526003602052614afc614ad56040600020614a2c565b91600052600460205261492d614ad56040600020614a2c565b67ffffffffffffffff16600052600a602052604060002060405190614b3982614689565b549263ffffffff84168252602082019363ffffffff8160201c168552604083019063ffffffff8160401c1682526060840163ffffffff8260601c168152608085019561ffff8360801c16875260ff60a087019361ffff8160901c16855260a01c1615801560c0880152614c3b5761ffff1680614bd25750505063ffffffff808061ffff9351169451169551169351169193929190600190565b919550915061ffff60025460a01c1690818110614c0b57505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050505092505050600090600090600090600090600090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612829570180359067ffffffffffffffff82116128295760200191813603831361282957565b519073ffffffffffffffffffffffffffffffffffffffff8216820361282957565b5190811515820361282957565b3567ffffffffffffffff811681036128295790565b3573ffffffffffffffffffffffffffffffffffffffff811681036128295790565b9067ffffffffffffffff61492d92166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61492d95931681528160208201520191614d46565b67ffffffffffffffff811161463e5760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614f7357614e779467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614d46565b916002821015614f44578380600094819460a483015203915afa908115614f3857600091614ea3575090565b3d8083833e614eb281836146c1565b8101906020818303126108c75780519067ffffffffffffffff8211610aa5570181601f820112156108c757805190614ee982614da6565b93614ef760405195866146c1565b82855260208086019360051b8301019384116102ee5750602001905b828210614f205750505090565b60208091614f2d84614ca5565b815201910190614f13565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614f896020826146c1565b60008152600036813790565b60405190614fa282614622565b60606020838281520152565b8051821015614fc25760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c9216801561503a575b602083101461500b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691615000565b906040519182600082549261505884614ff1565b80845293600181169081156150c6575060011461507f575b5061507d925003836146c1565b565b90506000929192526020600020906000915b8183106150aa57505090602061507d9282010138615070565b6020919350806001915483858901015201910190918492615091565b6020935061507d9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138615070565b67ffffffffffffffff16600052600760205261492d6004604060002001615044565b9190811015614fc25760051b0190565b9190811015614fc25760081b0190565b3580151581036128295790565b3561ffff811681036128295790565b3563ffffffff811681036128295790565b359063ffffffff8216820361282957565b35906fffffffffffffffffffffffffffffffff8216820361282957565b9190826060910312612829576040516060810181811067ffffffffffffffff82111761463e5760405260406151f68183956151dd8161486f565b85526151eb60208201615186565b602086015201615186565b910152565b6fffffffffffffffffffffffffffffffff6152396040809361521c8161486f565b151586528361522d60208301615186565b16602087015201615186565b16910152565b81811061524a575050565b6000815560010161523f565b8181029291811591840414171561526957565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161526957565b6152ad614a01565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff808351169161530a60208501936153046152f763ffffffff87511642615298565b8560808901511690615256565b90615b9d565b8082101561532357505b16825263ffffffff4216905290565b9050615314565b8051801561539a5760200361535c57805160208281019183018390031261282957519060ff821161535c575060ff1690565b611fc0906040519182917f953576f700000000000000000000000000000000000000000000000000000000835260206004840152602483019061475f565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff821161526957565b60ff16604d811161526957600a0a90565b81156153ef570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff811692828414615524578284116154fa5790615463916153c0565b91604d60ff84161180156154c1575b61548b5750509061548561492d926153d4565b90615256565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506154cb836153d4565b80156153ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048411615472565b615503916153c0565b91604d60ff84161161548b5750509061551e61492d926153d4565b906153e5565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff60015416330361554c57565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b908051156157b65767ffffffffffffffff815160208301209216918260005260076020526155ab81600560406000200161605a565b156157725760005260086020526040600020815167ffffffffffffffff811161463e576155d88254614ff1565b601f8111615740575b506020601f821160011461567a5791615654827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea959361566a9560009161566f575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b905560405191829160208352602083019061475f565b0390a2565b905084015138615623565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b81811061572857509261566a9492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea9896106156f1575b5050811b01905561164c565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905538806156e5565b9192602060018192868a0151815501940192016156aa565b61576c90836000526020600020601f840160051c8101916020851061083157601f0160051c019061523f565b386155e1565b5090611fc06040519283927f393b8ad2000000000000000000000000000000000000000000000000000000008452600484015260406024840152604483019061475f565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff93841660248301526044808301959095529381526158b69290916158456064846146c1565b1660008060409586519461585988876146c1565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d15615965573d9161589a83614702565b926158a7875194856146c1565b83523d6000602085013e61636b565b8051806158c257505050565b81602091810103126128295760206158da9101614cc6565b156158e25750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b60609161636b565b815191929115615aef576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff60208501511610615a8c5761507d91925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615aed604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615b7e575b615b1d5761507d91926159b0565b606483615aed604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615b0f565b9190820180921161526957565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561282957016020813591019167ffffffffffffffff821161282957813603831361282957565b906040519182815491828252602082019060005260206000209260005b818110615c2c57505061507d925003836146c1565b8454835260019485019487945060209093019201615c17565b8054821015614fc25760005260206000200190600090565b6000818152600660205260409020548015615dec577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811161526957600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161526957818103615d7d575b5050506005548015615d4e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615d0b816005615c45565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615dd4615d8e615d9f936005615c45565b90549060031b1c9283926005615c45565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615cd2565b5050600090565b9060018201918160005282602052604060002054801515600014615f1e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111615269578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161526957818103615ee7575b50505080548015615d4e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615ea88282615c45565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615f07615ef7615d9f9386615c45565b90549060031b1c92839286615c45565b905560005283602052604060002055388080615e70565b50505050600090565b9061ffff9067ffffffffffffffff615f4160208501614cd3565b16600052600a60205260406000208260405191615f5d83614689565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c161515910152161515600014615ff357505b168015615feb57612710615fe4606061492d9401359283615256565b0490615298565b506060013590565b9050615fc8565b80600052600660205260406000205415600014616054576005546801000000000000000081101561463e5761603b615d9f8260018594016005556005615c45565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615dec578054906801000000000000000082101561463e5782616098615d9f846001809601855584615c45565b905580549260005201602052604060002055600190565b9182549060ff8260a01c16158015616363575b61635d576fffffffffffffffffffffffffffffffff8216916001850190815461610763ffffffff6fffffffffffffffffffffffffffffffff83169360801c1642615298565b90816162bf575b5050848110616273575083831061616857505061613d6fffffffffffffffffffffffffffffffff928392615298565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c928315616207578161618091615298565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190808211615269576161ce6161d39273ffffffffffffffffffffffffffffffffffffffff96615b9d565b6153e5565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b828692939611616333576162da926153049160801c90615256565b8084101561632e5750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff000000000000000000000000000000001617865592388061610e565b6162e5565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b5082156160c2565b919290156163e6575081511561637f575090565b3b156163885790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156163f95750805190602001fd5b611fc0906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061475f56fea164736f6c634300081a000a", } var LombardTokenPoolABI = LombardTokenPoolMetaData.ABI @@ -370,6 +370,28 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) GetLombardConfig() (GetL return _LombardTokenPool.Contract.GetLombardConfig(&_LombardTokenPool.CallOpts) } +func (_LombardTokenPool *LombardTokenPoolCaller) GetMinBlockConfirmation(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _LombardTokenPool.contract.Call(opts, &out, "getMinBlockConfirmation") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +func (_LombardTokenPool *LombardTokenPoolSession) GetMinBlockConfirmation() (uint16, error) { + return _LombardTokenPool.Contract.GetMinBlockConfirmation(&_LombardTokenPool.CallOpts) +} + +func (_LombardTokenPool *LombardTokenPoolCallerSession) GetMinBlockConfirmation() (uint16, error) { + return _LombardTokenPool.Contract.GetMinBlockConfirmation(&_LombardTokenPool.CallOpts) +} + func (_LombardTokenPool *LombardTokenPoolCaller) GetPath(opts *bind.CallOpts, remoteChainSelector uint64) (LombardTokenPoolPath, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "getPath", remoteChainSelector) @@ -3758,6 +3780,8 @@ type LombardTokenPoolInterface interface { error) + GetMinBlockConfirmation(opts *bind.CallOpts) (uint16, error) + GetPath(opts *bind.CallOpts, remoteChainSelector uint64) (LombardTokenPoolPath, error) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index c2cd9d4740..426f657de8 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -261,20 +261,20 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMint() (gas: 233574) LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21887) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97332) -LombardTokenPool_constructor:test_constructor() (gas: 4531545) -LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 368356) -LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95305) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98499) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97430) +LombardTokenPool_constructor:test_constructor() (gas: 4551426) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 368383) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95332) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98526) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) -LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 248868) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 317505) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5202086) -LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 249096) +LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 248886) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 317549) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5222005) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 249113) LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 492653) -LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54568) -LombardTokenPool_setPath:test_setPath() (gas: 69366) +LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54603) +LombardTokenPool_setPath:test_setPath() (gas: 69388) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_MaxLengthFields() (gas: 436236) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithData() (gas: 57857) diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index fc04654af1..d520ccd1b5 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,7 +21,7 @@ hybrid_lock_release_usdc_token_pool: ../solc/ccip/HybridLockReleaseUSDCTokenPool hyper_liquid_compatible_erc20: ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.abi.json ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.bin 1b825f6c2f7ba630ca0dbacb241c6a8cb16a5aa62cc152f5fefe40166c3d96f6 lock_release_token_pool: ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin 441fbe17b31e20eba68b49bfe5bf2d8c28adf8815cb30367036d4191d2dfba9a log_message_data_receiver: ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.abi.json ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.bin 6fe60e48711884eae82dd95cabb1c66a5644336719fa1219df1ceceec11e6bce -lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 3d9ff3cee050a570c0d15627c93caa26913a5a5ebca4c718b4534c4e5434354d +lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin f4e2803db9c06c66a6d0937f53a96063a2ba702576923cbf26406e114faa0b8f maybe_revert_message_receiver: ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin ee264f67a2356cc4eebe839a5a88367cbcdc27a7520cca56263319e9afe97a1a message_hasher: ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin cb3448514ff88dd019316135cf6c10f6b0d6afcb8ded227884c910efe4274ba1 mock_lbtc_token_pool: ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.abi.json ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.bin c470511bc86d6bde457636d584a3d88d7d610293038ea9b384ab2f5930190ffc From c197222b8630d5b44de4306fe93b8c3e43258e87 Mon Sep 17 00:00:00 2001 From: 0xsuryansh Date: Wed, 10 Dec 2025 18:51:06 +0530 Subject: [PATCH 16/16] merge fix --- .../lombard_token_pool/lombard_token_pool.go | 557 +++++++++++++++--- chains/evm/.gas-snapshot | 18 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 3 files changed, 487 insertions(+), 90 deletions(-) diff --git a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go index 779fcb4de6..9dd4f59d27 100644 --- a/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go +++ b/ccv/chains/evm/gobindings/generated/latest/lombard_token_pool/lombard_token_pool.go @@ -38,6 +38,11 @@ type IPoolV2TokenTransferFeeConfig struct { IsEnabled bool } +type LombardTokenPoolPath struct { + AllowedCaller [32]byte + LChainId [32]byte +} + type PoolLockOrBurnInV1 struct { Receiver []byte RemoteChainSelector uint64 @@ -101,15 +106,15 @@ type TokenPoolTokenTransferFeeConfigArgs struct { } var LombardTokenPoolMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinBlockConfirmation\",\"inputs\":[],\"outputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getVerifierResolver\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"releaseOrMintOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBlockConfirmation\",\"inputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardVerifierSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinBlockConfirmationSet\",\"inputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustomBlockConfirmationsNotEnabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", - Bin: "0x610120806040523461024e5760c0816151c18038038091610020828561029f565b83398101031261024e578051906001600160a01b03821680830361024e5761004a602083016102d8565b92610057604084016102d8565b91610086610067606086016102d8565b9261008060a0610079608089016102d8565b97016102ec565b906102fa565b91331561028e57600180546001600160a01b031916331790558115801561027d575b801561026c575b61025b578160209160049360805260c0526040519283809263313ce56760e01b82525afa6000918161021a575b506101ef575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169282169290921790915581169081156101de5761010052604051907fa817b8930bcb4b25cbd026589d9815aceaf8ec0882ebf9bdf32f1e22f69ff745600080a2614e509081610371823960805181818161169d01528181612500015281816126f6015281816127f201528181612aa901528181612dd40152612e2e015260a0518181816119ca01528181612c9a01528181613d980152613e1b015260c051818181610cae01528181611779015261259b015260e0518181816119200152818161275e01526137d501526101005181818161164a0152612ee00152f35b639533e8c360e01b60005260046000fd5b60ff1660ff821681810361020357506100e2565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d602011610253575b816102366020938361029f565b8101031261024e57610247906102ec565b90386100dc565b600080fd5b3d9150610229565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100af565b506001600160a01b038516156100a8565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b038211908210176102c257604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361024e57565b519060ff8216820361024e57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610334575b5061032f575090565b905090565b9091506020813d602011610368575b816103506020938361029f565b8101031261024e57610361906102ec565b9038610326565b3d915061034356fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a714612f045750806305e20b2b14612eb3578063181f5a7714612e5257806321df0da714612e01578063240028e814612d9d5780632422ac4514612cbe57806324f65ee714612c805780632c06340414612be75780633907753714612ba4578063489a68f21461245a5780634c5ef0ed146124135780634e921c301461237457806362ddd3c4146122ed5780637437ff9f146122ac57806379ba5097146121e55780638926f54f1461219f57806389720a62146120d85780638da5cb5b146120a45780639a4575b914612053578063a42a7b8b14611eec578063acfecf9114611df4578063b1c71c651461156f578063b794658014611532578063c4bffe2b14611407578063c7230a601461125d578063d8aa3f4014611123578063dc04fa1f14610cd2578063dc0bd97114610c81578063dcbd41bc14610a7d578063e8a1da17146103b9578063f2fde38b146102ea578063fa41d79c146102c55763ff8e03f31461018c57600080fd5b346102c25760406003193601126102c2576101a561317f565b906101ae6131ca565b6101b6613f3d565b73ffffffffffffffffffffffffffffffffffffffff831692831561029a577f22a0dbb8195755fbfc99667a86ae684c568e9dfbb1eccf7f90084e616644797092937fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025573ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556102946040519283928390929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b0390a180f35b6004837f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346102c257806003193601126102c257602061ffff60025460a01c16604051908152f35b50346102c25760206003193601126102c25773ffffffffffffffffffffffffffffffffffffffff61031961317f565b610321613f3d565b1633811461039157807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346102c25760406003193601126102c25760043567ffffffffffffffff81116108d6576103eb903690600401613381565b9060243567ffffffffffffffff8111610a79579061040e84923690600401613381565b939091610419613f3d565b83905b8282106108de5750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b818110156108da578060051b830135858112156108d2578301610120813603126108d2576040519461048086613089565b6104898261323c565b8652602082013567ffffffffffffffff81116108d65782019436601f870112156108d6578535956104b987613740565b966104c760405198896130a5565b80885260208089019160051b830101903682116108d25760208301905b82821061089f575050505060208701958652604083013567ffffffffffffffff811161089b5761051790369085016132f4565b916040880192835261054161052f3660608701613b9d565b9460608a0195865260c0369101613b9d565b9560808901968752835151156108735761056567ffffffffffffffff8a5116614a06565b1561083c5767ffffffffffffffff895116825260076020526040822061058c865182614379565b61059a885160028301614379565b6004855191019080519067ffffffffffffffff821161080f576105bd83546139eb565b601f81116107d4575b50602090601f831160011461073557610614929186918361072a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b8851805182101561064e57906106486001926106418367ffffffffffffffff8f5116926139a8565b5190613f88565b01610619565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561071c67ffffffffffffffff60019796949851169251935191516106e86106b360405196879687526101006020880152610100870190613120565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a101939290919361044f565b015190508e806105e2565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107bc5750908460019594939210610785575b505050811b019055610617565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d8080610778565b92936020600181928786015181550195019301610762565b6107ff9084875260208720601f850160051c81019160208610610805575b601f0160051c0190613c39565b8d6105c6565b90915081906107f2565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108ce576020916108c383928336918901016132f4565b8152019101906104e4565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff6109006108fb8486889a9699979a613b22565b6136ee565b169161090b83614669565b15610a4d57828452600760205261092760056040862001614606565b94845b865181101561096057600190858752600760205261095960056040892001610952838b6139a8565b51906147ff565b500161092a565b509396929094509490948087526007602052600560408820888155886001820155886002820155886003820155886004820161099c81546139eb565b80610a0c575b50505001805490888155816109ee575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a10190919493929461041c565b885260208820908101905b818110156109b2578881556001016109f9565b601f8111600114610a225750555b888a806109a2565b81835260208320610a3d91601f01861c810190600101613c39565b8082528160208120915555610a1a565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b8380fd5b50346102c25760206003193601126102c25760043567ffffffffffffffff81116108d657610aaf9036906004016133b2565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610c5f575b610c3357825b818110610ae2578380f35b610aed818385613b32565b67ffffffffffffffff610aff826136ee565b1690610b18826000526006602052604060002054151590565b15610c0757907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610bc7610ba1602060019897018b610b5982613b42565b15610bce578790526003602052610b8060408d20610b7a3660408801613b9d565b90614379565b868c526004602052610b9c60408d20610b7a3660a08801613b9d565b613b42565b916040519215158352610bba6020840160408301613bf5565b60a0608084019101613bf5565ba201610ad7565b60026040828a610b9c94526007602052610bf0828220610b7a36858c01613b9d565b8a815260076020522001610b7a3660a08801613b9d565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610ad1565b50346102c257806003193601126102c257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102c25760406003193601126102c25760043567ffffffffffffffff81116108d657610d049036906004016133b2565b60243567ffffffffffffffff8111610a7957610d24903690600401613381565b919092610d2f613f3d565b845b828110610d9b57505050825b818110610d48578380f35b8067ffffffffffffffff610d626108fb6001948688613b22565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610d3d565b610da96108fb828585613b32565b610db4828585613b32565b90602082019060e0830190610dc882613b42565b156110ee5760a0840161271061ffff610de083613b4f565b1610156110df5760c085019161271061ffff610dfb85613b4f565b1610156110a75763ffffffff610e1086613b5e565b16156110725767ffffffffffffffff1694858c52600a60205260408c20610e3686613b5e565b63ffffffff16908054906040840191610e4e83613b5e565b60201b67ffffffff0000000016936060860194610e6a86613b5e565b60401b6bffffffff0000000000000000169660800196610e8988613b5e565b60601b6fffffffff0000000000000000000000001691610ea88a613b4f565b60801b71ffff000000000000000000000000000000001693610ec98c613b4f565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff161717178155610f7c87613b42565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff00000000000000000000000000000000000000001617905560405196610fcd90613b6f565b63ffffffff168752610fde90613b6f565b63ffffffff166020870152610ff290613b6f565b63ffffffff16604086015261100690613b6f565b63ffffffff16606085015261101a90613280565b61ffff16608084015261102c90613280565b61ffff1660a083015261103e90613251565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610d31565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6110b686613b4f565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6110b6602493613b4f565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346102c25760806003193601126102c25761113d61317f565b50611146613225565b61114e61326f565b5060643567ffffffffffffffff811161089b579167ffffffffffffffff60409261117e60e095369060040161328f565b50508260c0855161118e8161306d565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906111c68261306d565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346102c25760406003193601126102c25760043567ffffffffffffffff81116108d65761128f903690600401613381565b906112986131ca565b6112a0613f3d565b835b8381106112ad578480f35b80602073ffffffffffffffffffffffffffffffffffffffff6112da6112d56024958989613b22565b6136cd565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156113fc5786906113c6575b600192508061132b575b50016112a2565b611359818573ffffffffffffffffffffffffffffffffffffffff6113536112d5878c8c613b22565b166141f2565b73ffffffffffffffffffffffffffffffffffffffff61137c6112d5848989613b22565b60405192835216907f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff871692a338611324565b509060203d81116113f5575b6113dc81836130a5565b602082600092810103126102c25750906001915161131a565b503d6113d2565b6040513d88823e3d90fd5b50346102c257806003193601126102c257604051906005548083528260208101600584526020842092845b818110611519575050611447925003836130a5565b815161146b61145582613740565b9161146360405193846130a5565b808352613740565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156114ca578067ffffffffffffffff6114b7600193886139a8565b51166114c382866139a8565b5201611498565b50925090604051928392602084019060208552518091526040840192915b8181106114f6575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016114e8565b8454835260019485019487945060209093019201611432565b50346102c25760206003193601126102c25761156b61155761155261320e565b613b00565b604051918291602083526020830190613120565b0390f35b50346102c25760606003193601126102c2576004359067ffffffffffffffff82116102c2578160040160a060031984360301126108d6576115ae61325e565b9060443567ffffffffffffffff8111610a79576115cf90369060040161328f565b9390946115da61398f565b5060248101956115e9876136ee565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611de9578492611dad575b5073ffffffffffffffffffffffffffffffffffffffff821615611d85576116dd907f0000000000000000000000000000000000000000000000000000000000000000976116cd606486013580958b6141f2565b6116d561398f565b5036916132bd565b60848301926116eb846136cd565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611d3b5777ffffffffffffffff0000000000000000000000000000000061172c8a6136ee565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156113fc578691611d0c575b50611ce45767ffffffffffffffff6117c08a6136ee565b166117d8816000526006602052604060002054151590565b15611cb957602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa80156113fc578690611c68575b73ffffffffffffffffffffffffffffffffffffffff9150163303611c3c5761ffff8716918215611baa5761ffff60025460a01c168015611b8257808410611b52575067ffffffffffffffff61188d8b6136ee565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac2097932885806118e08d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391614abb565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611a30575b611a268a6119c26115528e61195c8e8e614933565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae10606067ffffffffffffffff611992856136ee565b73ffffffffffffffffffffffffffffffffffffffff604051951685523360208601528860408601521692a26136ee565b9060405160ff7f0000000000000000000000000000000000000000000000000000000000000000166020820152602081526119fe6040826130a5565b60405192611a0b84613051565b83526020830152604051928392604084526040840190613357565b9060208301520390f35b833b156108ce578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611a7f916145b6565b6064890160a09052610104890190611a9692613779565b94611aa09061323c565b67ffffffffffffffff166084880152604401611abb906131ed565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611ae4906131ed565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611b1991613120565b03925af18015611b4757611b32575b8080808080611947565b611b3d8280926130a5565b6102c25780611b28565b6040513d84823e3d90fd5b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b6004877f98d50fd7000000000000000000000000000000000000000000000000000000008152fd5b67ffffffffffffffff611bbc8b6136ee565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611c0f8d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391614abb565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2611909565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611cb1575b81611c82602093836130a5565b81010312611cad57611ca873ffffffffffffffffffffffffffffffffffffffff91613758565b611839565b8580fd5b3d9150611c75565b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b611d2e915060203d602011611d34575b611d2681836130a5565b810190613f25565b386117a9565b503d611d1c565b60248573ffffffffffffffffffffffffffffffffffffffff611d5c876136cd565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611de1575b81611dc9602093836130a5565b81010312610a7957611dda90613758565b903861167a565b3d9150611dbc565b6040513d86823e3d90fd5b50346102c25767ffffffffffffffff611e0c36613312565b929091611e17613f3d565b1691611e30836000526006602052604060002054151590565b15610a4d578284526007602052611e5f60056040862001611e523684866132bd565b60208151910120906147ff565b15611ea457907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611e9e604051928392602084526020840191613779565b0390a280f35b82611ee8836040519384937f74f23c7c0000000000000000000000000000000000000000000000000000000085526004850152604060248501526044840191613779565b0390fd5b50346102c25760206003193601126102c25767ffffffffffffffff611f0f61320e565b1681526007602052611f2660056040832001614606565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f6b611f5583613740565b92611f6360405194856130a5565b808452613740565b01835b818110612042575050825b8251811015611fbf5780611f8f600192856139a8565b5185526008602052611fa360408620613a3e565b611fad82856139a8565b52611fb881846139a8565b5001611f79565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b828210611ff757505050500390f35b91936020612032827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851613120565b9601920192018594939192611fe8565b806060602080938601015201611f6e565b50346102c25760206003193601126102c25760043567ffffffffffffffff81116108d65760031960a091360301126102c25761156b61209061398f565b604051918291602083526020830190613357565b50346102c257806003193601126102c257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346102c25760c06003193601126102c2576120f261317f565b6120fa613225565b9060643561ffff81168103610a795760843567ffffffffffffffff81116108d25761212990369060040161328f565b9160a4359360028510156108ce5761214495604435916137b8565b90604051918291602083016020845282518091526020604085019301915b818110612170575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612162565b50346102c25760206003193601126102c25760206121db67ffffffffffffffff6121c761320e565b166000526006602052604060002054151590565b6040519015158152f35b50346102c257806003193601126102c257805473ffffffffffffffffffffffffffffffffffffffff81163303612284577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346102c257806003193601126102c2576002546009546040805173ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015290f35b50346102c2576122fc36613312565b61230893929193613f3d565b67ffffffffffffffff821661232a816000526006602052604060002054151590565b15612349575061234692936123409136916132bd565b90613f88565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b50346102c25760206003193601126102c25760043561ffff81169081810361089b577fa7f8dbba8cdb126ce4a0e7939ec58e0161b70d808b585dd651d68e59d27e11fb916020916123c3613f3d565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000006002549260a01b16911617600255604051908152a180f35b50346102c25760406003193601126102c25761242d61320e565b906024359067ffffffffffffffff82116102c25760206121db8461245436600487016132f4565b90613703565b50346102c25760406003193601126102c2576004359067ffffffffffffffff82116102c257816004019161010060031982360301126108d65761249b61325e565b90826040516124a981613006565b5260c481019260648201356124d96124d36124ce6124c7888a61367c565b36916132bd565b613d24565b82613e18565b9460848401916124e8836136cd565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b8357602485019577ffffffffffffffff0000000000000000000000000000000061254e886136ee565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156113fc578691612b64575b50611ce45767ffffffffffffffff6125e2886136ee565b166125fa816000526006602052604060002054151590565b15611cb957602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156113fc578691612b45575b5015611c3c57908893929161268a612679896136ee565b6124546124c760a48b01809961367c565b15612afe5761ffff16988915612a4a5767ffffffffffffffff6126ac896136ee565b1680875260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a8061271e60408b2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391614abb565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928361283e575b50602089604489017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc0608067ffffffffffffffff6127d56127cf8f6127c9876136cd565b506136ee565b946136cd565b9373ffffffffffffffffffffffffffffffffffffffff60405195817f000000000000000000000000000000000000000000000000000000000000000016875233898801521660408601528560608601521692a28060405161283581613006565b52604051908152f35b869a849796973b156108ce57869289928b6040519a8b998a9889977f5eff3bf7000000000000000000000000000000000000000000000000000000008952600489016060905261288e87806145b6565b60648b0161010090526101648b01906128a692613779565b946128b09061323c565b67ffffffffffffffff1660848a01526044016128cb906131ed565b73ffffffffffffffffffffffffffffffffffffffff1660a489015260c48801526128f4906131ed565b73ffffffffffffffffffffffffffffffffffffffff1660e487015261291990846145b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8784030161010488015261294e9291613779565b9061295990836145b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8684030161012487015261298e9291613779565b9060e48b0161299c916145b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101448601526129d19291613779565b908b6024840152604483015203925af18015612a3f576127d56127cf60447ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc09560209960809667ffffffffffffffff96612a2f575b50819750612785565b81612a39916130a5565b38612a26565b6040513d87823e3d90fd5b67ffffffffffffffff612a5c896136ee565b1680875260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a80612ad1600260408c200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391614abb565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a2612747565b612b08858b61367c565b611ee86040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191613779565b612b5e915060203d602011611d3457611d2681836130a5565b38612662565b612b7d915060203d602011611d3457611d2681836130a5565b386125cb565b60248473ffffffffffffffffffffffffffffffffffffffff611d5c866136cd565b50346102c25760206003193601126102c25760043567ffffffffffffffff81116108d65760031961010091360301126102c2578060209160405161283581613006565b50346102c25760c06003193601126102c257612c0161317f565b50612c0a613225565b612c126131a7565b506084359161ffff831683036102c25760a4359067ffffffffffffffff82116102c25760a063ffffffff8061ffff612c598888612c523660048b0161328f565b50506134f7565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b50346102c257806003193601126102c257602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102c25760406003193601126102c257612cd861320e565b6024359182151583036102c257610140612d9b612cf58585613474565b612d4b60409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b50346102c25760206003193601126102c257602090612dba61317f565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b50346102c257806003193601126102c257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102c257806003193601126102c2575061156b604051612e756040826130a5565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d6465760000000000006020820152604051918291602083526020830190613120565b50346102c257806003193601126102c257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346108d65760206003193601126108d6576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361089b57602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115612fdc575b8115612fb2575b8115612f88575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612f81565b7f0e64dd290000000000000000000000000000000000000000000000000000000081149150612f7a565b7f331710310000000000000000000000000000000000000000000000000000000081149150612f73565b6020810190811067ffffffffffffffff82111761302257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761302257604052565b60e0810190811067ffffffffffffffff82111761302257604052565b60a0810190811067ffffffffffffffff82111761302257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761302257604052565b67ffffffffffffffff811161302257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b919082519283825260005b84811061316a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161312b565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036131a257565b600080fd5b6064359073ffffffffffffffffffffffffffffffffffffffff821682036131a257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036131a257565b359073ffffffffffffffffffffffffffffffffffffffff821682036131a257565b6004359067ffffffffffffffff821682036131a257565b6024359067ffffffffffffffff821682036131a257565b359067ffffffffffffffff821682036131a257565b359081151582036131a257565b6024359061ffff821682036131a257565b6044359061ffff821682036131a257565b359061ffff821682036131a257565b9181601f840112156131a25782359167ffffffffffffffff83116131a257602083818601950101116131a257565b9291926132c9826130e6565b916132d760405193846130a5565b8294818452818301116131a2578281602093846000960137010152565b9080601f830112156131a25781602061330f933591016132bd565b90565b9060406003198301126131a25760043567ffffffffffffffff811681036131a257916024359067ffffffffffffffff82116131a2576133539160040161328f565b9091565b61330f9160206133708351604084526040840190613120565b920151906020818403910152613120565b9181601f840112156131a25782359167ffffffffffffffff83116131a2576020808501948460051b0101116131a257565b9181601f840112156131a25782359167ffffffffffffffff83116131a2576020808501948460081b0101116131a257565b604051906133f082613089565b60006080838281528260208201528260408201528260608201520152565b9060405161341b81613089565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff916134866133e3565b5061348f6133e3565b506134c35716600052600760205260406000209061330f6134b760026134bc6134b78661340e565b613c9f565b940161340e565b16908160005260036020526134de6134b7604060002061340e565b91600052600460205261330f6134b7604060002061340e565b9061ffff8060025460a01c1691169283151592838094613674575b61364a5767ffffffffffffffff16600052600a6020526040600020916040519261353b8461306d565b5463ffffffff81168452602084019563ffffffff8260201c168752604085019263ffffffff8360401c168452606086019163ffffffff8460601c168352608087019761ffff8560801c16895260ff60a089019561ffff8160901c16875260a01c1615801560c08a015261362f576135d0575050505063ffffffff808061ffff9351169451169551169351169193929190600190565b8193975080929450106135ff57505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b50505050505092505050600090600090600090600090600090565b7f98d50fd70000000000000000000000000000000000000000000000000000000060005260046000fd5b508215613512565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156131a2570180359067ffffffffffffffff82116131a2576020019181360383136131a257565b3573ffffffffffffffffffffffffffffffffffffffff811681036131a25790565b3567ffffffffffffffff811681036131a25790565b9067ffffffffffffffff61330f92166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b67ffffffffffffffff81116130225760051b60200190565b519073ffffffffffffffffffffffffffffffffffffffff821682036131a257565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001695861561396d576138719467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191613779565b91600282101561393e578380600094819460a483015203915afa9081156139325760009161389d575090565b3d8083833e6138ac81836130a5565b81019060208183031261089b5780519067ffffffffffffffff8211610a79570181601f8201121561089b578051906138e382613740565b936138f160405195866130a5565b82855260208086019360051b8301019384116102c25750602001905b82821061391a5750505090565b6020809161392784613758565b81520191019061390d565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b50505050505050506040516139836020826130a5565b60008152600036813790565b6040519061399c82613051565b60606020838281520152565b80518210156139bc5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c92168015613a34575b6020831014613a0557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916139fa565b9060405191826000825492613a52846139eb565b8084529360018116908115613ac05750600114613a79575b50613a77925003836130a5565b565b90506000929192526020600020906000915b818310613aa4575050906020613a779282010138613a6a565b6020919350806001915483858901015201910190918492613a8b565b60209350613a779592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613a6a565b67ffffffffffffffff16600052600760205261330f6004604060002001613a3e565b91908110156139bc5760051b0190565b91908110156139bc5760081b0190565b3580151581036131a25790565b3561ffff811681036131a25790565b3563ffffffff811681036131a25790565b359063ffffffff821682036131a257565b35906fffffffffffffffffffffffffffffffff821682036131a257565b91908260609103126131a2576040516060810181811067ffffffffffffffff821117613022576040526040613bf0818395613bd781613251565b8552613be560208201613b80565b602086015201613b80565b910152565b6fffffffffffffffffffffffffffffffff613c3360408093613c1681613251565b1515865283613c2760208301613b80565b16602087015201613b80565b16910152565b818110613c44575050565b60008155600101613c39565b81810292918115918404141715613c6357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908203918211613c6357565b613ca76133e3565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691613d046020850193613cfe613cf163ffffffff87511642613c92565b8560808901511690613c50565b906145a9565b80821015613d1d57505b16825263ffffffff4216905290565b9050613d0e565b80518015613d9457602003613d565780516020828101918301839003126131a257519060ff8211613d56575060ff1690565b611ee8906040519182917f953576f7000000000000000000000000000000000000000000000000000000008352602060048401526024830190613120565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff8211613c6357565b60ff16604d8111613c6357600a0a90565b8115613de9570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff811692828414613f1e57828411613ef45790613e5d91613dba565b91604d60ff8416118015613ebb575b613e8557505090613e7f61330f92613dce565b90613c50565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50613ec583613dce565b8015613de9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048411613e6c565b613efd91613dba565b91604d60ff841611613e8557505090613f1861330f92613dce565b90613ddf565b5050505090565b908160209103126131a2575180151581036131a25790565b73ffffffffffffffffffffffffffffffffffffffff600154163303613f5e57565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b908051156141c85767ffffffffffffffff81516020830120921691826000526007602052613fbd816005604060002001614a66565b156141845760005260086020526040600020815167ffffffffffffffff811161302257613fea82546139eb565b601f8111614152575b506020601f821160011461408c5791614066827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea959361407c95600091614081575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055604051918291602083526020830190613120565b0390a2565b905084015138614035565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b81811061413a57509261407c9492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea989610614103575b5050811b019055611557565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905538806140f7565b9192602060018192868a0151815501940192016140bc565b61417e90836000526020600020601f840160051c8101916020851061080557601f0160051c0190613c39565b38613ff3565b5090611ee86040519283927f393b8ad20000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190613120565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff93841660248301526044808301959095529381526142c89290916142576064846130a5565b1660008060409586519461426b88876130a5565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d15614371573d916142ac836130e6565b926142b9875194856130a5565b83523d6000602085013e614d77565b805190816142d557505050565b6020806142e6938301019101613f25565b156142ee5750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606091614d77565b8151919291156144fb576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff6020850151161061449857613a7791925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b6064836144f9604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff6040840151161580159061458a575b61452957613a7791926143bc565b6064836144f9604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff602084015116151561451b565b91908201809211613c6357565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156131a257016020813591019167ffffffffffffffff82116131a25781360383136131a257565b906040519182815491828252602082019060005260206000209260005b818110614638575050613a77925003836130a5565b8454835260019485019487945060209093019201614623565b80548210156139bc5760005260206000200190600090565b60008181526006602052604090205480156147f8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111613c6357600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211613c6357818103614789575b505050600554801561475a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614717816005614651565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6147e061479a6147ab936005614651565b90549060031b1c9283926005614651565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b905560005260066020526040600020553880806146de565b5050600090565b906001820191816000528260205260406000205480151560001461492a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111613c63578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211613c63578181036148f3575b5050508054801561475a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906148b48282614651565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b6149136149036147ab9386614651565b90549060031b1c92839286614651565b90556000528360205260406000205538808061487c565b50505050600090565b9061ffff9067ffffffffffffffff61494d602085016136ee565b16600052600a602052604060002082604051916149698361306d565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c1615159101521615156000146149ff57505b1680156149f7576127106149f0606061330f9401359283613c50565b0490613c92565b506060013590565b90506149d4565b80600052600660205260406000205415600014614a60576005546801000000000000000081101561302257614a476147ab8260018594016005556005614651565b9055600554906000526006602052604060002055600190565b50600090565b60008281526001820160205260409020546147f857805490680100000000000000008210156130225782614aa46147ab846001809601855584614651565b905580549260005201602052604060002055600190565b9182549060ff8260a01c16158015614d6f575b614d69576fffffffffffffffffffffffffffffffff82169160018501908154614b1363ffffffff6fffffffffffffffffffffffffffffffff83169360801c1642613c92565b9081614ccb575b5050848110614c7f5750838310614b74575050614b496fffffffffffffffffffffffffffffffff928392613c92565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c928315614c135781614b8c91613c92565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190808211613c6357614bda614bdf9273ffffffffffffffffffffffffffffffffffffffff966145a9565b613ddf565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b828692939611614d3f57614ce692613cfe9160801c90613c50565b80841015614d3a5750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880614b1a565b614cf1565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b508215614ace565b91929015614df25750815115614d8b575090565b3b15614d945790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015614e055750805190602001fd5b611ee8906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061312056fea164736f6c634300081a000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20Metadata\"},{\"name\":\"verifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"},{\"name\":\"adapter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"advancedPoolHooks\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"fallbackDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyChainUpdates\",\"inputs\":[{\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"},{\"name\":\"chainsToAdd\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.ChainUpdate[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"remoteTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"applyTokenTransferFeeConfigUpdates\",\"inputs\":[{\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.TokenTransferFeeConfigArgs[]\",\"components\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]},{\"name\":\"disableTokenTransferFeeConfigs\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentRateLimiterState\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[{\"name\":\"outboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterState\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.TokenBucket\",\"components\":[{\"name\":\"tokens\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"lastUpdated\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDynamicConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getFee\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeUSDCents\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"tokenFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLombardConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"verifierResolver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinBlockConfirmation\",\"inputs\":[],\"outputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct LombardTokenPool.Path\",\"components\":[{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemotePools\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRemoteToken\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRequiredCCVs\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"direction\",\"type\":\"uint8\",\"internalType\":\"enum IPoolV2.MessageDirection\"}],\"outputs\":[{\"name\":\"requiredCCVs\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRmnProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"rmnProxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getToken\",\"inputs\":[],\"outputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contract IERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenDecimals\",\"inputs\":[],\"outputs\":[{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"feeConfig\",\"type\":\"tuple\",\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"i_bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IBridgeV1\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isSupportedToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lockOrBurn\",\"inputs\":[{\"name\":\"lockOrBurnIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnInV1\",\"components\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"originalSender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"tokenArgs\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"lockOrBurnOut\",\"type\":\"tuple\",\"internalType\":\"struct Pool.LockOrBurnOutV1\",\"components\":[{\"name\":\"destTokenAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"destPoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"destTokenAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"releaseOrMint\",\"inputs\":[{\"name\":\"releaseOrMintIn\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintInV1\",\"components\":[{\"name\":\"originalSender\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceDenominatedAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"offchainTokenData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"blockConfirmationRequested\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct Pool.ReleaseOrMintOutV1\",\"components\":[{\"name\":\"destinationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeRemotePool\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDynamicConfig\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBlockConfirmation\",\"inputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPath\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRateLimitConfig\",\"inputs\":[{\"name\":\"rateLimitConfigArgs\",\"type\":\"tuple[]\",\"internalType\":\"struct TokenPool.RateLimitConfigArgs[]\",\"components\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawFeeTokens\",\"inputs\":[{\"name\":\"feeTokens\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"remoteToken\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationInboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CustomBlockConfirmationOutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DynamicConfigSet\",\"inputs\":[{\"name\":\"router\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"rateLimitAdmin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeTokenWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"feeToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LockedOrBurned\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LombardConfigurationSet\",\"inputs\":[{\"name\":\"verifier\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"tokenAdapter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinBlockConfirmationSet\",\"inputs\":[{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OutboundRateLimitConsumed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PathSet\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"lChainId\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"allowedCaller\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RateLimitConfigured\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"customBlockConfirmation\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasedOrMinted\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemotePoolRemoved\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigDeleted\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenTransferFeeConfigUpdated\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"struct IPoolV2.TokenTransferFeeConfig\",\"components\":[{\"name\":\"destGasOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destBytesOverhead\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"customBlockConfirmationFeeUSDCents\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"defaultBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"customBlockConfirmationTransferFeeBps\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BucketOverfilled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotARampOnRouter\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"CannotTransferToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainAlreadyExists\",\"inputs\":[{\"name\":\"chainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotAllowed\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"ChainNotSupported\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"CursedByRMN\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustomBlockConfirmationsNotEnabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DisabledNonZeroRateLimit\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"ExecutionError\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HashMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAllowedCaller\",\"inputs\":[{\"name\":\"allowedCaller\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidDecimalArgs\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageVersion\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"received\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMinBlockConfirmation\",\"inputs\":[{\"name\":\"requested\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minBlockConfirmation\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidRateLimitRate\",\"inputs\":[{\"name\":\"rateLimiterConfig\",\"type\":\"tuple\",\"internalType\":\"struct RateLimiter.Config\",\"components\":[{\"name\":\"isEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"capacity\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"rate\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}]},{\"type\":\"error\",\"name\":\"InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemoteChainDecimals\",\"inputs\":[{\"name\":\"sourcePoolData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidRemotePoolForChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSourcePoolAddress\",\"inputs\":[{\"name\":\"sourcePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenTransferFeeConfig\",\"inputs\":[{\"name\":\"destChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidTransferFeeBps\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"MismatchedArrayLengths\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustBeProposedOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonExistentChain\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"OnlyCallableByOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutboundImplementationNotFoundForVerifier\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OverflowDetected\",\"inputs\":[{\"name\":\"remoteDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"localDecimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"remoteAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OwnerCannotBeZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PathNotExist\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"PoolAlreadyAdded\",\"inputs\":[{\"name\":\"remoteChainSelector\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remotePoolAddress\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"RemoteTokenMismatch\",\"inputs\":[{\"name\":\"bridge\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pool\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"TokenMaxCapacityExceeded\",\"inputs\":[{\"name\":\"capacity\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"requested\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"TokenRateLimitReached\",\"inputs\":[{\"name\":\"minWaitInSeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"available\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddressInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroBridge\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroLombardChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroVerifierNotAllowed\",\"inputs\":[]}]", + Bin: "0x610160806040523461031b576101008161696d803803809161002182856103f0565b83398101031261031b578051906001600160a01b03821680830361031b5761004b60208301610429565b6040830151926001600160a01b0384169283850361031b5761006f60608301610429565b9561007c60808401610429565b916100ab61008c60a08601610429565b926100a560e061009e60c08901610429565b970161043d565b9061044b565b9133156103df57600180546001600160a01b03191633179055811580156103ce575b80156103bd575b6103ac578160209160049360805260c0526040519283809263313ce56760e01b82525afa60009181610370575b50610345575b5060a0526001600160a01b0390811660e052600280546001600160a01b0319169290911691909117905581156103345760405163353c26b760e01b8152602081600481865afa8015610328576000906102e9575b60ff915016600181036102d057506001600160a01b0381169283156102bf576101005261012052610140839052604051926001600160a01b0316917f01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d600080a46164ab90816104c28239608051818181611792015281816122bc01528181612474015281816131b9015281816133ac01528181613488015281816137250152818161395201528181613b1c0152818161446201526144bc015260a051818181611ac601528181614328015281816154050152615488015260c051818181610da30152818161186e015281816123560152818161325401526139ed015260e051818181611a15015281816124fb0152818161341401528181613ba30152614e42015261010051818181610b0f015281816125bb01528181612df70152613c6a015261012051818181610ad6015261173f015261014051818181610b4b01526125670152f35b639533e8c360e01b60005260046000fd5b63398bbe0560e11b600052600160045260245260446000fd5b506020813d602011610320575b81610303602093836103f0565b8101031261031b5761031660ff9161043d565b61015b565b600080fd5b3d91506102f6565b6040513d6000823e3d90fd5b63361106cd60e01b60005260046000fd5b60ff1660ff82168181036103595750610107565b6332ad3e0760e11b60005260045260245260446000fd5b9091506020813d6020116103a4575b8161038c602093836103f0565b8101031261031b5761039d9061043d565b9038610101565b3d915061037f565b630a64406560e11b60005260046000fd5b506001600160a01b038116156100d4565b506001600160a01b038516156100cd565b639b15e16f60e01b60005260046000fd5b601f909101601f19168101906001600160401b0382119082101761041357604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361031b57565b519060ff8216820361031b57565b60405163313ce56760e01b815290602090829060049082906001600160a01b03165afa60009181610485575b50610480575090565b905090565b9091506020813d6020116104b9575b816104a1602093836103f0565b8101031261031b576104b29061043d565b9038610477565b3d915061049456fe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a71461454157508063181f5a77146144e057806321df0da71461448f578063240028e81461442b5780632422ac451461434c57806324f65ee71461430e5780632c0634041461427557806338ff8c381461420957806339077537146138e0578063489a68f2146131145780634c5ef0ed146130cd5780634e921c301461302e5780635fa1356514612ea257806362ddd3c414612e1b578063708e1f7914612dca5780637437ff9f14612d8957806379ba509714612cc25780638926f54f14612c7c57806389720a6214612bb55780638da5cb5b14612b815780639a4575b9146122455780639c893fe914612178578063a42a7b8b14612011578063acfecf9114611efb578063b1c71c6514611664578063b794658014611627578063c4bffe2b146114fc578063c7230a6014611352578063d8aa3f4014611218578063dc04fa1f14610dc7578063dc0bd97114610d76578063dcbd41bc14610b72578063dd65bdb114610aa9578063e8a1da17146103e5578063f2fde38b14610316578063fa41d79c146102f15763ff8e03f3146101b857600080fd5b346102ee5760406003193601126102ee576101d16147c3565b906101da614809565b6101e2615592565b73ffffffffffffffffffffffffffffffffffffffff83169283156102c6577f22a0dbb8195755fbfc99667a86ae684c568e9dfbb1eccf7f90084e616644797092937fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025573ffffffffffffffffffffffffffffffffffffffff82167fffffffffffffffffffffffff000000000000000000000000000000000000000060095416176009556102c06040519283928390929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b0390a180f35b6004837f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b80fd5b50346102ee57806003193601126102ee57602061ffff60025460a01c16604051908152f35b50346102ee5760206003193601126102ee5773ffffffffffffffffffffffffffffffffffffffff6103456147c3565b61034d615592565b163381146103bd57807fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825573ffffffffffffffffffffffffffffffffffffffff600154167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12788380a380f35b6004827fdad89dca000000000000000000000000000000000000000000000000000000008152fd5b50346102ee5760406003193601126102ee5760043567ffffffffffffffff8111610902576104179036906004016149c0565b9060243567ffffffffffffffff8111610aa5579061043a849236906004016149c0565b939091610445615592565b83905b82821061090a5750505081927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301935b81811015610906578060051b830135858112156108fe578301610120813603126108fe57604051946104ac866146c6565b6104b58261487b565b8652602082013567ffffffffffffffff81116109025782019436601f87011215610902578535956104e587614e0d565b966104f360405198896146e2565b80885260208089019160051b830101903682116108fe5760208301905b8282106108cb575050505060208701958652604083013567ffffffffffffffff81116108c7576105439036908501614933565b916040880192835261056d61055b366060870161520a565b9460608a0195865260c036910161520a565b95608089019687528351511561089f5761059167ffffffffffffffff8a5116616061565b156108685767ffffffffffffffff89511682526007602052604082206105b88651826159d4565b6105c68851600283016159d4565b6004855191019080519067ffffffffffffffff821161083b576105e98354615058565b601f8111610800575b50602090601f8311600114610761576106409291869183610756575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b815b8851805182101561067a579061067460019261066d8367ffffffffffffffff8f511692615015565b51906155dd565b01610645565b5050977f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c293919997509561074867ffffffffffffffff60019796949851169251935191516107146106df60405196879687526101006020880152610100870190614780565b9360408601906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b60a08401906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b0390a101939290919361047b565b015190508e8061060e565b83865281862091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416875b8181106107e857509084600195949392106107b1575b505050811b019055610643565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558d80806107a4565b9293602060018192878601518155019501930161078e565b61082b9084875260208720601f850160051c81019160208610610831575b601f0160051c01906152a6565b8d6105f2565b909150819061081e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b60248267ffffffffffffffff8b51167f1d5ad3c5000000000000000000000000000000000000000000000000000000008252600452fd5b6004827f14c880ca000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b813567ffffffffffffffff81116108fa576020916108ef8392833691890101614933565b815201910190610510565b8680fd5b8480fd5b5080fd5b8380f35b9267ffffffffffffffff61092c6109278486889a9699979a61518f565b614d3a565b169161093783615cc4565b15610a7957828452600760205261095360056040862001615c61565b94845b865181101561098c5760019085875260076020526109856005604089200161097e838b615015565b5190615e5a565b5001610956565b50939692909450949094808752600760205260056040882088815588600182015588600282015588600382015588600482016109c88154615058565b80610a38575b5050500180549088815581610a1a575b5050907f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599166020600193604051908152a101909194939294610448565b885260208820908101905b818110156109de57888155600101610a25565b601f8111600114610a4e5750555b888a806109ce565b81835260208320610a6991601f01861c8101906001016152a6565b8082528160208120915555610a46565b602484847f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b8380fd5b50346102ee57806003193601126102ee57606060405173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346102ee5760206003193601126102ee5760043567ffffffffffffffff811161090257610ba49036906004016149f1565b73ffffffffffffffffffffffffffffffffffffffff6009541633141580610d54575b610d2857825b818110610bd7578380f35b610be281838561519f565b67ffffffffffffffff610bf482614d3a565b1690610c0d826000526006602052604060002054151590565b15610cfc57907f41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb60e083610cbc610c96602060019897018b610c4e826151af565b15610cc3578790526003602052610c7560408d20610c6f366040880161520a565b906159d4565b868c526004602052610c9160408d20610c6f3660a0880161520a565b6151af565b916040519215158352610caf6020840160408301615262565b60a0608084019101615262565ba201610bcc565b60026040828a610c9194526007602052610ce5828220610c6f36858c0161520a565b8a815260076020522001610c6f3660a0880161520a565b602486837f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b6024837f8e4a23d600000000000000000000000000000000000000000000000000000000815233600452fd5b5073ffffffffffffffffffffffffffffffffffffffff60015416331415610bc6565b50346102ee57806003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee5760406003193601126102ee5760043567ffffffffffffffff811161090257610df99036906004016149f1565b60243567ffffffffffffffff8111610aa557610e199036906004016149c0565b919092610e24615592565b845b828110610e9057505050825b818110610e3d578380f35b8067ffffffffffffffff610e57610927600194868861518f565b16808652600a6020528560408120557f5479bbc0288b7eaeaf2ace0943b88016cc648964fcd42919a86fd93b15fdbee88680a201610e32565b610e9e61092782858561519f565b610ea982858561519f565b90602082019060e0830190610ebd826151af565b156111e35760a0840161271061ffff610ed5836151bc565b1610156111d45760c085019161271061ffff610ef0856151bc565b16101561119c5763ffffffff610f05866151cb565b16156111675767ffffffffffffffff1694858c52600a60205260408c20610f2b866151cb565b63ffffffff16908054906040840191610f43836151cb565b60201b67ffffffff0000000016936060860194610f5f866151cb565b60401b6bffffffff0000000000000000169660800196610f7e886151cb565b60601b6fffffffff0000000000000000000000001691610f9d8a6151bc565b60801b71ffff000000000000000000000000000000001693610fbe8c6151bc565b60901b73ffff00000000000000000000000000000000000016957fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff16177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff161717178155611071876151af565b81547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff000000000000000000000000000000000000000016179055604051966110c2906151dc565b63ffffffff1687526110d3906151dc565b63ffffffff1660208701526110e7906151dc565b63ffffffff1660408601526110fb906151dc565b63ffffffff16606085015261110f906148bf565b61ffff166080840152611121906148bf565b61ffff1660a083015261113390614890565b151560c082015260e07ffae1e296719dac5269c3886fb5002bb29bf17ae403060c6eb063a55abaaa104191a2600101610e26565b7f12332265000000000000000000000000000000000000000000000000000000008c5267ffffffffffffffff1660045260248bfd5b60248c61ffff6111ab866151bc565b7f95f3517a00000000000000000000000000000000000000000000000000000000835216600452fd5b8a61ffff6111ab6024936151bc565b7f12332265000000000000000000000000000000000000000000000000000000008a5267ffffffffffffffff16600452602489fd5b50346102ee5760806003193601126102ee576112326147c3565b5061123b614864565b6112436148ae565b5060643567ffffffffffffffff81116108c7579167ffffffffffffffff60409261127360e09536906004016148ce565b50508260c08551611283816146aa565b82815282602082015282878201528260608201528260808201528260a08201520152168152600a60205220604051906112bb826146aa565b5461ffff818163ffffffff82169485815263ffffffff60208201818560201c1681528160408401818760401c168152816060860193818960601c16855260ff60c060808901988a8c60801c168a528a60a082019c60901c168c52019b60a01c1615158b526040519b8c52511660208b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b50346102ee5760406003193601126102ee5760043567ffffffffffffffff8111610902576113849036906004016149c0565b9061138d614809565b611395615592565b835b8381106113a2578480f35b80602073ffffffffffffffffffffffffffffffffffffffff6113cf6113ca602495898961518f565b614d4f565b16604051938480927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156114f15786906114bb575b6001925080611420575b5001611397565b61144e818573ffffffffffffffffffffffffffffffffffffffff6114486113ca878c8c61518f565b16615847565b73ffffffffffffffffffffffffffffffffffffffff6114716113ca84898961518f565b60405192835216907f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e602073ffffffffffffffffffffffffffffffffffffffff871692a338611419565b509060203d81116114ea575b6114d181836146e2565b602082600092810103126102ee5750906001915161140f565b503d6114c7565b6040513d88823e3d90fd5b50346102ee57806003193601126102ee57604051906005548083528260208101600584526020842092845b81811061160e57505061153c925003836146e2565b815161156061154a82614e0d565b9161155860405193846146e2565b808352614e0d565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602083019301368437805b84518110156115bf578067ffffffffffffffff6115ac60019388615015565b51166115b88286615015565b520161158d565b50925090604051928392602084019060208552518091526040840192915b8181106115eb575050500390f35b825167ffffffffffffffff168452859450602093840193909201916001016115dd565b8454835260019485019487945060209093019201611527565b50346102ee5760206003193601126102ee5761166061164c61164761484d565b61516d565b604051918291602083526020830190614780565b0390f35b50346102ee5760606003193601126102ee576004359067ffffffffffffffff82116102ee578160040160a06003198436030112610902576116a361489d565b9060443567ffffffffffffffff8111610aa5576116c49036906004016148ce565b9390946116cf614ffc565b5060248101956116de87614d3a565b9067ffffffffffffffff604051927f958021a70000000000000000000000000000000000000000000000000000000084521660048301526040602483015283604483015260208260648173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611ef0578492611eb4575b5073ffffffffffffffffffffffffffffffffffffffff821615611e8c576117d2907f0000000000000000000000000000000000000000000000000000000000000000976117c2606486013580958b615847565b6117ca614ffc565b5036916148fc565b60848301926117e084614d4f565b73ffffffffffffffffffffffffffffffffffffffff808a16911603611e425777ffffffffffffffff000000000000000000000000000000006118218a614d3a565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156114f1578691611e08575b50611de05767ffffffffffffffff6118b58a614d3a565b166118cd816000526006602052604060002054151590565b15611db557602073ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa80156114f1578690611d64575b73ffffffffffffffffffffffffffffffffffffffff9150163303611d385761ffff8716918215611ca65761ffff60025460a01c168015611c7e57808410611c4e575067ffffffffffffffff6119828b614d3a565b1680875260036020527f61b04c91cb711a3783cc99d0de694ecd7ead5c96a0a87f5c89d436ac2097932885806119d58d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391616116565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169283611b2c575b611b228a611abe6116478e611a518e8e615f8e565b937ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff611a8584614d3a565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685523360208601528401889052169180606081015b0390a2614d3a565b9060405160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260208152611afa6040826146e2565b60405192611b0784614643565b83526020830152604051928392604084526040840190614996565b9060208301520390f35b833b156108fa578787959493928c8793604051998a98899788967f5c3af7ca000000000000000000000000000000000000000000000000000000008852600488016060905280611b7b91615c11565b6064890160a09052610104890190611b9292614dad565b94611b9c9061487b565b67ffffffffffffffff166084880152604401611bb79061482c565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152611be09061482c565b73ffffffffffffffffffffffffffffffffffffffff1660e48501526024840152828103600319016044840152611c1591614780565b03925af18015611c4357611c2e575b8080808080611a3c565b611c398280926146e2565b6102ee5780611c24565b6040513d84823e3d90fd5b86604491857f7911d95b000000000000000000000000000000000000000000000000000000008352600452602452fd5b6004877f98d50fd7000000000000000000000000000000000000000000000000000000008152fd5b67ffffffffffffffff611cb88b614d3a565b1680875260076020527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789448580611d0b8d73ffffffffffffffffffffffffffffffffffffffff60408d209116928391616116565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a26119fe565b6024857f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b506020813d602011611dad575b81611d7e602093836146e2565b81010312611da957611da473ffffffffffffffffffffffffffffffffffffffff91614d0c565b61192e565b8580fd5b3d9150611d71565b7fa9902c7e000000000000000000000000000000000000000000000000000000008652600452602485fd5b6004857f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011611e3a575b81611e23602093836146e2565b81010312611da957611e3490614d2d565b3861189e565b3d9150611e16565b60248573ffffffffffffffffffffffffffffffffffffffff611e6387614d4f565b7f961c9a4f00000000000000000000000000000000000000000000000000000000835216600452fd5b6004847f7af97002000000000000000000000000000000000000000000000000000000008152fd5b9091506020813d602011611ee8575b81611ed0602093836146e2565b81010312610aa557611ee190614d0c565b903861176f565b3d9150611ec3565b6040513d86823e3d90fd5b50346102ee57611f0a36614951565b611f12615592565b67ffffffffffffffff831692611f35846000526006602052604060002054151590565b15611fe5578385526007602052611f6460056040872001611f573685876148fc565b6020815191012090615e5a565b15611faa5750907f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7691611fa4604051928392602084526020840191614dad565b0390a280f35b90611fe1906040519384937f74f23c7c00000000000000000000000000000000000000000000000000000000855260048501614dec565b0390fd5b602485857f1e670e4b000000000000000000000000000000000000000000000000000000008252600452fd5b50346102ee5760206003193601126102ee5767ffffffffffffffff61203461484d565b168152600760205261204b60056040832001615c61565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061209061207a83614e0d565b9261208860405194856146e2565b808452614e0d565b01835b818110612167575050825b82518110156120e457806120b460019285615015565b51855260086020526120c8604086206150ab565b6120d28285615015565b526120dd8184615015565b500161209e565b81846040519182916020830160208452825180915260408401602060408360051b870101940192905b82821061211c57505050500390f35b91936020612157827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851614780565b960192019201859493919261210d565b806060602080938601015201612093565b50346102ee5760206003193601126102ee5767ffffffffffffffff61219b61484d565b6121a3615592565b16808252600b6020526040822090604051916121be83614643565b600181549182855201549060208401918252156122195760207f8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b91838652600b8252856001604082208281550155519351604051908152a380f35b602484837fa28cbf38000000000000000000000000000000000000000000000000000000008252600452fd5b50346102ee5760206003193601126102ee5760043567ffffffffffffffff8111610902578060040160a060031983360301126108c757612283614ffc565b5060405160209261229484836146e2565b848252608481016122a481614d4f565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016911603612b6057602482019377ffffffffffffffff0000000000000000000000000000000061230a86614d3a565b60801b16604051907f2cbc26bb0000000000000000000000000000000000000000000000000000000082526004820152868160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612acd578891612b2b575b50612b035767ffffffffffffffff61239d86614d3a565b166123b5816000526006602052604060002054151590565b15612ad8578673ffffffffffffffffffffffffffffffffffffffff60025416916024604051809481937fa8d87a3b00000000000000000000000000000000000000000000000000000000835260048301525afa8015612acd578890612a81575b73ffffffffffffffffffffffffffffffffffffffff9150163303612a555786606484013594859367ffffffffffffffff61244e89614d3a565b1680845260078a5261249c6040852073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016998a91616116565b6040805173ffffffffffffffffffffffffffffffffffffffff8a168152602081018890527fff0133389f9bb82d5b9385826160eaf2328039f6fa950eeb8cf0836da81789449190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081612943575b5050505067ffffffffffffffff61253886614d3a565b168752600b86526040872060405161254f81614643565b600182549283835201549188820192835215612905577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116156128fd57905b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169273ffffffffffffffffffffffffffffffffffffffff815193604051947f6e48b60d000000000000000000000000000000000000000000000000000000008652600486015216928360248201528a81604481885afa9081156128f2578c916128c5575b5061264b6116478b614d3a565b8b815191818082019384920101031261284a575190818103612897575050896126748680614cbb565b90500361284f57604490519601958961269661268f89614d4f565b9680614cbb565b908092918101031261284a5760409460c4938d923590519073ffffffffffffffffffffffffffffffffffffffff8851998a9889977f793ea55b00000000000000000000000000000000000000000000000000000000895260048901526024880152166044860152606485015288608485015260a48401525af196871561283e5780976127dd575b5050917ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff8593611ab66116479661276861276261279f9a614d3a565b93614d4f565b60405194859416968473ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b9160405190828201528181526127b66040826146e2565b604051926127c384614643565b835281830152611660604051928284938452830190614996565b909196506040823d604011612836575b816127fa604093836146e2565b810103126102ee5750840151947ff33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae1067ffffffffffffffff61271d565b3d91506127ed565b604051903d90823e3d90fd5b600080fd5b611fe18a61285d8780614cbb565b92906040519384937fa3c8cf0900000000000000000000000000000000000000000000000000000000855260048501526024840191614dad565b7f81d8236e000000000000000000000000000000000000000000000000000000008d5260045260245260448bfd5b90508a81813d83116128eb575b6128dc81836146e2565b8101031261284a57513861263e565b503d6128d2565b6040513d8e823e3d90fd5b5085906125a4565b60248967ffffffffffffffff61291a8a614d3a565b7fa28cbf3800000000000000000000000000000000000000000000000000000000835216600452fd5b813b15610aa55783918991836040518096819582947f5c3af7ca00000000000000000000000000000000000000000000000000000000845260048401606090528d61298e8d80615c11565b6064870160a090526101048701906129a592614dad565b926129af9061487b565b67ffffffffffffffff1660848601526044016129ca9061482c565b73ffffffffffffffffffffffffffffffffffffffff1660a48501528c60c48501526129f49061482c565b73ffffffffffffffffffffffffffffffffffffffff1660e4840152836024840152828103600319016044840152612a2a91614780565b03925af18015611c4357612a40575b8080612522565b81612a4a916146e2565b6108fa578638612a39565b6024877f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b508681813d8311612ac6575b612a9781836146e2565b81010312612ac257612abd73ffffffffffffffffffffffffffffffffffffffff91614d0c565b612415565b8780fd5b503d612a8d565b6040513d8a823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008852600452602487fd5b6004877f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90508681813d8311612b59575b612b4281836146e2565b81010312612ac257612b5390614d2d565b38612386565b503d612b38565b8573ffffffffffffffffffffffffffffffffffffffff611e63602493614d4f565b50346102ee57806003193601126102ee57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346102ee5760c06003193601126102ee57612bcf6147c3565b612bd7614864565b9060643561ffff81168103610aa55760843567ffffffffffffffff81116108fe57612c069036906004016148ce565b9160a4359360028510156108fa57612c219560443591614e25565b90604051918291602083016020845282518091526020604085019301915b818110612c4d575050500390f35b825173ffffffffffffffffffffffffffffffffffffffff16845285945060209384019390920191600101612c3f565b50346102ee5760206003193601126102ee576020612cb867ffffffffffffffff612ca461484d565b166000526006602052604060002054151590565b6040519015158152f35b50346102ee57806003193601126102ee57805473ffffffffffffffffffffffffffffffffffffffff81163303612d61577fffffffffffffffffffffffff000000000000000000000000000000000000000060015491338284161760015516825573ffffffffffffffffffffffffffffffffffffffff3391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6004827f02b543c6000000000000000000000000000000000000000000000000000000008152fd5b50346102ee57806003193601126102ee576002546009546040805173ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015290f35b50346102ee57806003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee57612e2a36614951565b612e3693929193615592565b67ffffffffffffffff8216612e58816000526006602052604060002054151590565b15612e775750612e749293612e6e9136916148fc565b906155dd565b80f35b7f1e670e4b000000000000000000000000000000000000000000000000000000008452600452602483fd5b50346102ee5760606003193601126102ee57612ebc61484d565b6024359060443567ffffffffffffffff8111610aa557612ee09036906004016148ce565b612ee8615592565b67ffffffffffffffff831692612f0b846000526006602052604060002054151590565b15613002578415612fda57612f2a612f243684866148fc565b82614d70565b15611faa575060208103612f9d57816020918101031261284a5760207f83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c99135604051612f7581614643565b8181526001838201878152868952600b8552604089209251835551910155604051908152a380f35b611fe16040519283927f5552d631000000000000000000000000000000000000000000000000000000008452602060048501526024840191614dad565b6004867f5a39e303000000000000000000000000000000000000000000000000000000008152fd5b602486857f2e59db3a000000000000000000000000000000000000000000000000000000008252600452fd5b50346102ee5760206003193601126102ee5760043561ffff8116908181036108c7577fa7f8dbba8cdb126ce4a0e7939ec58e0161b70d808b585dd651d68e59d27e11fb9160209161307d615592565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000006002549260a01b16911617600255604051908152a180f35b50346102ee5760406003193601126102ee576130e761484d565b906024359067ffffffffffffffff82116102ee576020612cb88461310e3660048701614933565b90614d70565b50346102ee5760406003193601126102ee576004359067ffffffffffffffff82116102ee578160040161010060031984360301126109025761315461489d565b91806040516131628161468e565b5260648401359260c4850161319261318c6131876131808488614cbb565b36916148fc565b615391565b86615485565b9460848701906131a182614d4f565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116036138bf57602488019577ffffffffffffffff0000000000000000000000000000000061320788614d3a565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613827578791613885575b5061385d5767ffffffffffffffff61329b88614d3a565b166132b3816000526006602052604060002054151590565b1561383257602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa9081156138275787916137ed575b50156137c15761332a87614d3a565b9461334060a48b019661310e6131808986614cbb565b1561377a5761ffff169081156136c65767ffffffffffffffff61336289614d3a565b1680885260046020527f0ca6b6e55c811717f7cba5bdd97184f0a2d5aa61e5ea64818392da5cef6ce6158a806133d460408c2073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391616116565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a25b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001694856134f7575b60208a60448d017ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc067ffffffffffffffff6134826127628f61347c86614d4f565b50614d3a565b604080517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081168252336020830152909216908201526060810185905292169180608081015b0390a2806040516134ee8161468e565b52604051908152f35b853b15612ac25792889694928b8997959388946040519a8b998a9889977f5eff3bf700000000000000000000000000000000000000000000000000000000895260048901606090526135498680615c11565b60648b0161010090526101648b019061356192614dad565b9361356b9061487b565b67ffffffffffffffff1660848a01526135866044880161482c565b73ffffffffffffffffffffffffffffffffffffffff1660a48a015260c48901526135af9061482c565b73ffffffffffffffffffffffffffffffffffffffff1660e48801526135d49084615c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c888403016101048901526136099291614dad565b906136149083615c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c878403016101248801526136499291614dad565b9160e40161365691615c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8584030161014486015261368b9291614dad565b908b6024840152604483015203925af18015611c43576136b1575b80808080808061343b565b6136bc8280926146e2565b6102ee57806136a6565b67ffffffffffffffff6136d889614d3a565b1680885260076020527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c8a8061374d600260408d200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016928391616116565b6040805173ffffffffffffffffffffffffffffffffffffffff9290921682526020820192909252a26133fd565b6137848683614cbb565b611fe16040519283927f24eb47e5000000000000000000000000000000000000000000000000000000008452602060048501526024840191614dad565b6024867f728fe07b00000000000000000000000000000000000000000000000000000000815233600452fd5b90506020813d60201161381f575b81613808602093836146e2565b810103126108fa5761381990614d2d565b3861331b565b3d91506137fb565b6040513d89823e3d90fd5b7fa9902c7e000000000000000000000000000000000000000000000000000000008752600452602486fd5b6004867f53ad11d8000000000000000000000000000000000000000000000000000000008152fd5b90506020813d6020116138b7575b816138a0602093836146e2565b810103126108fa576138b190614d2d565b38613284565b3d9150613893565b60248573ffffffffffffffffffffffffffffffffffffffff611e6385614d4f565b50346102ee5760206003193601126102ee5760043567ffffffffffffffff811161090257806004019161010060031983360301126102ee57806040516139258161468e565b52606482013590608483019361393a85614d4f565b73ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116036141e857602484019177ffffffffffffffff000000000000000000000000000000006139a084614d3a565b60801b16604051907f2cbc26bb000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611c435782916141ae575b506141865767ffffffffffffffff613a3484614d3a565b16613a4c816000526006602052604060002054151590565b1561415a57602073ffffffffffffffffffffffffffffffffffffffff60025416916044604051809481937f83826b2b00000000000000000000000000000000000000000000000000000000835260048301523360248301525afa908115611c43578291614120575b50156140f457613ac383614d3a565b613ad860a487019161310e6131808487614cbb565b156140ea5784959667ffffffffffffffff613af286614d3a565b168084526007602052613b446002604086200173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016988991616116565b6040805173ffffffffffffffffffffffffffffffffffffffff89168152602081018a90527f50f6fbee3ceedce6b7fd7eaef18244487867e6718aec7208187efb6b7908c14c9190a273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081613f24575b50505090613bdb60e4870182614cbb565b81929101604083820312610aa557823567ffffffffffffffff81116108fe5781613c06918501614933565b9260208101359067ffffffffffffffff8211611da957613c27929101614933565b6040517fd5438eae00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613f1957908592918391613eb7575b50613cfa8373ffffffffffffffffffffffffffffffffffffffff613d0c97604051988996879586937fa6208506000000000000000000000000000000000000000000000000000000008552604060048601526044850190614780565b90600319848303016024850152614780565b0393165af18015613eac5783928491613e1d575b5015613df557613d3660209160c4890190614cbb565b908092918101031261284a573503613dcd575067ffffffffffffffff6020946134de85613d8f6044613d887ffc5e3a5bddc11d92c2dc20fae6f7d5eb989f056be35239f7de7e86150609abc097614d3a565b9401614d4f565b6040805173ffffffffffffffffffffffffffffffffffffffff9889168152336020820152979091169087015260608601529116929081906080820190565b807f3f4d60530000000000000000000000000000000000000000000000000000000060049252fd5b6004837f2532cf45000000000000000000000000000000000000000000000000000000008152fd5b9250503d8084843e613e2f81846146e2565b8201606083820312610aa557825190613e4a60208501614d2d565b9360408101519067ffffffffffffffff82116108fa570181601f82011215611da957805191613e7883614723565b90613e8660405192836146e2565b838252602084840101116108fa5790602080613ea5949301910161475d565b9138613d20565b6040513d85823e3d90fd5b9193949250506020813d602011613f11575b81613ed6602093836146e2565b810103126108fe57918491613cfa8373ffffffffffffffffffffffffffffffffffffffff613f07613d0c9897614d0c565b9397505050613c9e565b3d9150613ec9565b6040513d87823e3d90fd5b813b15610aa5579183918693838a8c604051978896879586947f5eff3bf70000000000000000000000000000000000000000000000000000000086528d600487016060905280613f7391615c11565b606488016101009052610164880190613f8b92614dad565b93613f959061487b565b67ffffffffffffffff166084870152613fb06044860161482c565b73ffffffffffffffffffffffffffffffffffffffff1660a487015260c4860152613fd99061482c565b73ffffffffffffffffffffffffffffffffffffffff1660e4850152613ffe908c615c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101048601526140339291614dad565b61404060c483018c615c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c858403016101248601526140759291614dad565b9060e401614083908b615c11565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c848403016101448501526140b89291614dad565b8c602483015282604483015203925af18015611c43576140da575b8080613bca565b816140e4916146e2565b386140d3565b6137849083614cbb565b807f728fe07b000000000000000000000000000000000000000000000000000000006024925233600452fd5b90506020813d602011614152575b8161413b602093836146e2565b810103126109025761414c90614d2d565b38613ab4565b3d915061412e565b602492507fa9902c7e000000000000000000000000000000000000000000000000000000008252600452fd5b807f53ad11d80000000000000000000000000000000000000000000000000000000060049252fd5b90506020813d6020116141e0575b816141c9602093836146e2565b81010312610902576141da90614d2d565b38613a1d565b3d91506141bc565b60248273ffffffffffffffffffffffffffffffffffffffff611e6388614d4f565b50346102ee5760206003193601126102ee576040809167ffffffffffffffff61423061484d565b826020855161423e81614643565b8281520152168152600b60205220815161425781614643565b60206001835493848452015491019081528251918252516020820152f35b50346102ee5760c06003193601126102ee5761428f6147c3565b50614298614864565b6142a06147e6565b506084359161ffff831683036102ee5760a4359067ffffffffffffffff82116102ee5760a063ffffffff8061ffff6142e788886142e03660048b016148ce565b5050614b36565b95926040979194975197885216602087015216604085015216606083015215156080820152f35b50346102ee57806003193601126102ee57602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee5760406003193601126102ee5761436661484d565b6024359182151583036102ee576101406144296143838585614ab3565b6143d960409392935180946fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565b60a08301906fffffffffffffffffffffffffffffffff6080809282815116855263ffffffff6020820151166020860152604081015115156040860152826060820151166060860152015116910152565bf35b50346102ee5760206003193601126102ee576020906144486147c3565b905073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169116146040519015158152f35b50346102ee57806003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ee57806003193601126102ee57506116606040516145036040826146e2565b601a81527f4c6f6d62617264546f6b656e506f6f6c20312e372e302d6465760000000000006020820152604051918291602083526020830190614780565b905034610902576020600319360112610902576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036108c757602092507faff2afbf000000000000000000000000000000000000000000000000000000008114908115614619575b81156145ef575b81156145c5575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386145be565b7f0e64dd2900000000000000000000000000000000000000000000000000000000811491506145b7565b7f3317103100000000000000000000000000000000000000000000000000000000811491506145b0565b6040810190811067ffffffffffffffff82111761465f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761465f57604052565b60e0810190811067ffffffffffffffff82111761465f57604052565b60a0810190811067ffffffffffffffff82111761465f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761465f57604052565b67ffffffffffffffff811161465f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b8381106147705750506000910152565b8181015183820152602001614760565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936147bc8151809281875287808801910161475d565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361284a57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361284a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361284a57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361284a57565b6004359067ffffffffffffffff8216820361284a57565b6024359067ffffffffffffffff8216820361284a57565b359067ffffffffffffffff8216820361284a57565b3590811515820361284a57565b6024359061ffff8216820361284a57565b6044359061ffff8216820361284a57565b359061ffff8216820361284a57565b9181601f8401121561284a5782359167ffffffffffffffff831161284a576020838186019501011161284a57565b92919261490882614723565b9161491660405193846146e2565b82948184528183011161284a578281602093846000960137010152565b9080601f8301121561284a5781602061494e933591016148fc565b90565b90604060031983011261284a5760043567ffffffffffffffff8116810361284a57916024359067ffffffffffffffff821161284a57614992916004016148ce565b9091565b61494e9160206149af8351604084526040840190614780565b920151906020818403910152614780565b9181601f8401121561284a5782359167ffffffffffffffff831161284a576020808501948460051b01011161284a57565b9181601f8401121561284a5782359167ffffffffffffffff831161284a576020808501948460081b01011161284a57565b60405190614a2f826146c6565b60006080838281528260208201528260408201528260608201520152565b90604051614a5a816146c6565b60806001829460ff81546fffffffffffffffffffffffffffffffff8116865263ffffffff81861c16602087015260a01c161515604085015201546fffffffffffffffffffffffffffffffff81166060840152811c910152565b67ffffffffffffffff91614ac5614a22565b50614ace614a22565b50614b025716600052600760205260406000209061494e614af66002614afb614af686614a4d565b61530c565b9401614a4d565b1690816000526003602052614b1d614af66040600020614a4d565b91600052600460205261494e614af66040600020614a4d565b9061ffff8060025460a01c1691169283151592838094614cb3575b614c895767ffffffffffffffff16600052600a60205260406000209160405192614b7a846146aa565b5463ffffffff81168452602084019563ffffffff8260201c168752604085019263ffffffff8360401c168452606086019163ffffffff8460601c168352608087019761ffff8560801c16895260ff60a089019561ffff8160901c16875260a01c1615801560c08a0152614c6e57614c0f575050505063ffffffff808061ffff9351169451169551169351169193929190600190565b819397508092945010614c3e57505063ffffffff808061ffff9351169451169551169351169193929190600190565b7f7911d95b0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b50505050505092505050600090600090600090600090600090565b7f98d50fd70000000000000000000000000000000000000000000000000000000060005260046000fd5b508215614b51565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561284a570180359067ffffffffffffffff821161284a5760200191813603831361284a57565b519073ffffffffffffffffffffffffffffffffffffffff8216820361284a57565b5190811515820361284a57565b3567ffffffffffffffff8116810361284a5790565b3573ffffffffffffffffffffffffffffffffffffffff8116810361284a5790565b9067ffffffffffffffff61494e92166000526007602052600560406000200190602081519101209060019160005201602052604060002054151590565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60409067ffffffffffffffff61494e95931681528160208201520191614dad565b67ffffffffffffffff811161465f5760051b60200190565b95939192949073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016958615614fda57614ede9467ffffffffffffffff61ffff9373ffffffffffffffffffffffffffffffffffffffff6040519b7f89720a62000000000000000000000000000000000000000000000000000000008d521660048c01521660248a0152604489015216606487015260c0608487015260c4860191614dad565b916002821015614fab578380600094819460a483015203915afa908115614f9f57600091614f0a575090565b3d8083833e614f1981836146e2565b8101906020818303126108c75780519067ffffffffffffffff8211610aa5570181601f820112156108c757805190614f5082614e0d565b93614f5e60405195866146e2565b82855260208086019360051b8301019384116102ee5750602001905b828210614f875750505090565b60208091614f9484614d0c565b815201910190614f7a565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b5050505050505050604051614ff06020826146e2565b60008152600036813790565b6040519061500982614643565b60606020838281520152565b80518210156150295760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600182811c921680156150a1575b602083101461507257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691615067565b90604051918260008254926150bf84615058565b808452936001811690811561512d57506001146150e6575b506150e4925003836146e2565b565b90506000929192526020600020906000915b8183106151115750509060206150e492820101386150d7565b60209193508060019154838589010152019101909184926150f8565b602093506150e49592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386150d7565b67ffffffffffffffff16600052600760205261494e60046040600020016150ab565b91908110156150295760051b0190565b91908110156150295760081b0190565b35801515810361284a5790565b3561ffff8116810361284a5790565b3563ffffffff8116810361284a5790565b359063ffffffff8216820361284a57565b35906fffffffffffffffffffffffffffffffff8216820361284a57565b919082606091031261284a576040516060810181811067ffffffffffffffff82111761465f57604052604061525d81839561524481614890565b8552615252602082016151ed565b6020860152016151ed565b910152565b6fffffffffffffffffffffffffffffffff6152a06040809361528381614890565b1515865283615294602083016151ed565b166020870152016151ed565b16910152565b8181106152b1575050565b600081556001016152a6565b818102929181159184041417156152d057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116152d057565b615314614a22565b506fffffffffffffffffffffffffffffffff6060820151166fffffffffffffffffffffffffffffffff8083511691615371602085019361536b61535e63ffffffff875116426152ff565b85608089015116906152bd565b90615c04565b8082101561538a57505b16825263ffffffff4216905290565b905061537b565b80518015615401576020036153c357805160208281019183018390031261284a57519060ff82116153c3575060ff1690565b611fe1906040519182917f953576f7000000000000000000000000000000000000000000000000000000008352602060048401526024830190614780565b50507f000000000000000000000000000000000000000000000000000000000000000090565b9060ff8091169116039060ff82116152d057565b60ff16604d81116152d057600a0a90565b8115615456570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b907f00000000000000000000000000000000000000000000000000000000000000009060ff82169060ff81169282841461558b5782841161556157906154ca91615427565b91604d60ff8416118015615528575b6154f2575050906154ec61494e9261543b565b906152bd565b9091507fa9cb113d0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b506155328361543b565b8015615456577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484116154d9565b61556a91615427565b91604d60ff8416116154f25750509061558561494e9261543b565b9061544c565b5050505090565b73ffffffffffffffffffffffffffffffffffffffff6001541633036155b357565b7f2b5c74de0000000000000000000000000000000000000000000000000000000060005260046000fd5b9080511561581d5767ffffffffffffffff815160208301209216918260005260076020526156128160056040600020016160c1565b156157d95760005260086020526040600020815167ffffffffffffffff811161465f5761563f8254615058565b601f81116157a7575b506020601f82116001146156e157916156bb827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea95936156d1956000916156d6575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055604051918291602083526020830190614780565b0390a2565b90508401513861568a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169083600052806000209160005b81811061578f5750926156d19492600192827f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea989610615758575b5050811b01905561164c565b8501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388061574c565b9192602060018192868a015181550194019201615711565b6157d390836000526020600020601f840160051c8101916020851061083157601f0160051c01906152a6565b38615648565b5090611fe16040519283927f393b8ad20000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190614780565b7f14c880ca0000000000000000000000000000000000000000000000000000000060005260046000fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff938416602483015260448083019590955293815261591d9290916158ac6064846146e2565b166000806040958651946158c088876146e2565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af13d156159cc573d9161590183614723565b9261590e875194856146e2565b83523d6000602085013e6163d2565b80518061592957505050565b816020918101031261284a5760206159419101614d2d565b156159495750565b608490517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6060916163d2565b815191929115615b56576fffffffffffffffffffffffffffffffff6040840151166fffffffffffffffffffffffffffffffff60208501511610615af3576150e491925b805182547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690151560a01b74ff0000000000000000000000000000000000000000161782556020810151825460409290920151608090811b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691821760018501557fffffffffffffffffffffffff0000000000000000000000000000000000000000909216174290911b73ffffffff0000000000000000000000000000000016179055565b606483615b54604051917f8020d12400000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565bfd5b6fffffffffffffffffffffffffffffffff60408401511615801590615be5575b615b84576150e49192615a17565b606483615b54604051917fd68af9cc00000000000000000000000000000000000000000000000000000000835260048301906fffffffffffffffffffffffffffffffff60408092805115158552826020820151166020860152015116910152565b506fffffffffffffffffffffffffffffffff6020840151161515615b76565b919082018092116152d057565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561284a57016020813591019167ffffffffffffffff821161284a57813603831361284a57565b906040519182815491828252602082019060005260206000209260005b818110615c935750506150e4925003836146e2565b8454835260019485019487945060209093019201615c7e565b80548210156150295760005260206000200190600090565b6000818152600660205260409020548015615e53577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116152d057600554907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116152d057818103615de4575b5050506005548015615db5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01615d72816005615cac565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055600555600052600660205260006040812055600190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b615e3b615df5615e06936005615cac565b90549060031b1c9283926005615cac565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b90556000526006602052604060002055388080615d39565b5050600090565b9060018201918160005282602052604060002054801515600014615f85577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116152d0578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116152d057818103615f4e575b50505080548015615db5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190615f0f8282615cac565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b191690555560005260205260006040812055600190565b615f6e615f5e615e069386615cac565b90549060031b1c92839286615cac565b905560005283602052604060002055388080615ed7565b50505050600090565b9061ffff9067ffffffffffffffff615fa860208501614d3a565b16600052600a60205260406000208260405191615fc4836146aa565b549263ffffffff8416835263ffffffff8460201c16602084015263ffffffff8460401c16604084015263ffffffff8460601c166060840152818460801c169283608082015260c060ff848760901c16968760a085015260a01c16151591015216151560001461605a57505b1680156160525761271061604b606061494e94013592836152bd565b04906152ff565b506060013590565b905061602f565b806000526006602052604060002054156000146160bb576005546801000000000000000081101561465f576160a2615e068260018594016005556005615cac565b9055600554906000526006602052604060002055600190565b50600090565b6000828152600182016020526040902054615e53578054906801000000000000000082101561465f57826160ff615e06846001809601855584615cac565b905580549260005201602052604060002055600190565b9182549060ff8260a01c161580156163ca575b6163c4576fffffffffffffffffffffffffffffffff8216916001850190815461616e63ffffffff6fffffffffffffffffffffffffffffffff83169360801c16426152ff565b9081616326575b50508481106162da57508383106161cf5750506161a46fffffffffffffffffffffffffffffffff9283926152ff565b16167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b9190915460801c92831561626e57816161e7916152ff565b927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908082116152d05761623561623a9273ffffffffffffffffffffffffffffffffffffffff96615c04565b61544c565b7fd0c8d23a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff83837fd0c8d23a000000000000000000000000000000000000000000000000000000006000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004526024521660445260646000fd5b828573ffffffffffffffffffffffffffffffffffffffff927f1a76572a000000000000000000000000000000000000000000000000000000006000526004526024521660445260646000fd5b82869293961161639a576163419261536b9160801c906152bd565b808410156163955750825b85547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff164260801b73ffffffff0000000000000000000000000000000016178655923880616175565b61634c565b7f9725942a0000000000000000000000000000000000000000000000000000000060005260046000fd5b50505050565b508215616129565b9192901561644d57508151156163e6575090565b3b156163ef5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156164605750805190602001fd5b611fe1906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061478056fea164736f6c634300081a000a", } var LombardTokenPoolABI = LombardTokenPoolMetaData.ABI var LombardTokenPoolBin = LombardTokenPoolMetaData.Bin -func DeployLombardTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, verifier common.Address, advancedPoolHooks common.Address, rmnProxy common.Address, router common.Address, fallbackDecimals uint8) (common.Address, *types.Transaction, *LombardTokenPool, error) { +func DeployLombardTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, verifier common.Address, bridge common.Address, adapter common.Address, advancedPoolHooks common.Address, rmnProxy common.Address, router common.Address, fallbackDecimals uint8) (common.Address, *types.Transaction, *LombardTokenPool, error) { parsed, err := LombardTokenPoolMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -118,7 +123,7 @@ func DeployLombardTokenPool(auth *bind.TransactOpts, backend bind.ContractBacken return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LombardTokenPoolBin), backend, token, verifier, advancedPoolHooks, rmnProxy, router, fallbackDecimals) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LombardTokenPoolBin), backend, token, verifier, bridge, adapter, advancedPoolHooks, rmnProxy, router, fallbackDecimals) if err != nil { return common.Address{}, nil, nil, err } @@ -334,6 +339,37 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) GetFee(arg0 common.Addre return _LombardTokenPool.Contract.GetFee(&_LombardTokenPool.CallOpts, arg0, destChainSelector, arg2, arg3, blockConfirmationRequested, arg5) } +func (_LombardTokenPool *LombardTokenPoolCaller) GetLombardConfig(opts *bind.CallOpts) (GetLombardConfig, + + error) { + var out []interface{} + err := _LombardTokenPool.contract.Call(opts, &out, "getLombardConfig") + + outstruct := new(GetLombardConfig) + if err != nil { + return *outstruct, err + } + + outstruct.VerifierResolver = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Bridge = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + outstruct.TokenAdapter = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +func (_LombardTokenPool *LombardTokenPoolSession) GetLombardConfig() (GetLombardConfig, + + error) { + return _LombardTokenPool.Contract.GetLombardConfig(&_LombardTokenPool.CallOpts) +} + +func (_LombardTokenPool *LombardTokenPoolCallerSession) GetLombardConfig() (GetLombardConfig, + + error) { + return _LombardTokenPool.Contract.GetLombardConfig(&_LombardTokenPool.CallOpts) +} + func (_LombardTokenPool *LombardTokenPoolCaller) GetMinBlockConfirmation(opts *bind.CallOpts) (uint16, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "getMinBlockConfirmation") @@ -356,6 +392,28 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) GetMinBlockConfirmation( return _LombardTokenPool.Contract.GetMinBlockConfirmation(&_LombardTokenPool.CallOpts) } +func (_LombardTokenPool *LombardTokenPoolCaller) GetPath(opts *bind.CallOpts, remoteChainSelector uint64) (LombardTokenPoolPath, error) { + var out []interface{} + err := _LombardTokenPool.contract.Call(opts, &out, "getPath", remoteChainSelector) + + if err != nil { + return *new(LombardTokenPoolPath), err + } + + out0 := *abi.ConvertType(out[0], new(LombardTokenPoolPath)).(*LombardTokenPoolPath) + + return out0, err + +} + +func (_LombardTokenPool *LombardTokenPoolSession) GetPath(remoteChainSelector uint64) (LombardTokenPoolPath, error) { + return _LombardTokenPool.Contract.GetPath(&_LombardTokenPool.CallOpts, remoteChainSelector) +} + +func (_LombardTokenPool *LombardTokenPoolCallerSession) GetPath(remoteChainSelector uint64) (LombardTokenPoolPath, error) { + return _LombardTokenPool.Contract.GetPath(&_LombardTokenPool.CallOpts, remoteChainSelector) +} + func (_LombardTokenPool *LombardTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) @@ -532,9 +590,9 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) GetTokenTransferFeeConfi return _LombardTokenPool.Contract.GetTokenTransferFeeConfig(&_LombardTokenPool.CallOpts, arg0, destChainSelector, arg2, arg3) } -func (_LombardTokenPool *LombardTokenPoolCaller) GetVerifierResolver(opts *bind.CallOpts) (common.Address, error) { +func (_LombardTokenPool *LombardTokenPoolCaller) IBridge(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _LombardTokenPool.contract.Call(opts, &out, "getVerifierResolver") + err := _LombardTokenPool.contract.Call(opts, &out, "i_bridge") if err != nil { return *new(common.Address), err @@ -546,12 +604,12 @@ func (_LombardTokenPool *LombardTokenPoolCaller) GetVerifierResolver(opts *bind. } -func (_LombardTokenPool *LombardTokenPoolSession) GetVerifierResolver() (common.Address, error) { - return _LombardTokenPool.Contract.GetVerifierResolver(&_LombardTokenPool.CallOpts) +func (_LombardTokenPool *LombardTokenPoolSession) IBridge() (common.Address, error) { + return _LombardTokenPool.Contract.IBridge(&_LombardTokenPool.CallOpts) } -func (_LombardTokenPool *LombardTokenPoolCallerSession) GetVerifierResolver() (common.Address, error) { - return _LombardTokenPool.Contract.GetVerifierResolver(&_LombardTokenPool.CallOpts) +func (_LombardTokenPool *LombardTokenPoolCallerSession) IBridge() (common.Address, error) { + return _LombardTokenPool.Contract.IBridge(&_LombardTokenPool.CallOpts) } func (_LombardTokenPool *LombardTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { @@ -620,28 +678,6 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) IsSupportedToken(token c return _LombardTokenPool.Contract.IsSupportedToken(&_LombardTokenPool.CallOpts, token) } -func (_LombardTokenPool *LombardTokenPoolCaller) LockOrBurn(opts *bind.CallOpts, arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) { - var out []interface{} - err := _LombardTokenPool.contract.Call(opts, &out, "lockOrBurn", arg0) - - if err != nil { - return *new(PoolLockOrBurnOutV1), err - } - - out0 := *abi.ConvertType(out[0], new(PoolLockOrBurnOutV1)).(*PoolLockOrBurnOutV1) - - return out0, err - -} - -func (_LombardTokenPool *LombardTokenPoolSession) LockOrBurn(arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) { - return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.CallOpts, arg0) -} - -func (_LombardTokenPool *LombardTokenPoolCallerSession) LockOrBurn(arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) { - return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.CallOpts, arg0) -} - func (_LombardTokenPool *LombardTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "owner") @@ -664,28 +700,6 @@ func (_LombardTokenPool *LombardTokenPoolCallerSession) Owner() (common.Address, return _LombardTokenPool.Contract.Owner(&_LombardTokenPool.CallOpts) } -func (_LombardTokenPool *LombardTokenPoolCaller) ReleaseOrMint(opts *bind.CallOpts, arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) { - var out []interface{} - err := _LombardTokenPool.contract.Call(opts, &out, "releaseOrMint", arg0) - - if err != nil { - return *new(PoolReleaseOrMintOutV1), err - } - - out0 := *abi.ConvertType(out[0], new(PoolReleaseOrMintOutV1)).(*PoolReleaseOrMintOutV1) - - return out0, err - -} - -func (_LombardTokenPool *LombardTokenPoolSession) ReleaseOrMint(arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) { - return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.CallOpts, arg0) -} - -func (_LombardTokenPool *LombardTokenPoolCallerSession) ReleaseOrMint(arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) { - return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.CallOpts, arg0) -} - func (_LombardTokenPool *LombardTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { var out []interface{} err := _LombardTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) @@ -778,6 +792,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) ApplyTokenTransferFe return _LombardTokenPool.Contract.ApplyTokenTransferFeeConfigUpdates(&_LombardTokenPool.TransactOpts, tokenTransferFeeConfigArgs, disableTokenTransferFeeConfigs) } +func (_LombardTokenPool *LombardTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_LombardTokenPool *LombardTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.LockOrBurn(&_LombardTokenPool.TransactOpts, lockOrBurnIn) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) LockOrBurn0(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1, blockConfirmationRequested uint16, tokenArgs []byte) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "lockOrBurn0", lockOrBurnIn, blockConfirmationRequested, tokenArgs) } @@ -790,6 +816,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) LockOrBurn0(lockOrBu return _LombardTokenPool.Contract.LockOrBurn0(&_LombardTokenPool.TransactOpts, lockOrBurnIn, blockConfirmationRequested, tokenArgs) } +func (_LombardTokenPool *LombardTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_LombardTokenPool *LombardTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LombardTokenPool.Contract.ReleaseOrMint(&_LombardTokenPool.TransactOpts, releaseOrMintIn) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) ReleaseOrMint0(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1, blockConfirmationRequested uint16) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "releaseOrMint0", releaseOrMintIn, blockConfirmationRequested) } @@ -802,6 +840,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) ReleaseOrMint0(relea return _LombardTokenPool.Contract.ReleaseOrMint0(&_LombardTokenPool.TransactOpts, releaseOrMintIn, blockConfirmationRequested) } +func (_LombardTokenPool *LombardTokenPoolTransactor) RemovePath(opts *bind.TransactOpts, remoteChainSelector uint64) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "removePath", remoteChainSelector) +} + +func (_LombardTokenPool *LombardTokenPoolSession) RemovePath(remoteChainSelector uint64) (*types.Transaction, error) { + return _LombardTokenPool.Contract.RemovePath(&_LombardTokenPool.TransactOpts, remoteChainSelector) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) RemovePath(remoteChainSelector uint64) (*types.Transaction, error) { + return _LombardTokenPool.Contract.RemovePath(&_LombardTokenPool.TransactOpts, remoteChainSelector) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) } @@ -838,6 +888,18 @@ func (_LombardTokenPool *LombardTokenPoolTransactorSession) SetMinBlockConfirmat return _LombardTokenPool.Contract.SetMinBlockConfirmation(&_LombardTokenPool.TransactOpts, minBlockConfirmation) } +func (_LombardTokenPool *LombardTokenPoolTransactor) SetPath(opts *bind.TransactOpts, remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) { + return _LombardTokenPool.contract.Transact(opts, "setPath", remoteChainSelector, lChainId, allowedCaller) +} + +func (_LombardTokenPool *LombardTokenPoolSession) SetPath(remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) { + return _LombardTokenPool.Contract.SetPath(&_LombardTokenPool.TransactOpts, remoteChainSelector, lChainId, allowedCaller) +} + +func (_LombardTokenPool *LombardTokenPoolTransactorSession) SetPath(remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) { + return _LombardTokenPool.Contract.SetPath(&_LombardTokenPool.TransactOpts, remoteChainSelector, lChainId, allowedCaller) +} + func (_LombardTokenPool *LombardTokenPoolTransactor) SetRateLimitConfig(opts *bind.TransactOpts, rateLimitConfigArgs []TokenPoolRateLimitConfigArgs) (*types.Transaction, error) { return _LombardTokenPool.contract.Transact(opts, "setRateLimitConfig", rateLimitConfigArgs) } @@ -1883,8 +1945,8 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) ParseLockedOrBurned(log types return event, nil } -type LombardTokenPoolLombardVerifierSetIterator struct { - Event *LombardTokenPoolLombardVerifierSet +type LombardTokenPoolLombardConfigurationSetIterator struct { + Event *LombardTokenPoolLombardConfigurationSet contract *bind.BoundContract event string @@ -1895,7 +1957,7 @@ type LombardTokenPoolLombardVerifierSetIterator struct { fail error } -func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { +func (it *LombardTokenPoolLombardConfigurationSetIterator) Next() bool { if it.fail != nil { return false @@ -1904,7 +1966,7 @@ func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(LombardTokenPoolLombardVerifierSet) + it.Event = new(LombardTokenPoolLombardConfigurationSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1919,7 +1981,7 @@ func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { select { case log := <-it.logs: - it.Event = new(LombardTokenPoolLombardVerifierSet) + it.Event = new(LombardTokenPoolLombardConfigurationSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -1934,42 +1996,60 @@ func (it *LombardTokenPoolLombardVerifierSetIterator) Next() bool { } } -func (it *LombardTokenPoolLombardVerifierSetIterator) Error() error { +func (it *LombardTokenPoolLombardConfigurationSetIterator) Error() error { return it.fail } -func (it *LombardTokenPoolLombardVerifierSetIterator) Close() error { +func (it *LombardTokenPoolLombardConfigurationSetIterator) Close() error { it.sub.Unsubscribe() return nil } -type LombardTokenPoolLombardVerifierSet struct { - Verifier common.Address - Raw types.Log +type LombardTokenPoolLombardConfigurationSet struct { + Verifier common.Address + Bridge common.Address + TokenAdapter common.Address + Raw types.Log } -func (_LombardTokenPool *LombardTokenPoolFilterer) FilterLombardVerifierSet(opts *bind.FilterOpts, verifier []common.Address) (*LombardTokenPoolLombardVerifierSetIterator, error) { +func (_LombardTokenPool *LombardTokenPoolFilterer) FilterLombardConfigurationSet(opts *bind.FilterOpts, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (*LombardTokenPoolLombardConfigurationSetIterator, error) { var verifierRule []interface{} for _, verifierItem := range verifier { verifierRule = append(verifierRule, verifierItem) } + var bridgeRule []interface{} + for _, bridgeItem := range bridge { + bridgeRule = append(bridgeRule, bridgeItem) + } + var tokenAdapterRule []interface{} + for _, tokenAdapterItem := range tokenAdapter { + tokenAdapterRule = append(tokenAdapterRule, tokenAdapterItem) + } - logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "LombardVerifierSet", verifierRule) + logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "LombardConfigurationSet", verifierRule, bridgeRule, tokenAdapterRule) if err != nil { return nil, err } - return &LombardTokenPoolLombardVerifierSetIterator{contract: _LombardTokenPool.contract, event: "LombardVerifierSet", logs: logs, sub: sub}, nil + return &LombardTokenPoolLombardConfigurationSetIterator{contract: _LombardTokenPool.contract, event: "LombardConfigurationSet", logs: logs, sub: sub}, nil } -func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardVerifierSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardVerifierSet, verifier []common.Address) (event.Subscription, error) { +func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardConfigurationSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardConfigurationSet, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (event.Subscription, error) { var verifierRule []interface{} for _, verifierItem := range verifier { verifierRule = append(verifierRule, verifierItem) } + var bridgeRule []interface{} + for _, bridgeItem := range bridge { + bridgeRule = append(bridgeRule, bridgeItem) + } + var tokenAdapterRule []interface{} + for _, tokenAdapterItem := range tokenAdapter { + tokenAdapterRule = append(tokenAdapterRule, tokenAdapterItem) + } - logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "LombardVerifierSet", verifierRule) + logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "LombardConfigurationSet", verifierRule, bridgeRule, tokenAdapterRule) if err != nil { return nil, err } @@ -1979,8 +2059,8 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardVerifierSet(opts select { case log := <-logs: - event := new(LombardTokenPoolLombardVerifierSet) - if err := _LombardTokenPool.contract.UnpackLog(event, "LombardVerifierSet", log); err != nil { + event := new(LombardTokenPoolLombardConfigurationSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "LombardConfigurationSet", log); err != nil { return err } event.Raw = log @@ -2001,9 +2081,9 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) WatchLombardVerifierSet(opts }), nil } -func (_LombardTokenPool *LombardTokenPoolFilterer) ParseLombardVerifierSet(log types.Log) (*LombardTokenPoolLombardVerifierSet, error) { - event := new(LombardTokenPoolLombardVerifierSet) - if err := _LombardTokenPool.contract.UnpackLog(event, "LombardVerifierSet", log); err != nil { +func (_LombardTokenPool *LombardTokenPoolFilterer) ParseLombardConfigurationSet(log types.Log) (*LombardTokenPoolLombardConfigurationSet, error) { + event := new(LombardTokenPoolLombardConfigurationSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "LombardConfigurationSet", log); err != nil { return nil, err } event.Raw = log @@ -2528,6 +2608,280 @@ func (_LombardTokenPool *LombardTokenPoolFilterer) ParseOwnershipTransferred(log return event, nil } +type LombardTokenPoolPathRemovedIterator struct { + Event *LombardTokenPoolPathRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LombardTokenPoolPathRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LombardTokenPoolPathRemoved) + 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(LombardTokenPoolPathRemoved) + 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 *LombardTokenPoolPathRemovedIterator) Error() error { + return it.fail +} + +func (it *LombardTokenPoolPathRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LombardTokenPoolPathRemoved struct { + RemoteChainSelector uint64 + LChainId [32]byte + AllowedCaller [32]byte + Raw types.Log +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) FilterPathRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "PathRemoved", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return &LombardTokenPoolPathRemovedIterator{contract: _LombardTokenPool.contract, event: "PathRemoved", logs: logs, sub: sub}, nil +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) WatchPathRemoved(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathRemoved, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "PathRemoved", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LombardTokenPoolPathRemoved) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathRemoved", 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 (_LombardTokenPool *LombardTokenPoolFilterer) ParsePathRemoved(log types.Log) (*LombardTokenPoolPathRemoved, error) { + event := new(LombardTokenPoolPathRemoved) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LombardTokenPoolPathSetIterator struct { + Event *LombardTokenPoolPathSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LombardTokenPoolPathSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LombardTokenPoolPathSet) + 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(LombardTokenPoolPathSet) + 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 *LombardTokenPoolPathSetIterator) Error() error { + return it.fail +} + +func (it *LombardTokenPoolPathSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LombardTokenPoolPathSet struct { + RemoteChainSelector uint64 + LChainId [32]byte + AllowedCaller [32]byte + Raw types.Log +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) FilterPathSet(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathSetIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.FilterLogs(opts, "PathSet", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return &LombardTokenPoolPathSetIterator{contract: _LombardTokenPool.contract, event: "PathSet", logs: logs, sub: sub}, nil +} + +func (_LombardTokenPool *LombardTokenPoolFilterer) WatchPathSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathSet, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + var lChainIdRule []interface{} + for _, lChainIdItem := range lChainId { + lChainIdRule = append(lChainIdRule, lChainIdItem) + } + + logs, sub, err := _LombardTokenPool.contract.WatchLogs(opts, "PathSet", remoteChainSelectorRule, lChainIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LombardTokenPoolPathSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathSet", 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 (_LombardTokenPool *LombardTokenPoolFilterer) ParsePathSet(log types.Log) (*LombardTokenPoolPathSet, error) { + event := new(LombardTokenPoolPathSet) + if err := _LombardTokenPool.contract.UnpackLog(event, "PathSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + type LombardTokenPoolRateLimitConfiguredIterator struct { Event *LombardTokenPoolRateLimitConfigured @@ -3315,6 +3669,11 @@ type GetFee struct { TokenFeeBps uint16 IsEnabled bool } +type GetLombardConfig struct { + VerifierResolver common.Address + Bridge common.Address + TokenAdapter common.Address +} func (LombardTokenPoolChainAdded) Topic() common.Hash { return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") @@ -3348,8 +3707,8 @@ func (LombardTokenPoolLockedOrBurned) Topic() common.Hash { return common.HexToHash("0xf33bc26b4413b0e7f19f1ea739fdf99098c0061f1f87d954b11f5293fad9ae10") } -func (LombardTokenPoolLombardVerifierSet) Topic() common.Hash { - return common.HexToHash("0xa817b8930bcb4b25cbd026589d9815aceaf8ec0882ebf9bdf32f1e22f69ff745") +func (LombardTokenPoolLombardConfigurationSet) Topic() common.Hash { + return common.HexToHash("0x01d5dd7f15328f4241da3a1d9c7b310ae9ac14e8ca441203a7b6f71c7da0c49d") } func (LombardTokenPoolMinBlockConfirmationSet) Topic() common.Hash { @@ -3368,6 +3727,14 @@ func (LombardTokenPoolOwnershipTransferred) Topic() common.Hash { return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") } +func (LombardTokenPoolPathRemoved) Topic() common.Hash { + return common.HexToHash("0x8a8e4c676433747219d2fee4ea128776522bb0177478e1e0a375e880948ed37b") +} + +func (LombardTokenPoolPathSet) Topic() common.Hash { + return common.HexToHash("0x83eda38165c92f401f97217d5ead82ef163d0b716c3979eff4670361bc2dc0c9") +} + func (LombardTokenPoolRateLimitConfigured) Topic() common.Hash { return common.HexToHash("0x41f7c8f7cfdad9350aa495e6c54cbbf750a07ab38a9098aed1256e30dd1682bb") } @@ -3409,8 +3776,14 @@ type LombardTokenPoolInterface interface { error) + GetLombardConfig(opts *bind.CallOpts) (GetLombardConfig, + + error) + GetMinBlockConfirmation(opts *bind.CallOpts) (uint16, error) + GetPath(opts *bind.CallOpts, remoteChainSelector uint64) (LombardTokenPoolPath, error) + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) @@ -3427,7 +3800,7 @@ type LombardTokenPoolInterface interface { GetTokenTransferFeeConfig(opts *bind.CallOpts, arg0 common.Address, destChainSelector uint64, arg2 uint16, arg3 []byte) (IPoolV2TokenTransferFeeConfig, error) - GetVerifierResolver(opts *bind.CallOpts) (common.Address, error) + IBridge(opts *bind.CallOpts) (common.Address, error) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) @@ -3435,12 +3808,8 @@ type LombardTokenPoolInterface interface { IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) - LockOrBurn(opts *bind.CallOpts, arg0 PoolLockOrBurnInV1) (PoolLockOrBurnOutV1, error) - Owner(opts *bind.CallOpts) (common.Address, error) - ReleaseOrMint(opts *bind.CallOpts, arg0 PoolReleaseOrMintInV1) (PoolReleaseOrMintOutV1, error) - SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) TypeAndVersion(opts *bind.CallOpts) (string, error) @@ -3453,16 +3822,24 @@ type LombardTokenPoolInterface interface { ApplyTokenTransferFeeConfigUpdates(opts *bind.TransactOpts, tokenTransferFeeConfigArgs []TokenPoolTokenTransferFeeConfigArgs, disableTokenTransferFeeConfigs []uint64) (*types.Transaction, error) + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + LockOrBurn0(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1, blockConfirmationRequested uint16, tokenArgs []byte) (*types.Transaction, error) + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + ReleaseOrMint0(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1, blockConfirmationRequested uint16) (*types.Transaction, error) + RemovePath(opts *bind.TransactOpts, remoteChainSelector uint64) (*types.Transaction, error) + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) SetDynamicConfig(opts *bind.TransactOpts, router common.Address, rateLimitAdmin common.Address) (*types.Transaction, error) SetMinBlockConfirmation(opts *bind.TransactOpts, minBlockConfirmation uint16) (*types.Transaction, error) + SetPath(opts *bind.TransactOpts, remoteChainSelector uint64, lChainId [32]byte, allowedCaller []byte) (*types.Transaction, error) + SetRateLimitConfig(opts *bind.TransactOpts, rateLimitConfigArgs []TokenPoolRateLimitConfigArgs) (*types.Transaction, error) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) @@ -3517,11 +3894,11 @@ type LombardTokenPoolInterface interface { ParseLockedOrBurned(log types.Log) (*LombardTokenPoolLockedOrBurned, error) - FilterLombardVerifierSet(opts *bind.FilterOpts, verifier []common.Address) (*LombardTokenPoolLombardVerifierSetIterator, error) + FilterLombardConfigurationSet(opts *bind.FilterOpts, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (*LombardTokenPoolLombardConfigurationSetIterator, error) - WatchLombardVerifierSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardVerifierSet, verifier []common.Address) (event.Subscription, error) + WatchLombardConfigurationSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolLombardConfigurationSet, verifier []common.Address, bridge []common.Address, tokenAdapter []common.Address) (event.Subscription, error) - ParseLombardVerifierSet(log types.Log) (*LombardTokenPoolLombardVerifierSet, error) + ParseLombardConfigurationSet(log types.Log) (*LombardTokenPoolLombardConfigurationSet, error) FilterMinBlockConfirmationSet(opts *bind.FilterOpts) (*LombardTokenPoolMinBlockConfirmationSetIterator, error) @@ -3547,6 +3924,18 @@ type LombardTokenPoolInterface interface { ParseOwnershipTransferred(log types.Log) (*LombardTokenPoolOwnershipTransferred, error) + FilterPathRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathRemovedIterator, error) + + WatchPathRemoved(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathRemoved, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) + + ParsePathRemoved(log types.Log) (*LombardTokenPoolPathRemoved, error) + + FilterPathSet(opts *bind.FilterOpts, remoteChainSelector []uint64, lChainId [][32]byte) (*LombardTokenPoolPathSetIterator, error) + + WatchPathSet(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolPathSet, remoteChainSelector []uint64, lChainId [][32]byte) (event.Subscription, error) + + ParsePathSet(log types.Log) (*LombardTokenPoolPathSet, error) + FilterRateLimitConfigured(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LombardTokenPoolRateLimitConfiguredIterator, error) WatchRateLimitConfigured(opts *bind.WatchOpts, sink chan<- *LombardTokenPoolRateLimitConfigured, remoteChainSelector []uint64) (event.Subscription, error) diff --git a/chains/evm/.gas-snapshot b/chains/evm/.gas-snapshot index 3577a3c7af..7cc5ccf2c4 100644 --- a/chains/evm/.gas-snapshot +++ b/chains/evm/.gas-snapshot @@ -262,11 +262,19 @@ LockReleaseTokenPool_releaseOrMint:test_releaseOrMintV2() (gas: 246087) LockReleaseTokenPool_setRebalancer:test_SetRebalancer() (gas: 21887) LockReleaseTokenPool_supportsInterface:test_SupportsInterface() (gas: 10100) LockReleaseTokenPool_transferLiquidity:test_transferLiquidity() (gas: 97430) -LombardTokenPool_constructor:test_constructor() (gas: 3997157) -LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 92061) -LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12070) -LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14385) -LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 247116) +LombardTokenPool_constructor:test_constructor() (gas: 4566065) +LombardTokenPool_constructor:test_constructor_RevertsWhen_InvalidBridgeVersion() (gas: 368410) +LombardTokenPool_constructor:test_constructor_RevertsWhen_ZeroBridge() (gas: 95359) +LombardTokenPool_constructor:test_constructor_ZeroVerifierNotAllowed() (gas: 98553) +LombardTokenPool_getTokenDecimals:test_getTokenDecimals_FallsBackOnRevert() (gas: 12048) +LombardTokenPool_getTokenDecimals:test_getTokenDecimals_UsesTokenDecimals() (gas: 14363) +LombardTokenPool_lockOrBurn:test_lockOrBurn_ForwardsToVerifier() (gas: 248886) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1() (gas: 317549) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V1_UsesAdapterWhenConfigured() (gas: 5236650) +LombardTokenPool_lockOrBurn:test_lockOrBurn_V2_ForwardsToVerifier() (gas: 249113) +LombardTokenPool_releaseOrMint:test_releaseOrMint_V1() (gas: 492653) +LombardTokenPool_removePath:test_removePath_RemovesConfig() (gas: 54603) +LombardTokenPool_setPath:test_setPath() (gas: 69388) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_EmptyFields() (gas: 46889) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_MaxLengthFields() (gas: 436236) MessageV1Codec__decodeMessageV1:test__decodeMessageV1_WithData() (gas: 57857) diff --git a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 937f5b5b13..27bd0a3731 100644 --- a/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/chains/evm/gobindings/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -21,7 +21,7 @@ hybrid_lock_release_usdc_token_pool: ../solc/ccip/HybridLockReleaseUSDCTokenPool hyper_liquid_compatible_erc20: ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.abi.json ../solc/ccip/HyperLiquidCompatibleERC20/HyperLiquidCompatibleERC20.sol/HyperLiquidCompatibleERC20.bin 1b825f6c2f7ba630ca0dbacb241c6a8cb16a5aa62cc152f5fefe40166c3d96f6 lock_release_token_pool: ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.abi.json ../solc/ccip/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.bin f2e39d422915bc08da0267b107a7d7069e689e885900f3c9de76de770406caad log_message_data_receiver: ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.abi.json ../solc/ccip/LogMessageDataReceiver/LogMessageDataReceiver.sol/LogMessageDataReceiver.bin 6fe60e48711884eae82dd95cabb1c66a5644336719fa1219df1ceceec11e6bce -lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin 4bcf0226e2e2f42760f33cd6a54467ab9cc22bd1acb9bca98d77abcd105cdcdb +lombard_token_pool: ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.abi.json ../solc/ccip/LombardTokenPool/LombardTokenPool.sol/LombardTokenPool.bin a2644bb3c4cd3c270aea4349867cd447762ad1cf4f2d7bf17739e4102f053451 maybe_revert_message_receiver: ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.abi.json ../solc/ccip/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.bin ee264f67a2356cc4eebe839a5a88367cbcdc27a7520cca56263319e9afe97a1a message_hasher: ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.abi.json ../solc/ccip/MessageHasher/MessageHasher.sol/MessageHasher.bin cb3448514ff88dd019316135cf6c10f6b0d6afcb8ded227884c910efe4274ba1 mock_lbtc_token_pool: ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.abi.json ../solc/ccip/MockE2ELBTCTokenPool/MockE2ELBTCTokenPool.sol/MockE2ELBTCTokenPool.bin 2facb0a1f08881184aa28756e2218e37084f321cf7947b30693fe35d204b88d8