From 12f8ad1b3ce71f8b1bbb56630cbcae9d2b600ac8 Mon Sep 17 00:00:00 2001 From: Matt Yang Date: Thu, 21 Sep 2023 17:38:35 -0400 Subject: [PATCH] address comments --- contracts/src/v0.8/ccip/libraries/Internal.sol | 2 +- .../ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go | 2 +- .../evm_2_evm_offramp_helper/evm_2_evm_offramp_helper.go | 2 +- .../ccip/generated/evm_2_evm_onramp/evm_2_evm_onramp.go | 2 +- .../generated-wrapper-dependency-versions-do-not-edit.txt | 6 +++--- core/scripts/ccip/manual-execution/helpers/execReport.go | 2 +- .../ocr2/plugins/ccip/internal/hashlib/leaf_hasher.go | 2 +- .../ocr2/plugins/ccip/internal/hashlib/leaf_hasher_test.go | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/contracts/src/v0.8/ccip/libraries/Internal.sol b/contracts/src/v0.8/ccip/libraries/Internal.sol index a8988c8a6d..d314553f20 100644 --- a/contracts/src/v0.8/ccip/libraries/Internal.sol +++ b/contracts/src/v0.8/ccip/libraries/Internal.sol @@ -81,7 +81,7 @@ library Internal { }); } - bytes32 internal constant EVM_2_EVM_MESSAGE_HASH = keccak256("EVM2EVMMessageHash"); + bytes32 internal constant EVM_2_EVM_MESSAGE_HASH = keccak256("EVM2EVMMessageHashV2"); function _hash(EVM2EVMMessage memory original, bytes32 metadataHash) internal pure returns (bytes32) { // Fixed-size message fields are included in nested hash to reduce stack pressure. diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go b/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go index 37b9412a44..d3c376ed23 100644 --- a/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go +++ b/core/gethwrappers/ccip/generated/evm_2_evm_offramp/evm_2_evm_offramp.go @@ -104,7 +104,7 @@ type RateLimiterTokenBucket struct { var EVM2EVMOffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20[]\",\"name\":\"sourceTokens\",\"type\":\"address[]\"},{\"internalType\":\"contractIPool[]\",\"name\":\"pools\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadARMSignal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitStoreAlreadyInUse\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidSourceChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenPoolConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdminOrOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenPoolMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"TokenRateLimitError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SkippedIncorrectNonce\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SkippedSenderWithPreviousRampMessageInflight\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"applyPoolUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getDestinationToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDestinationTokens\",\"outputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"destTokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"destToken\",\"type\":\"address\"}],\"name\":\"getPoolByDestToken\",\"outputs\":[{\"internalType\":\"contractIPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getSenderNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"sourceTokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransmitters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport\",\"name\":\"report\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setOCR2Config\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"setRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101806040523480156200001257600080fd5b5060405162006aae38038062006aae833981016040819052620000359162000891565b8033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000478565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080938401819052600380546001600160a01b031916909517600160801b9384021760ff60a01b1916600160a01b90920291909117909355909102909217600455504690528151835114620001705760405162d8548360e71b815260040160405180910390fd5b60608401516001600160a01b0316158062000193575083516001600160a01b0316155b15620001b2576040516342bcdf7f60e11b815260040160405180910390fd5b83600001516001600160a01b0316634120fccd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021b9190620009a8565b6001600160401b03166001146200024557604051636fc2a20760e11b815260040160405180910390fd5b83516001600160a01b0390811660a090815260408601516001600160401b0390811660c05260208701511660e052606086015182166101005260808601518216610140528501511661016052620002bc7f4e9041136a73e90544063222a317017e85c604900d37085437c6051f5370f7f862000523565b6101205260005b83518110156200046d576200031d848281518110620002e657620002e6620009c6565b6020026020010151848381518110620003035762000303620009c6565b6020026020010151600c6200058a60201b9092919060201c565b50620003d2838281518110620003375762000337620009c6565b60200260200101516001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a39190620009dc565b848381518110620003b857620003b8620009c6565b6020026020010151600f6200058a60201b9092919060201c565b507f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c848281518110620004095762000409620009c6565b6020026020010151848381518110620004265762000426620009c6565b6020026020010151604051620004529291906001600160a01b0392831681529116602082015260400190565b60405180910390a1620004658162000a03565b9050620002c3565b505050505062000a2b565b336001600160a01b03821603620004d25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008160c05160e051610100516040516020016200056d94939291909384526001600160401b039283166020850152911660408301526001600160a01b0316606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000620005a2846001600160a01b03851684620005aa565b949350505050565b6000620005a284846001600160a01b03851660008281526002840160205260408120829055620005a284846000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b6001600160a01b0381168114620006c857600080fd5b50565b80516001600160401b0381168114620006e357600080fd5b919050565b60006001600160401b038211156200070457620007046200063e565b5060051b60200190565b600082601f8301126200072057600080fd5b81516020620007396200073383620006e8565b6200067f565b82815260059290921b840181019181810190868411156200075957600080fd5b8286015b84811015620007815780516200077381620006b2565b83529183019183016200075d565b509695505050505050565b600082601f8301126200079e57600080fd5b81516020620007b16200073383620006e8565b82815260059290921b84018101918181019086841115620007d157600080fd5b8286015b8481101562000781578051620007eb81620006b2565b8352918301918301620007d5565b80516001600160801b0381168114620006e357600080fd5b6000606082840312156200082457600080fd5b604051606081016001600160401b03811182821017156200084957620008496200063e565b8060405250809150825180151581146200086257600080fd5b81526200087260208401620007f9565b60208201526200088560408401620007f9565b60408201525092915050565b600080600080848603610160811215620008aa57600080fd5b60c0811215620008b957600080fd5b50620008c462000654565b8551620008d181620006b2565b8152620008e160208701620006cb565b6020820152620008f460408701620006cb565b604082015260608601516200090981620006b2565b606082015260808601516200091e81620006b2565b608082015260a08601516200093381620006b2565b60a082015260c08601519094506001600160401b03808211156200095657600080fd5b62000964888389016200070e565b945060e08701519150808211156200097b57600080fd5b506200098a878288016200078c565b9250506200099d86610100870162000811565b905092959194509250565b600060208284031215620009bb57600080fd5b620005e382620006cb565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620009ef57600080fd5b8151620009fc81620006b2565b9392505050565b60006001820162000a2457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e05161010051610120516101405161016051615fa662000b0860003960008181610309015281816120fd015261239b0152600081816102cd01528181611622015281816116a4015281816120d30152818161291101526129980152600061255401526000818161029101526120ac015260008181610231015261205a015260008181610261015281816120840152818161312401526138100152600081816101f50152818161202c015261264901526000818161136b015281816113b70152818161176501526117b10152615fa66000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806379ba5097116100ee578063b1dc65a411610097578063d3c7c2c711610071578063d3c7c2c7146106a7578063d7e2bb50146106af578063f2fde38b146106c2578063f52121a5146106d557600080fd5b8063b1dc65a41461066e578063b4069b3114610681578063c92b28321461069457600080fd5b8063856c8247116100c8578063856c8247146106045780638da5cb5b14610630578063afcb95d71461064e57600080fd5b806379ba5097146105be57806381ff7048146105c657806385572ffb146105f657600080fd5b8063599f64311161015b578063681fba1611610135578063681fba16146104b8578063704b6c02146104cd578063740f4150146104e05780637437ff9f146104f357600080fd5b8063599f6431146104515780635d86f14114610490578063666cab8d146104a357600080fd5b80631ef381741161018c5780631ef38174146103c55780633a87ac53146103da578063546719cd146103ed57600080fd5b806306285c69146101b3578063142a98fc1461035c578063181f5a771461037c575b600080fd5b6103466040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60405161035391906146b1565b60405180910390f35b61036f61036a366004614748565b6106e8565b60405161035391906147cf565b6103b86040518060400160405280601481526020017f45564d3245564d4f666652616d7020312e322e3000000000000000000000000081525081565b604051610353919061484b565b6103d86103d3366004614ab9565b610763565b005b6103d86103e8366004614bcb565b610c22565b6103f5611032565b604051610353919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610353565b61046b61049e366004614c37565b6110e7565b6104ab611150565b6040516103539190614ca5565b6104c06111bf565b6040516103539190614cb8565b6103d86104db366004614c37565b611278565b6103d86104ee366004615151565b611368565b6105b16040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a081018252600a5463ffffffff808216835273ffffffffffffffffffffffffffffffffffffffff64010000000090920482166020840152600b549182169383019390935261ffff7401000000000000000000000000000000000000000082041660608301527601000000000000000000000000000000000000000000009004909116608082015290565b604051610353919061520c565b6103d86114ea565b6007546005546040805163ffffffff80851682526401000000009094049093166020840152820152606001610353565b6103d86101ae36600461526f565b610617610612366004614c37565b6115e7565b60405167ffffffffffffffff9091168152602001610353565b60005473ffffffffffffffffffffffffffffffffffffffff1661046b565b604080516001815260006020820181905291810191909152606001610353565b6103d861067c3660046152ef565b61170f565b61046b61068f366004614c37565b6119a0565b6103d86106a23660046153f4565b611a79565b6104c0611afe565b61046b6106bd366004614c37565b611bb3565b6103d86106d0366004614c37565b611bc2565b6103d86106e3366004615462565b611bd3565b60006106f6600160046154f5565b6002610703608085615537565b67ffffffffffffffff16610717919061555e565b60136000610726608087615575565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054901c16600381111561075d5761075d614765565b92915050565b84518460ff16601f8211156107d9576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f6f206d616e79207472616e736d697474657273000000000000000000000060448201526064015b60405180910390fd5b80600003610843576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f66206d75737420626520706f736974697665000000000000000000000000000060448201526064016107d0565b61084b611e2d565b61085485611eb0565b60095460005b818110156108e05760086000600983815481106108795761087961559c565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690556108d9816155cb565b905061085a565b50875160005b81811015610adc5760008a82815181106109025761090261559c565b602002602001015190506000600281111561091f5761091f614765565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040902054610100900460ff16600281111561095e5761095e614765565b146109c5576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f7265706561746564207472616e736d697474657220616464726573730000000060448201526064016107d0565b73ffffffffffffffffffffffffffffffffffffffff8116610a12576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260ff83168152602081016002905273ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260409091208251815460ff9091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082168117835592840151919283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001617610100836002811115610ac257610ac2614765565b02179055509050505080610ad5906155cb565b90506108e6565b508851610af09060099060208c019061461b565b506006805460ff838116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216908b161717905560078054610b76914691309190600090610b489063ffffffff16615603565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff168d8d8d8d8d8d61215d565b6005600001819055506000600760049054906101000a900463ffffffff16905043600760046101000a81548163ffffffff021916908363ffffffff1602179055507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581600560000154600760009054906101000a900463ffffffff168e8e8e8e8e8e604051610c0d99989796959493929190615626565b60405180910390a15050505050505050505050565b610c2a611e2d565b60005b83811015610e29576000858583818110610c4957610c4961559c565b610c5f9260206040909202019081019150614c37565b90506000868684818110610c7557610c7561559c565b9050604002016020016020810190610c8d9190614c37565b9050610c9a600c83612208565b610cd0576040517f9c8787c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cf2600c8461222a565b73ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4a600c8361224c565b50610dc58173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906156bc565b600f9061224c565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a1505080610e22906155cb565b9050610c2d565b5060005b8181101561102b576000838383818110610e4957610e4961559c565b610e5f9260206040909202019081019150614c37565b90506000848484818110610e7557610e7561559c565b9050604002016020016020810190610e8d9190614c37565b905073ffffffffffffffffffffffffffffffffffffffff82161580610ec6575073ffffffffffffffffffffffffffffffffffffffff8116155b15610efd576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f08600c83612208565b15610f3f576040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4b600c838361226e565b50610fc78173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe91906156bc565b600f908361226e565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a1505080611024906155cb565b9050610e2d565b5050505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff1615159383019390935260045480841660608401520490911660808201526110e290612291565b905090565b600080806110f6600c85612343565b9150915081611149576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107d0565b9392505050565b606060098054806020026020016040519081016040528092919081815260200182805480156111b557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161118a575b5050505050905090565b60606111cb600f612372565b67ffffffffffffffff8111156111e3576111e361485e565b60405190808252806020026020018201604052801561120c578160200160208202803683370190505b50905060005b8151811015611274576000611228600f8361237d565b5090508083838151811061123e5761123e61559c565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101525061126d816155cb565b9050611212565b5090565b60005473ffffffffffffffffffffffffffffffffffffffff1633148015906112b8575060025473ffffffffffffffffffffffffffffffffffffffff163314155b156112ef576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c9060200160405180910390a150565b467f0000000000000000000000000000000000000000000000000000000000000000146113f3576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff461660248201526044016107d0565b81515181518114611430576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156114da57600083828151811061144f5761144f61559c565b6020026020010151905080600014158015611488575084518051839081106114795761147961559c565b60200260200101516080015181105b156114c9576040517f085e39cf00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016107d0565b506114d3816155cb565b9050611433565b506114e58383612399565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107d0565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205467ffffffffffffffff168015801561165a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b1561075d576040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114991906156d9565b6117198787612d49565b600554883590808214611762576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016107d0565b467f0000000000000000000000000000000000000000000000000000000000000000146117e3576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107d0565b6040805183815260208c81013560081c63ffffffff16908201527fb04e63db38c49950639fa09d29872f21f5d49d614f3a969d8adf3d4b52e41a62910160405180910390a13360009081526008602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561186b5761186b614765565b600281111561187c5761187c614765565b905250905060028160200151600281111561189957611899614765565b1480156118e057506009816000015160ff16815481106118bb576118bb61559c565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b611916576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600061192485602061555e565b61192f88602061555e565b61193b8b6101446156f6565b61194591906156f6565b61194f91906156f6565b9050368114611993576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016107d0565b5050505050505050505050565b600080806119af600c85612343565b9150915081611a02576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107d0565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7191906156bc565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314801590611ab9575060025473ffffffffffffffffffffffffffffffffffffffff163314155b15611af0576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb600382612d70565b50565b6060611b0a600c612372565b67ffffffffffffffff811115611b2257611b2261485e565b604051908082528060200260200182016040528015611b4b578160200160208202803683370190505b50905060005b8151811015611274576000611b67600c8361237d565b50905080838381518110611b7d57611b7d61559c565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250611bac816155cb565b9050611b51565b600080806110f6600f85612343565b611bca611e2d565b611afb81612f55565b333014611c0c576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611c49565b6040805180820190915260008082526020820152815260200190600190039081611c225790505b506101408401515190915015611cb657611cb38361014001518460200151604051602001611c93919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60405160208183030381529060405285604001518661016001518661304a565b90505b604083015173ffffffffffffffffffffffffffffffffffffffff163b1580611d2057506040830151611d1e9073ffffffffffffffffffffffffffffffffffffffff167f85572ffb0000000000000000000000000000000000000000000000000000000061352d565b155b15611d2a57505050565b600a546000908190640100000000900473ffffffffffffffffffffffffffffffffffffffff16633cf97983611d5f8786613549565b611388886080015189604001516040518563ffffffff1660e01b8152600401611d8b949392919061575a565b6000604051808303816000875af1158015611daa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611df0919081019061582c565b915091508161102b57806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b60005473ffffffffffffffffffffffffffffffffffffffff163314611eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107d0565b565b600081806020019051810190611ec691906158cd565b602081015190915073ffffffffffffffffffffffffffffffffffffffff16611f1a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a805460208085015173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9586161792909217909255604080850151600b80546060808901516080808b0151909916760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff61ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff00000000000000000000000000000000000000000000909416958816959095179290921791909116929092179055815160c0810183527f00000000000000000000000000000000000000000000000000000000000000008416815267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116958201959095527f0000000000000000000000000000000000000000000000000000000000000000909416848301527f00000000000000000000000000000000000000000000000000000000000000008316908401527f00000000000000000000000000000000000000000000000000000000000000008216938301939093527f00000000000000000000000000000000000000000000000000000000000000001660a082015290517f737ef22d3f6615e342ed21c69e06620dbc5c8a261ed7cfb2ce214806b1f76eda91612151918490615968565b60405180910390a15050565b6000808a8a8a8a8a8a8a8a8a60405160200161218199989796959493929190615a37565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179150509998505050505050505050565b60006111498373ffffffffffffffffffffffffffffffffffffffff84166135f9565b60006111498373ffffffffffffffffffffffffffffffffffffffff8416613605565b60006111498373ffffffffffffffffffffffffffffffffffffffff8416613611565b6000611a718473ffffffffffffffffffffffffffffffffffffffff85168461361d565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261231f82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261230391906154f5565b85608001516fffffffffffffffffffffffffffffffff16613640565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6000806123668473ffffffffffffffffffffffffffffffffffffffff851661365f565b915091505b9250929050565b600061075d8261366e565b600080808061238c8686613679565b9097909650945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124289190615acc565b1561245f576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815151600081900361249c576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82602001515181146124da576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff8111156124f5576124f561485e565b60405190808252806020026020018201604052801561251e578160200160208202803683370190505b50905060005b828110156125fe576000856000015182815181106125445761254461559c565b60200260200101519050612578817f0000000000000000000000000000000000000000000000000000000000000000613688565b83838151811061258a5761258a61559c565b6020026020010181815250508061018001518383815181106125ae576125ae61559c565b6020026020010151146125ed576040517f7185cf6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506125f7816155cb565b9050612524565b50604080850151606086015191517f3204887500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263320488759261267f92879291600401615b19565b602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c09190615b4f565b9050806000036126fc576040517fea75680100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351151560005b84811015612d40576000876000015182815181106127235761272361559c565b60200260200101519050600061273c82606001516106e8565b9050600081600381111561275257612752614765565b148061276f5750600381600381111561276d5761276d614765565b145b6127b75760608201516040517f50a6e05200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b831561287457600a5460009063ffffffff166127d387426154f5565b11905080806127f3575060038260038111156127f1576127f1614765565b145b612829576040517f6358b0d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88848151811061283b5761283b61559c565b602002602001015160001461286e5788848151811061285c5761285c61559c565b60200260200101518360800181815250505b506128d1565b600081600381111561288857612888614765565b146128d15760608201516040517f67d9ba0f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b60208083015173ffffffffffffffffffffffffffffffffffffffff1660009081526012909152604090205467ffffffffffffffff168015801561294957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b15612aec5760208301516040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063856c824790602401602060405180830381865afa1580156129e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0591906156d9565b60c084015190915067ffffffffffffffff16612a22826001615b68565b67ffffffffffffffff1614612a8f57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fe44a20935573a783dd0d5991c92d7b6a0eb3173566530364db3ec10e9a990b5d60405160405180910390a3505050612d30565b60208381015173ffffffffffffffffffffffffffffffffffffffff16600090815260129091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b6000826003811115612b0057612b00614765565b03612b8c5760c083015167ffffffffffffffff16612b1f826001615b68565b67ffffffffffffffff1614612b8c57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fd32ddb11d71e3d63411d37b09f9a8b28664f1cb1338bfd1413c173b0ebf4123760405160405180910390a3505050612d30565b60008a602001518581518110612ba457612ba461559c565b60200260200101519050612bb984825161380e565b612bc8846060015160016139e4565b600080612bd58684613a8e565b91509150612be78660600151836139e4565b6003826003811115612bfb57612bfb614765565b14158015612c1b57506002826003811115612c1857612c18614765565b14155b15612c5a578560600151826040517f9e2616030000000000000000000000000000000000000000000000000000000081526004016107d0929190615b89565b6000856003811115612c6e57612c6e614765565b03612cdb5760208087015173ffffffffffffffffffffffffffffffffffffffff166000908152601290915260408120805467ffffffffffffffff1691612cb383615ba7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b856101800151866060015167ffffffffffffffff167fd4f851956a5d67c3997d1c9205045fef79bae2947fdee7e9e2641abc7391ef658484604051612d21929190615bc4565b60405180910390a35050505050505b612d39816155cb565b9050612703565b50505050505050565b612d6c612d5882840184615be4565b604080516000815260208101909152612399565b5050565b8154600090612d9990700100000000000000000000000000000000900463ffffffff16426154f5565b90508015612e3b5760018301548354612de1916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613640565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612e61916fffffffffffffffffffffffffffffffff9081169116613c31565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612f489084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60405180910390a1505050565b3373ffffffffffffffffffffffffffffffffffffffff821603612fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107d0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60606000865167ffffffffffffffff8111156130685761306861485e565b6040519080825280602002602001820160405280156130ad57816020015b60408051808201909152600080825260208201528152602001906001900390816130865790505b50905060005b87518110156134fc5760006130e48983815181106130d3576130d361559c565b6020026020010151600001516110e7565b90508073ffffffffffffffffffffffffffffffffffffffff16638627fad689898c86815181106131165761311661559c565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000008b88815181106131555761315561559c565b60200260200101518b898151811061316f5761316f61559c565b6020026020010151604051602001613188929190615c19565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016131b7959493929190615c3e565b600060405180830381600087803b1580156131d157600080fd5b505af19250505080156131e2575060015b613405573d808015613210576040519150601f19603f3d011682016040523d82523d6000602084013e613215565b606091505b50600061322182615ca1565b90507f9725942a000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614806132b457507ff94ebcd1000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b8061330057507f15279c08000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b8061334c57507f1a76572a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b8061339857507fd0c8d23a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b156133d157816040517f30dabb590000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347491906156bc565b8383815181106134865761348661559c565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff909116905288518990839081106134bf576134bf61559c565b6020026020010151602001518383815181106134dd576134dd61559c565b6020908102919091018101510152506134f5816155cb565b90506130b3565b50600b5461352190829073ffffffffffffffffffffffffffffffffffffffff16613c47565b90505b95945050505050565b600061353883613e2f565b801561114957506111498383613e93565b6040805160a08101825260008082526020820152606091810182905281810182905260808101919091526040518060a001604052808461018001518152602001846000015167ffffffffffffffff16815260200184602001516040516020016135ce919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040528152602001846101200151815260200183815250905092915050565b60006111498383613f62565b60006111498383613f6e565b60006111498383613ff8565b6000611a71848473ffffffffffffffffffffffffffffffffffffffff8516614015565b600061352485613650848661555e565b61365a90876156f6565b613c31565b600080808061238c8686614032565b600061075d8261406c565b600080808061238c8686614077565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b610100015160405160200161372b98979695949392919073ffffffffffffffffffffffffffffffffffffffff9889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b60405160208183030381529060405280519060200120856101200151805190602001208661014001516040516020016137649190615cf1565b604051602081830303815290604052805190602001208761016001516040516020016137909190615d59565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16826000015167ffffffffffffffff161461388e5781516040517f1279ec8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b600b54610140830151517401000000000000000000000000000000000000000090910461ffff1610156138ff5760608201516040517f099d3f7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b8082610140015151146139505760608201516040517f8808f8e700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b600b546101208301515176010000000000000000000000000000000000000000000090910463ffffffff161015612d6c57600b54610120830151516040517f8693378900000000000000000000000000000000000000000000000000000000815276010000000000000000000000000000000000000000000090920463ffffffff16600483015260248201526044016107d0565b600060026139f3608085615537565b67ffffffffffffffff16613a07919061555e565b90506000601381613a19608087615575565b67ffffffffffffffff168152602081019190915260400160002054905081613a43600160046154f5565b901b191681836003811115613a5a57613a5a614765565b901b178060136000613a6d608088615575565b67ffffffffffffffff16815260208101919091526040016000205550505050565b6040517ff52121a5000000000000000000000000000000000000000000000000000000008152600090606090309063f52121a590613ad29087908790600401615d6c565b600060405180830381600087803b158015613aec57600080fd5b505af1925050508015613afd575060015b613c16573d808015613b2b576040519150601f19603f3d011682016040523d82523d6000602084013e613b30565b606091505b50613b3a81615ca1565b7fffffffff00000000000000000000000000000000000000000000000000000000167f0a8d6e8c000000000000000000000000000000000000000000000000000000001480613bd25750613b8d81615ca1565b7fffffffff00000000000000000000000000000000000000000000000000000000167fe1cd550900000000000000000000000000000000000000000000000000000000145b15613be25760039250905061236b565b806040517fcf19edfd0000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b50506040805160208101909152600081526002909250929050565b6000818310613c405781611149565b5090919050565b81516000805b82811015613e1b5760008473ffffffffffffffffffffffffffffffffffffffff1663d02641a0878481518110613c8557613c8561559c565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016040805180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1d9190615ef6565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116600003613daf57858281518110613d5857613d5861559c565b6020908102919091010151516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107d0565b613dfd868381518110613dc457613dc461559c565b602002602001015160200151827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166140a290919063ffffffff16565b613e0790846156f6565b92505080613e14906155cb565b9050613c4d565b50613e2960038260006140df565b50505050565b6000613e5b827f01ffc9a700000000000000000000000000000000000000000000000000000000613e93565b801561075d5750613e8c827fffffffff00000000000000000000000000000000000000000000000000000000613e93565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613f4b575060208210155b8015613f575750600081115b979650505050505050565b60006111498383614462565b600081815260028301602052604081205480151580613f925750613f928484613f62565b611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016107d0565b60008181526002830160205260408120819055611149838361447a565b60008281526002840160205260408120829055611a718484614486565b6000818152600283016020526040812054819080614061576140548585613f62565b92506000915061236b9050565b60019250905061236b565b600061075d82614492565b60008080614085858561449c565b600081815260029690960160205260409095205494959350505050565b6000670de0b6b3a76400006140d5837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff861661555e565b6111499190615f56565b825474010000000000000000000000000000000000000000900460ff161580614106575081155b1561411057505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061415690700100000000000000000000000000000000900463ffffffff16426154f5565b905080156142165781831115614198576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546141d29083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613640565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156142cd5773ffffffffffffffffffffffffffffffffffffffff8416614275576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016107d0565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016107d0565b848310156143e05760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061431190826154f5565b61431b878a6154f5565b61432591906156f6565b61432f9190615f56565b905073ffffffffffffffffffffffffffffffffffffffff8616614388576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016107d0565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016107d0565b6143ea85846154f5565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b60008181526001830160205260408120541515611149565b600061114983836144a8565b600061114983836145a2565b600061075d825490565b600061114983836145f1565b600081815260018301602052604081205480156145915760006144cc6001836154f5565b85549091506000906144e0906001906154f5565b90508181146145455760008660000182815481106145005761450061559c565b90600052602060002001549050808760000184815481106145235761452361559c565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061455657614556615f6a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061075d565b600091505061075d565b5092915050565b60008181526001830160205260408120546145e95750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561075d565b50600061075d565b60008260000182815481106146085761460861559c565b9060005260206000200154905092915050565b828054828255906000526020600020908101928215614695579160200282015b8281111561469557825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061463b565b506112749291505b80821115611274576000815560010161469d565b60c0810161075d828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b67ffffffffffffffff81168114611afb57600080fd5b803561474381614722565b919050565b60006020828403121561475a57600080fd5b813561114981614722565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106147cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810161075d8284614794565b60005b838110156147f85781810151838201526020016147e0565b50506000910152565b600081518084526148198160208601602086016147dd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006111496020830184614801565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156148b0576148b061485e565b60405290565b6040516101a0810167ffffffffffffffff811182821017156148b0576148b061485e565b6040516080810167ffffffffffffffff811182821017156148b0576148b061485e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156149445761494461485e565b604052919050565b600067ffffffffffffffff8211156149665761496661485e565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611afb57600080fd5b803561474381614970565b600082601f8301126149ae57600080fd5b813560206149c36149be8361494c565b6148fd565b82815260059290921b840181019181810190868411156149e257600080fd5b8286015b84811015614a065780356149f981614970565b83529183019183016149e6565b509695505050505050565b803560ff8116811461474357600080fd5b600067ffffffffffffffff821115614a3c57614a3c61485e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112614a7957600080fd5b8135614a876149be82614a22565b818152846020838601011115614a9c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215614ad257600080fd5b863567ffffffffffffffff80821115614aea57600080fd5b614af68a838b0161499d565b97506020890135915080821115614b0c57600080fd5b614b188a838b0161499d565b9650614b2660408a01614a11565b95506060890135915080821115614b3c57600080fd5b614b488a838b01614a68565b9450614b5660808a01614738565b935060a0890135915080821115614b6c57600080fd5b50614b7989828a01614a68565b9150509295509295509295565b60008083601f840112614b9857600080fd5b50813567ffffffffffffffff811115614bb057600080fd5b6020830191508360208260061b850101111561236b57600080fd5b60008060008060408587031215614be157600080fd5b843567ffffffffffffffff80821115614bf957600080fd5b614c0588838901614b86565b90965094506020870135915080821115614c1e57600080fd5b50614c2b87828801614b86565b95989497509550505050565b600060208284031215614c4957600080fd5b813561114981614970565b600081518084526020808501945080840160005b83811015614c9a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c68565b509495945050505050565b6020815260006111496020830184614c54565b6020808252825182820181905260009190848201906040850190845b81811015614d0657835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614cd4565b50909695505050505050565b8015158114611afb57600080fd5b803561474381614d12565b600082601f830112614d3c57600080fd5b81356020614d4c6149be8361494c565b82815260069290921b84018101918181019086841115614d6b57600080fd5b8286015b84811015614a065760408189031215614d885760008081fd5b614d9061488d565b8135614d9b81614970565b81528185013585820152835291830191604001614d6f565b600082601f830112614dc457600080fd5b81356020614dd46149be8361494c565b82815260059290921b84018101918181019086841115614df357600080fd5b8286015b84811015614a0657803567ffffffffffffffff811115614e175760008081fd5b614e258986838b0101614a68565b845250918301918301614df7565b60006101a08284031215614e4657600080fd5b614e4e6148b6565b9050614e5982614738565b8152614e6760208301614992565b6020820152614e7860408301614992565b6040820152614e8960608301614738565b606082015260808201356080820152614ea460a08301614d20565b60a0820152614eb560c08301614738565b60c0820152614ec660e08301614992565b60e082015261010082810135908201526101208083013567ffffffffffffffff80821115614ef357600080fd5b614eff86838701614a68565b83850152610140925082850135915080821115614f1b57600080fd5b614f2786838701614d2b565b83850152610160925082850135915080821115614f4357600080fd5b50614f5085828601614db3565b82840152505061018080830135818301525092915050565b600082601f830112614f7957600080fd5b81356020614f896149be8361494c565b82815260059290921b84018101918181019086841115614fa857600080fd5b8286015b84811015614a0657803567ffffffffffffffff811115614fcc5760008081fd5b614fda8986838b0101614db3565b845250918301918301614fac565b600082601f830112614ff957600080fd5b813560206150096149be8361494c565b82815260059290921b8401810191818101908684111561502857600080fd5b8286015b84811015614a06578035835291830191830161502c565b60006080828403121561505557600080fd5b61505d6148da565b9050813567ffffffffffffffff8082111561507757600080fd5b818401915084601f83011261508b57600080fd5b8135602061509b6149be8361494c565b82815260059290921b840181019181810190888411156150ba57600080fd5b8286015b848110156150f2578035868111156150d65760008081fd5b6150e48b86838b0101614e33565b8452509183019183016150be565b508652508581013593508284111561510957600080fd5b61511587858801614f68565b9085015250604084013591508082111561512e57600080fd5b5061513b84828501614fe8565b6040830152506060820135606082015292915050565b6000806040838503121561516457600080fd5b823567ffffffffffffffff8082111561517c57600080fd5b61518886838701615043565b935060209150818501358181111561519f57600080fd5b85019050601f810186136151b257600080fd5b80356151c06149be8261494c565b81815260059190911b820183019083810190888311156151df57600080fd5b928401925b828410156151fd578335825292840192908401906151e4565b80955050505050509250929050565b60a0810161075d828463ffffffff808251168352602082015173ffffffffffffffffffffffffffffffffffffffff8082166020860152806040850151166040860152505061ffff6060830151166060840152806080830151166080840152505050565b60006020828403121561528157600080fd5b813567ffffffffffffffff81111561529857600080fd5b820160a0818503121561114957600080fd5b60008083601f8401126152bc57600080fd5b50813567ffffffffffffffff8111156152d457600080fd5b6020830191508360208260051b850101111561236b57600080fd5b60008060008060008060008060e0898b03121561530b57600080fd5b606089018a81111561531c57600080fd5b8998503567ffffffffffffffff8082111561533657600080fd5b818b0191508b601f83011261534a57600080fd5b81358181111561535957600080fd5b8c602082850101111561536b57600080fd5b6020830199508098505060808b013591508082111561538957600080fd5b6153958c838d016152aa565b909750955060a08b01359150808211156153ae57600080fd5b506153bb8b828c016152aa565b999c989b50969995989497949560c00135949350505050565b80356fffffffffffffffffffffffffffffffff8116811461474357600080fd5b60006060828403121561540657600080fd5b6040516060810181811067ffffffffffffffff821117156154295761542961485e565b604052823561543781614d12565b8152615445602084016153d4565b6020820152615456604084016153d4565b60408201529392505050565b6000806040838503121561547557600080fd5b823567ffffffffffffffff8082111561548d57600080fd5b61549986838701614e33565b935060208501359150808211156154af57600080fd5b506154bc85828601614db3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561075d5761075d6154c6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff8084168061555257615552615508565b92169190910692915050565b808202811582820484141761075d5761075d6154c6565b600067ffffffffffffffff8084168061559057615590615508565b92169190910492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155fc576155fc6154c6565b5060010190565b600063ffffffff80831681810361561c5761561c6154c6565b6001019392505050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526156568184018a614c54565b9050828103608084015261566a8189614c54565b905060ff871660a084015282810360c08401526156878187614801565b905067ffffffffffffffff851660e08401528281036101008401526156ac8185614801565b9c9b505050505050505050505050565b6000602082840312156156ce57600080fd5b815161114981614970565b6000602082840312156156eb57600080fd5b815161114981614722565b8082018082111561075d5761075d6154c6565b600081518084526020808501945080840160005b83811015614c9a578151805173ffffffffffffffffffffffffffffffffffffffff168852830151838801526040909601959082019060010161571d565b608081528451608082015267ffffffffffffffff60208601511660a08201526000604086015160a060c0840152615795610120840182614801565b905060608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80808584030160e08601526157d18383614801565b9250608089015191508085840301610100860152506157f08282615709565b92505050615804602083018661ffff169052565b836040830152613524606083018473ffffffffffffffffffffffffffffffffffffffff169052565b6000806040838503121561583f57600080fd5b825161584a81614d12565b602084015190925067ffffffffffffffff81111561586757600080fd5b8301601f8101851361587857600080fd5b80516158866149be82614a22565b81815286602083850101111561589b57600080fd5b6158ac8260208301602086016147dd565b8093505050509250929050565b805163ffffffff8116811461474357600080fd5b600060a082840312156158df57600080fd5b60405160a0810181811067ffffffffffffffff821117156159025761590261485e565b60405261590e836158b9565b8152602083015161591e81614970565b6020820152604083015161593181614970565b6040820152606083015161ffff8116811461594b57600080fd5b606082015261595c608084016158b9565b60808201529392505050565b61016081016159da828573ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b825163ffffffff90811660c0840152602084015173ffffffffffffffffffffffffffffffffffffffff90811660e0850152604085015116610100840152606084015161ffff16610120840152608084015116610140830152611149565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b166040850152816060850152615a7e8285018b614c54565b91508382036080850152615a92828a614c54565b915060ff881660a085015283820360c0850152615aaf8288614801565b90861660e085015283810361010085015290506156ac8185614801565b600060208284031215615ade57600080fd5b815161114981614d12565b600081518084526020808501945080840160005b83811015614c9a57815187529582019590820190600101615afd565b606081526000615b2c6060830186615ae9565b8281036020840152615b3e8186615ae9565b915050826040830152949350505050565b600060208284031215615b6157600080fd5b5051919050565b67ffffffffffffffff81811683821601908082111561459b5761459b6154c6565b67ffffffffffffffff83168152604081016111496020830184614794565b600067ffffffffffffffff80831681810361561c5761561c6154c6565b615bce8184614794565b604060208201526000611a716040830184614801565b600060208284031215615bf657600080fd5b813567ffffffffffffffff811115615c0d57600080fd5b611a7184828501615043565b604081526000615c2c6040830185614801565b82810360208401526135248185614801565b60a081526000615c5160a0830188614801565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015267ffffffffffffffff851660608401528281036080840152615c958185614801565b98975050505050505050565b6000815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015615ce95780818460040360031b1b83161693505b505050919050565b6020815260006111496020830184615709565b600081518084526020808501808196508360051b8101915082860160005b85811015615d4c578284038952615d3a848351614801565b98850198935090840190600101615d22565b5091979650505050505050565b6020815260006111496020830184615d04565b60408152615d8760408201845167ffffffffffffffff169052565b60006020840151615db0606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604084015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606084015167ffffffffffffffff811660a084015250608084015160c083015260a084015180151560e08401525060c0840151610100615e1e8185018367ffffffffffffffff169052565b60e08601519150610120615e498186018473ffffffffffffffffffffffffffffffffffffffff169052565b81870151925061014091508282860152808701519250506101a06101608181870152615e796101e0870185614801565b93508288015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0610180818887030181890152615eb88686615709565b9550828a01519450818887030184890152615ed38686615d04565b9550808a01516101c0890152505050505082810360208401526135248185615d04565b600060408284031215615f0857600080fd5b615f1061488d565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114615f3c57600080fd5b8152615f4a602084016158b9565b60208201529392505050565b600082615f6557615f65615508565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", + Bin: "0x6101806040523480156200001257600080fd5b5060405162006aae38038062006aae833981016040819052620000359162000891565b8033806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000478565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080938401819052600380546001600160a01b031916909517600160801b9384021760ff60a01b1916600160a01b90920291909117909355909102909217600455504690528151835114620001705760405162d8548360e71b815260040160405180910390fd5b60608401516001600160a01b0316158062000193575083516001600160a01b0316155b15620001b2576040516342bcdf7f60e11b815260040160405180910390fd5b83600001516001600160a01b0316634120fccd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021b9190620009a8565b6001600160401b03166001146200024557604051636fc2a20760e11b815260040160405180910390fd5b83516001600160a01b0390811660a090815260408601516001600160401b0390811660c05260208701511660e052606086015182166101005260808601518216610140528501511661016052620002bc7f8acd72527118c8324937b1a42e02cd246697c3b633f1742f3cae11de233722b362000523565b6101205260005b83518110156200046d576200031d848281518110620002e657620002e6620009c6565b6020026020010151848381518110620003035762000303620009c6565b6020026020010151600c6200058a60201b9092919060201c565b50620003d2838281518110620003375762000337620009c6565b60200260200101516001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a39190620009dc565b848381518110620003b857620003b8620009c6565b6020026020010151600f6200058a60201b9092919060201c565b507f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c848281518110620004095762000409620009c6565b6020026020010151848381518110620004265762000426620009c6565b6020026020010151604051620004529291906001600160a01b0392831681529116602082015260400190565b60405180910390a1620004658162000a03565b9050620002c3565b505050505062000a2b565b336001600160a01b03821603620004d25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008160c05160e051610100516040516020016200056d94939291909384526001600160401b039283166020850152911660408301526001600160a01b0316606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000620005a2846001600160a01b03851684620005aa565b949350505050565b6000620005a284846001600160a01b03851660008281526002840160205260408120829055620005a284846000620005e38383620005ec565b90505b92915050565b60008181526001830160205260408120546200063557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e6565b506000620005e6565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156200067957620006796200063e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006aa57620006aa6200063e565b604052919050565b6001600160a01b0381168114620006c857600080fd5b50565b80516001600160401b0381168114620006e357600080fd5b919050565b60006001600160401b038211156200070457620007046200063e565b5060051b60200190565b600082601f8301126200072057600080fd5b81516020620007396200073383620006e8565b6200067f565b82815260059290921b840181019181810190868411156200075957600080fd5b8286015b84811015620007815780516200077381620006b2565b83529183019183016200075d565b509695505050505050565b600082601f8301126200079e57600080fd5b81516020620007b16200073383620006e8565b82815260059290921b84018101918181019086841115620007d157600080fd5b8286015b8481101562000781578051620007eb81620006b2565b8352918301918301620007d5565b80516001600160801b0381168114620006e357600080fd5b6000606082840312156200082457600080fd5b604051606081016001600160401b03811182821017156200084957620008496200063e565b8060405250809150825180151581146200086257600080fd5b81526200087260208401620007f9565b60208201526200088560408401620007f9565b60408201525092915050565b600080600080848603610160811215620008aa57600080fd5b60c0811215620008b957600080fd5b50620008c462000654565b8551620008d181620006b2565b8152620008e160208701620006cb565b6020820152620008f460408701620006cb565b604082015260608601516200090981620006b2565b606082015260808601516200091e81620006b2565b608082015260a08601516200093381620006b2565b60a082015260c08601519094506001600160401b03808211156200095657600080fd5b62000964888389016200070e565b945060e08701519150808211156200097b57600080fd5b506200098a878288016200078c565b9250506200099d86610100870162000811565b905092959194509250565b600060208284031215620009bb57600080fd5b620005e382620006cb565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620009ef57600080fd5b8151620009fc81620006b2565b9392505050565b60006001820162000a2457634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e05161010051610120516101405161016051615fa662000b0860003960008181610309015281816120fd015261239b0152600081816102cd01528181611622015281816116a4015281816120d30152818161291101526129980152600061255401526000818161029101526120ac015260008181610231015261205a015260008181610261015281816120840152818161312401526138100152600081816101f50152818161202c015261264901526000818161136b015281816113b70152818161176501526117b10152615fa66000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806379ba5097116100ee578063b1dc65a411610097578063d3c7c2c711610071578063d3c7c2c7146106a7578063d7e2bb50146106af578063f2fde38b146106c2578063f52121a5146106d557600080fd5b8063b1dc65a41461066e578063b4069b3114610681578063c92b28321461069457600080fd5b8063856c8247116100c8578063856c8247146106045780638da5cb5b14610630578063afcb95d71461064e57600080fd5b806379ba5097146105be57806381ff7048146105c657806385572ffb146105f657600080fd5b8063599f64311161015b578063681fba1611610135578063681fba16146104b8578063704b6c02146104cd578063740f4150146104e05780637437ff9f146104f357600080fd5b8063599f6431146104515780635d86f14114610490578063666cab8d146104a357600080fd5b80631ef381741161018c5780631ef38174146103c55780633a87ac53146103da578063546719cd146103ed57600080fd5b806306285c69146101b3578063142a98fc1461035c578063181f5a771461037c575b600080fd5b6103466040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b60405161035391906146b1565b60405180910390f35b61036f61036a366004614748565b6106e8565b60405161035391906147cf565b6103b86040518060400160405280601481526020017f45564d3245564d4f666652616d7020312e322e3000000000000000000000000081525081565b604051610353919061484b565b6103d86103d3366004614ab9565b610763565b005b6103d86103e8366004614bcb565b610c22565b6103f5611032565b604051610353919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610353565b61046b61049e366004614c37565b6110e7565b6104ab611150565b6040516103539190614ca5565b6104c06111bf565b6040516103539190614cb8565b6103d86104db366004614c37565b611278565b6103d86104ee366004615151565b611368565b6105b16040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a081018252600a5463ffffffff808216835273ffffffffffffffffffffffffffffffffffffffff64010000000090920482166020840152600b549182169383019390935261ffff7401000000000000000000000000000000000000000082041660608301527601000000000000000000000000000000000000000000009004909116608082015290565b604051610353919061520c565b6103d86114ea565b6007546005546040805163ffffffff80851682526401000000009094049093166020840152820152606001610353565b6103d86101ae36600461526f565b610617610612366004614c37565b6115e7565b60405167ffffffffffffffff9091168152602001610353565b60005473ffffffffffffffffffffffffffffffffffffffff1661046b565b604080516001815260006020820181905291810191909152606001610353565b6103d861067c3660046152ef565b61170f565b61046b61068f366004614c37565b6119a0565b6103d86106a23660046153f4565b611a79565b6104c0611afe565b61046b6106bd366004614c37565b611bb3565b6103d86106d0366004614c37565b611bc2565b6103d86106e3366004615462565b611bd3565b60006106f6600160046154f5565b6002610703608085615537565b67ffffffffffffffff16610717919061555e565b60136000610726608087615575565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054901c16600381111561075d5761075d614765565b92915050565b84518460ff16601f8211156107d9576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f6f206d616e79207472616e736d697474657273000000000000000000000060448201526064015b60405180910390fd5b80600003610843576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f66206d75737420626520706f736974697665000000000000000000000000000060448201526064016107d0565b61084b611e2d565b61085485611eb0565b60095460005b818110156108e05760086000600983815481106108795761087961559c565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690556108d9816155cb565b905061085a565b50875160005b81811015610adc5760008a82815181106109025761090261559c565b602002602001015190506000600281111561091f5761091f614765565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040902054610100900460ff16600281111561095e5761095e614765565b146109c5576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f7265706561746564207472616e736d697474657220616464726573730000000060448201526064016107d0565b73ffffffffffffffffffffffffffffffffffffffff8116610a12576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260ff83168152602081016002905273ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260409091208251815460ff9091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082168117835592840151919283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001617610100836002811115610ac257610ac2614765565b02179055509050505080610ad5906155cb565b90506108e6565b508851610af09060099060208c019061461b565b506006805460ff838116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216908b161717905560078054610b76914691309190600090610b489063ffffffff16615603565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff168d8d8d8d8d8d61215d565b6005600001819055506000600760049054906101000a900463ffffffff16905043600760046101000a81548163ffffffff021916908363ffffffff1602179055507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581600560000154600760009054906101000a900463ffffffff168e8e8e8e8e8e604051610c0d99989796959493929190615626565b60405180910390a15050505050505050505050565b610c2a611e2d565b60005b83811015610e29576000858583818110610c4957610c4961559c565b610c5f9260206040909202019081019150614c37565b90506000868684818110610c7557610c7561559c565b9050604002016020016020810190610c8d9190614c37565b9050610c9a600c83612208565b610cd0576040517f9c8787c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cf2600c8461222a565b73ffffffffffffffffffffffffffffffffffffffff1614610d3f576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d4a600c8361224c565b50610dc58173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbd91906156bc565b600f9061224c565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a1505080610e22906155cb565b9050610c2d565b5060005b8181101561102b576000838383818110610e4957610e4961559c565b610e5f9260206040909202019081019150614c37565b90506000848484818110610e7557610e7561559c565b9050604002016020016020810190610e8d9190614c37565b905073ffffffffffffffffffffffffffffffffffffffff82161580610ec6575073ffffffffffffffffffffffffffffffffffffffff8116155b15610efd576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f08600c83612208565b15610f3f576040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f4b600c838361226e565b50610fc78173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe91906156bc565b600f908361226e565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a1505080611024906155cb565b9050610e2d565b5050505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff1615159383019390935260045480841660608401520490911660808201526110e290612291565b905090565b600080806110f6600c85612343565b9150915081611149576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107d0565b9392505050565b606060098054806020026020016040519081016040528092919081815260200182805480156111b557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161118a575b5050505050905090565b60606111cb600f612372565b67ffffffffffffffff8111156111e3576111e361485e565b60405190808252806020026020018201604052801561120c578160200160208202803683370190505b50905060005b8151811015611274576000611228600f8361237d565b5090508083838151811061123e5761123e61559c565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101525061126d816155cb565b9050611212565b5090565b60005473ffffffffffffffffffffffffffffffffffffffff1633148015906112b8575060025473ffffffffffffffffffffffffffffffffffffffff163314155b156112ef576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c9060200160405180910390a150565b467f0000000000000000000000000000000000000000000000000000000000000000146113f3576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff461660248201526044016107d0565b81515181518114611430576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156114da57600083828151811061144f5761144f61559c565b6020026020010151905080600014158015611488575084518051839081106114795761147961559c565b60200260200101516080015181105b156114c9576040517f085e39cf00000000000000000000000000000000000000000000000000000000815260048101839052602481018290526044016107d0565b506114d3816155cb565b9050611433565b506114e58383612399565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107d0565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205467ffffffffffffffff168015801561165a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b1561075d576040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114991906156d9565b6117198787612d49565b600554883590808214611762576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044016107d0565b467f0000000000000000000000000000000000000000000000000000000000000000146117e3576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107d0565b6040805183815260208c81013560081c63ffffffff16908201527fb04e63db38c49950639fa09d29872f21f5d49d614f3a969d8adf3d4b52e41a62910160405180910390a13360009081526008602090815260408083208151808301909252805460ff8082168452929391929184019161010090910416600281111561186b5761186b614765565b600281111561187c5761187c614765565b905250905060028160200151600281111561189957611899614765565b1480156118e057506009816000015160ff16815481106118bb576118bb61559c565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b611916576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600061192485602061555e565b61192f88602061555e565b61193b8b6101446156f6565b61194591906156f6565b61194f91906156f6565b9050368114611993576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016107d0565b5050505050505050505050565b600080806119af600c85612343565b9150915081611a02576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107d0565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7191906156bc565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314801590611ab9575060025473ffffffffffffffffffffffffffffffffffffffff163314155b15611af0576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611afb600382612d70565b50565b6060611b0a600c612372565b67ffffffffffffffff811115611b2257611b2261485e565b604051908082528060200260200182016040528015611b4b578160200160208202803683370190505b50905060005b8151811015611274576000611b67600c8361237d565b50905080838381518110611b7d57611b7d61559c565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250611bac816155cb565b9050611b51565b600080806110f6600f85612343565b611bca611e2d565b611afb81612f55565b333014611c0c576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611c49565b6040805180820190915260008082526020820152815260200190600190039081611c225790505b506101408401515190915015611cb657611cb38361014001518460200151604051602001611c93919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60405160208183030381529060405285604001518661016001518661304a565b90505b604083015173ffffffffffffffffffffffffffffffffffffffff163b1580611d2057506040830151611d1e9073ffffffffffffffffffffffffffffffffffffffff167f85572ffb0000000000000000000000000000000000000000000000000000000061352d565b155b15611d2a57505050565b600a546000908190640100000000900473ffffffffffffffffffffffffffffffffffffffff16633cf97983611d5f8786613549565b611388886080015189604001516040518563ffffffff1660e01b8152600401611d8b949392919061575a565b6000604051808303816000875af1158015611daa573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611df0919081019061582c565b915091508161102b57806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b60005473ffffffffffffffffffffffffffffffffffffffff163314611eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107d0565b565b600081806020019051810190611ec691906158cd565b602081015190915073ffffffffffffffffffffffffffffffffffffffff16611f1a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a805460208085015173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9586161792909217909255604080850151600b80546060808901516080808b0151909916760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff61ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff00000000000000000000000000000000000000000000909416958816959095179290921791909116929092179055815160c0810183527f00000000000000000000000000000000000000000000000000000000000000008416815267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116958201959095527f0000000000000000000000000000000000000000000000000000000000000000909416848301527f00000000000000000000000000000000000000000000000000000000000000008316908401527f00000000000000000000000000000000000000000000000000000000000000008216938301939093527f00000000000000000000000000000000000000000000000000000000000000001660a082015290517f737ef22d3f6615e342ed21c69e06620dbc5c8a261ed7cfb2ce214806b1f76eda91612151918490615968565b60405180910390a15050565b6000808a8a8a8a8a8a8a8a8a60405160200161218199989796959493929190615a37565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179150509998505050505050505050565b60006111498373ffffffffffffffffffffffffffffffffffffffff84166135f9565b60006111498373ffffffffffffffffffffffffffffffffffffffff8416613605565b60006111498373ffffffffffffffffffffffffffffffffffffffff8416613611565b6000611a718473ffffffffffffffffffffffffffffffffffffffff85168461361d565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261231f82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261230391906154f5565b85608001516fffffffffffffffffffffffffffffffff16613640565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6000806123668473ffffffffffffffffffffffffffffffffffffffff851661365f565b915091505b9250929050565b600061075d8261366e565b600080808061238c8686613679565b9097909650945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124289190615acc565b1561245f576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815151600081900361249c576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82602001515181146124da576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff8111156124f5576124f561485e565b60405190808252806020026020018201604052801561251e578160200160208202803683370190505b50905060005b828110156125fe576000856000015182815181106125445761254461559c565b60200260200101519050612578817f0000000000000000000000000000000000000000000000000000000000000000613688565b83838151811061258a5761258a61559c565b6020026020010181815250508061018001518383815181106125ae576125ae61559c565b6020026020010151146125ed576040517f7185cf6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506125f7816155cb565b9050612524565b50604080850151606086015191517f3204887500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263320488759261267f92879291600401615b19565b602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c09190615b4f565b9050806000036126fc576040517fea75680100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351151560005b84811015612d40576000876000015182815181106127235761272361559c565b60200260200101519050600061273c82606001516106e8565b9050600081600381111561275257612752614765565b148061276f5750600381600381111561276d5761276d614765565b145b6127b75760608201516040517f50a6e05200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b831561287457600a5460009063ffffffff166127d387426154f5565b11905080806127f3575060038260038111156127f1576127f1614765565b145b612829576040517f6358b0d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88848151811061283b5761283b61559c565b602002602001015160001461286e5788848151811061285c5761285c61559c565b60200260200101518360800181815250505b506128d1565b600081600381111561288857612888614765565b146128d15760608201516040517f67d9ba0f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b60208083015173ffffffffffffffffffffffffffffffffffffffff1660009081526012909152604090205467ffffffffffffffff168015801561294957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b15612aec5760208301516040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063856c824790602401602060405180830381865afa1580156129e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0591906156d9565b60c084015190915067ffffffffffffffff16612a22826001615b68565b67ffffffffffffffff1614612a8f57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fe44a20935573a783dd0d5991c92d7b6a0eb3173566530364db3ec10e9a990b5d60405160405180910390a3505050612d30565b60208381015173ffffffffffffffffffffffffffffffffffffffff16600090815260129091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b6000826003811115612b0057612b00614765565b03612b8c5760c083015167ffffffffffffffff16612b1f826001615b68565b67ffffffffffffffff1614612b8c57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fd32ddb11d71e3d63411d37b09f9a8b28664f1cb1338bfd1413c173b0ebf4123760405160405180910390a3505050612d30565b60008a602001518581518110612ba457612ba461559c565b60200260200101519050612bb984825161380e565b612bc8846060015160016139e4565b600080612bd58684613a8e565b91509150612be78660600151836139e4565b6003826003811115612bfb57612bfb614765565b14158015612c1b57506002826003811115612c1857612c18614765565b14155b15612c5a578560600151826040517f9e2616030000000000000000000000000000000000000000000000000000000081526004016107d0929190615b89565b6000856003811115612c6e57612c6e614765565b03612cdb5760208087015173ffffffffffffffffffffffffffffffffffffffff166000908152601290915260408120805467ffffffffffffffff1691612cb383615ba7565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b856101800151866060015167ffffffffffffffff167fd4f851956a5d67c3997d1c9205045fef79bae2947fdee7e9e2641abc7391ef658484604051612d21929190615bc4565b60405180910390a35050505050505b612d39816155cb565b9050612703565b50505050505050565b612d6c612d5882840184615be4565b604080516000815260208101909152612399565b5050565b8154600090612d9990700100000000000000000000000000000000900463ffffffff16426154f5565b90508015612e3b5760018301548354612de1916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613640565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612e61916fffffffffffffffffffffffffffffffff9081169116613c31565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612f489084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60405180910390a1505050565b3373ffffffffffffffffffffffffffffffffffffffff821603612fd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107d0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60606000865167ffffffffffffffff8111156130685761306861485e565b6040519080825280602002602001820160405280156130ad57816020015b60408051808201909152600080825260208201528152602001906001900390816130865790505b50905060005b87518110156134fc5760006130e48983815181106130d3576130d361559c565b6020026020010151600001516110e7565b90508073ffffffffffffffffffffffffffffffffffffffff16638627fad689898c86815181106131165761311661559c565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000008b88815181106131555761315561559c565b60200260200101518b898151811061316f5761316f61559c565b6020026020010151604051602001613188929190615c19565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016131b7959493929190615c3e565b600060405180830381600087803b1580156131d157600080fd5b505af19250505080156131e2575060015b613405573d808015613210576040519150601f19603f3d011682016040523d82523d6000602084013e613215565b606091505b50600061322182615ca1565b90507f9725942a000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614806132b457507ff94ebcd1000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b8061330057507f15279c08000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b8061334c57507f1a76572a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b8061339857507fd0c8d23a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b156133d157816040517f30dabb590000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347491906156bc565b8383815181106134865761348661559c565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff909116905288518990839081106134bf576134bf61559c565b6020026020010151602001518383815181106134dd576134dd61559c565b6020908102919091018101510152506134f5816155cb565b90506130b3565b50600b5461352190829073ffffffffffffffffffffffffffffffffffffffff16613c47565b90505b95945050505050565b600061353883613e2f565b801561114957506111498383613e93565b6040805160a08101825260008082526020820152606091810182905281810182905260808101919091526040518060a001604052808461018001518152602001846000015167ffffffffffffffff16815260200184602001516040516020016135ce919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040528152602001846101200151815260200183815250905092915050565b60006111498383613f62565b60006111498383613f6e565b60006111498383613ff8565b6000611a71848473ffffffffffffffffffffffffffffffffffffffff8516614015565b600061352485613650848661555e565b61365a90876156f6565b613c31565b600080808061238c8686614032565b600061075d8261406c565b600080808061238c8686614077565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b610100015160405160200161372b98979695949392919073ffffffffffffffffffffffffffffffffffffffff9889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b60405160208183030381529060405280519060200120856101200151805190602001208661014001516040516020016137649190615cf1565b604051602081830303815290604052805190602001208761016001516040516020016137909190615d59565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16826000015167ffffffffffffffff161461388e5781516040517f1279ec8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b600b54610140830151517401000000000000000000000000000000000000000090910461ffff1610156138ff5760608201516040517f099d3f7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b8082610140015151146139505760608201516040517f8808f8e700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526024016107d0565b600b546101208301515176010000000000000000000000000000000000000000000090910463ffffffff161015612d6c57600b54610120830151516040517f8693378900000000000000000000000000000000000000000000000000000000815276010000000000000000000000000000000000000000000090920463ffffffff16600483015260248201526044016107d0565b600060026139f3608085615537565b67ffffffffffffffff16613a07919061555e565b90506000601381613a19608087615575565b67ffffffffffffffff168152602081019190915260400160002054905081613a43600160046154f5565b901b191681836003811115613a5a57613a5a614765565b901b178060136000613a6d608088615575565b67ffffffffffffffff16815260208101919091526040016000205550505050565b6040517ff52121a5000000000000000000000000000000000000000000000000000000008152600090606090309063f52121a590613ad29087908790600401615d6c565b600060405180830381600087803b158015613aec57600080fd5b505af1925050508015613afd575060015b613c16573d808015613b2b576040519150601f19603f3d011682016040523d82523d6000602084013e613b30565b606091505b50613b3a81615ca1565b7fffffffff00000000000000000000000000000000000000000000000000000000167f0a8d6e8c000000000000000000000000000000000000000000000000000000001480613bd25750613b8d81615ca1565b7fffffffff00000000000000000000000000000000000000000000000000000000167fe1cd550900000000000000000000000000000000000000000000000000000000145b15613be25760039250905061236b565b806040517fcf19edfd0000000000000000000000000000000000000000000000000000000081526004016107d0919061484b565b50506040805160208101909152600081526002909250929050565b6000818310613c405781611149565b5090919050565b81516000805b82811015613e1b5760008473ffffffffffffffffffffffffffffffffffffffff1663d02641a0878481518110613c8557613c8561559c565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016040805180830381865afa158015613cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1d9190615ef6565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116600003613daf57858281518110613d5857613d5861559c565b6020908102919091010151516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016107d0565b613dfd868381518110613dc457613dc461559c565b602002602001015160200151827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166140a290919063ffffffff16565b613e0790846156f6565b92505080613e14906155cb565b9050613c4d565b50613e2960038260006140df565b50505050565b6000613e5b827f01ffc9a700000000000000000000000000000000000000000000000000000000613e93565b801561075d5750613e8c827fffffffff00000000000000000000000000000000000000000000000000000000613e93565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613f4b575060208210155b8015613f575750600081115b979650505050505050565b60006111498383614462565b600081815260028301602052604081205480151580613f925750613f928484613f62565b611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016107d0565b60008181526002830160205260408120819055611149838361447a565b60008281526002840160205260408120829055611a718484614486565b6000818152600283016020526040812054819080614061576140548585613f62565b92506000915061236b9050565b60019250905061236b565b600061075d82614492565b60008080614085858561449c565b600081815260029690960160205260409095205494959350505050565b6000670de0b6b3a76400006140d5837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff861661555e565b6111499190615f56565b825474010000000000000000000000000000000000000000900460ff161580614106575081155b1561411057505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061415690700100000000000000000000000000000000900463ffffffff16426154f5565b905080156142165781831115614198576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546141d29083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613640565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156142cd5773ffffffffffffffffffffffffffffffffffffffff8416614275576040517ff94ebcd100000000000000000000000000000000000000000000000000000000815260048101839052602481018690526044016107d0565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016107d0565b848310156143e05760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690600090829061431190826154f5565b61431b878a6154f5565b61432591906156f6565b61432f9190615f56565b905073ffffffffffffffffffffffffffffffffffffffff8616614388576040517f15279c0800000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016107d0565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff871660448201526064016107d0565b6143ea85846154f5565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b60008181526001830160205260408120541515611149565b600061114983836144a8565b600061114983836145a2565b600061075d825490565b600061114983836145f1565b600081815260018301602052604081205480156145915760006144cc6001836154f5565b85549091506000906144e0906001906154f5565b90508181146145455760008660000182815481106145005761450061559c565b90600052602060002001549050808760000184815481106145235761452361559c565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061455657614556615f6a565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061075d565b600091505061075d565b5092915050565b60008181526001830160205260408120546145e95750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561075d565b50600061075d565b60008260000182815481106146085761460861559c565b9060005260206000200154905092915050565b828054828255906000526020600020908101928215614695579160200282015b8281111561469557825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061463b565b506112749291505b80821115611274576000815560010161469d565b60c0810161075d828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b67ffffffffffffffff81168114611afb57600080fd5b803561474381614722565b919050565b60006020828403121561475a57600080fd5b813561114981614722565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106147cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810161075d8284614794565b60005b838110156147f85781810151838201526020016147e0565b50506000910152565b600081518084526148198160208601602086016147dd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006111496020830184614801565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156148b0576148b061485e565b60405290565b6040516101a0810167ffffffffffffffff811182821017156148b0576148b061485e565b6040516080810167ffffffffffffffff811182821017156148b0576148b061485e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156149445761494461485e565b604052919050565b600067ffffffffffffffff8211156149665761496661485e565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611afb57600080fd5b803561474381614970565b600082601f8301126149ae57600080fd5b813560206149c36149be8361494c565b6148fd565b82815260059290921b840181019181810190868411156149e257600080fd5b8286015b84811015614a065780356149f981614970565b83529183019183016149e6565b509695505050505050565b803560ff8116811461474357600080fd5b600067ffffffffffffffff821115614a3c57614a3c61485e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112614a7957600080fd5b8135614a876149be82614a22565b818152846020838601011115614a9c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215614ad257600080fd5b863567ffffffffffffffff80821115614aea57600080fd5b614af68a838b0161499d565b97506020890135915080821115614b0c57600080fd5b614b188a838b0161499d565b9650614b2660408a01614a11565b95506060890135915080821115614b3c57600080fd5b614b488a838b01614a68565b9450614b5660808a01614738565b935060a0890135915080821115614b6c57600080fd5b50614b7989828a01614a68565b9150509295509295509295565b60008083601f840112614b9857600080fd5b50813567ffffffffffffffff811115614bb057600080fd5b6020830191508360208260061b850101111561236b57600080fd5b60008060008060408587031215614be157600080fd5b843567ffffffffffffffff80821115614bf957600080fd5b614c0588838901614b86565b90965094506020870135915080821115614c1e57600080fd5b50614c2b87828801614b86565b95989497509550505050565b600060208284031215614c4957600080fd5b813561114981614970565b600081518084526020808501945080840160005b83811015614c9a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614c68565b509495945050505050565b6020815260006111496020830184614c54565b6020808252825182820181905260009190848201906040850190845b81811015614d0657835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614cd4565b50909695505050505050565b8015158114611afb57600080fd5b803561474381614d12565b600082601f830112614d3c57600080fd5b81356020614d4c6149be8361494c565b82815260069290921b84018101918181019086841115614d6b57600080fd5b8286015b84811015614a065760408189031215614d885760008081fd5b614d9061488d565b8135614d9b81614970565b81528185013585820152835291830191604001614d6f565b600082601f830112614dc457600080fd5b81356020614dd46149be8361494c565b82815260059290921b84018101918181019086841115614df357600080fd5b8286015b84811015614a0657803567ffffffffffffffff811115614e175760008081fd5b614e258986838b0101614a68565b845250918301918301614df7565b60006101a08284031215614e4657600080fd5b614e4e6148b6565b9050614e5982614738565b8152614e6760208301614992565b6020820152614e7860408301614992565b6040820152614e8960608301614738565b606082015260808201356080820152614ea460a08301614d20565b60a0820152614eb560c08301614738565b60c0820152614ec660e08301614992565b60e082015261010082810135908201526101208083013567ffffffffffffffff80821115614ef357600080fd5b614eff86838701614a68565b83850152610140925082850135915080821115614f1b57600080fd5b614f2786838701614d2b565b83850152610160925082850135915080821115614f4357600080fd5b50614f5085828601614db3565b82840152505061018080830135818301525092915050565b600082601f830112614f7957600080fd5b81356020614f896149be8361494c565b82815260059290921b84018101918181019086841115614fa857600080fd5b8286015b84811015614a0657803567ffffffffffffffff811115614fcc5760008081fd5b614fda8986838b0101614db3565b845250918301918301614fac565b600082601f830112614ff957600080fd5b813560206150096149be8361494c565b82815260059290921b8401810191818101908684111561502857600080fd5b8286015b84811015614a06578035835291830191830161502c565b60006080828403121561505557600080fd5b61505d6148da565b9050813567ffffffffffffffff8082111561507757600080fd5b818401915084601f83011261508b57600080fd5b8135602061509b6149be8361494c565b82815260059290921b840181019181810190888411156150ba57600080fd5b8286015b848110156150f2578035868111156150d65760008081fd5b6150e48b86838b0101614e33565b8452509183019183016150be565b508652508581013593508284111561510957600080fd5b61511587858801614f68565b9085015250604084013591508082111561512e57600080fd5b5061513b84828501614fe8565b6040830152506060820135606082015292915050565b6000806040838503121561516457600080fd5b823567ffffffffffffffff8082111561517c57600080fd5b61518886838701615043565b935060209150818501358181111561519f57600080fd5b85019050601f810186136151b257600080fd5b80356151c06149be8261494c565b81815260059190911b820183019083810190888311156151df57600080fd5b928401925b828410156151fd578335825292840192908401906151e4565b80955050505050509250929050565b60a0810161075d828463ffffffff808251168352602082015173ffffffffffffffffffffffffffffffffffffffff8082166020860152806040850151166040860152505061ffff6060830151166060840152806080830151166080840152505050565b60006020828403121561528157600080fd5b813567ffffffffffffffff81111561529857600080fd5b820160a0818503121561114957600080fd5b60008083601f8401126152bc57600080fd5b50813567ffffffffffffffff8111156152d457600080fd5b6020830191508360208260051b850101111561236b57600080fd5b60008060008060008060008060e0898b03121561530b57600080fd5b606089018a81111561531c57600080fd5b8998503567ffffffffffffffff8082111561533657600080fd5b818b0191508b601f83011261534a57600080fd5b81358181111561535957600080fd5b8c602082850101111561536b57600080fd5b6020830199508098505060808b013591508082111561538957600080fd5b6153958c838d016152aa565b909750955060a08b01359150808211156153ae57600080fd5b506153bb8b828c016152aa565b999c989b50969995989497949560c00135949350505050565b80356fffffffffffffffffffffffffffffffff8116811461474357600080fd5b60006060828403121561540657600080fd5b6040516060810181811067ffffffffffffffff821117156154295761542961485e565b604052823561543781614d12565b8152615445602084016153d4565b6020820152615456604084016153d4565b60408201529392505050565b6000806040838503121561547557600080fd5b823567ffffffffffffffff8082111561548d57600080fd5b61549986838701614e33565b935060208501359150808211156154af57600080fd5b506154bc85828601614db3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561075d5761075d6154c6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff8084168061555257615552615508565b92169190910692915050565b808202811582820484141761075d5761075d6154c6565b600067ffffffffffffffff8084168061559057615590615508565b92169190910492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155fc576155fc6154c6565b5060010190565b600063ffffffff80831681810361561c5761561c6154c6565b6001019392505050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526156568184018a614c54565b9050828103608084015261566a8189614c54565b905060ff871660a084015282810360c08401526156878187614801565b905067ffffffffffffffff851660e08401528281036101008401526156ac8185614801565b9c9b505050505050505050505050565b6000602082840312156156ce57600080fd5b815161114981614970565b6000602082840312156156eb57600080fd5b815161114981614722565b8082018082111561075d5761075d6154c6565b600081518084526020808501945080840160005b83811015614c9a578151805173ffffffffffffffffffffffffffffffffffffffff168852830151838801526040909601959082019060010161571d565b608081528451608082015267ffffffffffffffff60208601511660a08201526000604086015160a060c0840152615795610120840182614801565b905060608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80808584030160e08601526157d18383614801565b9250608089015191508085840301610100860152506157f08282615709565b92505050615804602083018661ffff169052565b836040830152613524606083018473ffffffffffffffffffffffffffffffffffffffff169052565b6000806040838503121561583f57600080fd5b825161584a81614d12565b602084015190925067ffffffffffffffff81111561586757600080fd5b8301601f8101851361587857600080fd5b80516158866149be82614a22565b81815286602083850101111561589b57600080fd5b6158ac8260208301602086016147dd565b8093505050509250929050565b805163ffffffff8116811461474357600080fd5b600060a082840312156158df57600080fd5b60405160a0810181811067ffffffffffffffff821117156159025761590261485e565b60405261590e836158b9565b8152602083015161591e81614970565b6020820152604083015161593181614970565b6040820152606083015161ffff8116811461594b57600080fd5b606082015261595c608084016158b9565b60808201529392505050565b61016081016159da828573ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b825163ffffffff90811660c0840152602084015173ffffffffffffffffffffffffffffffffffffffff90811660e0850152604085015116610100840152606084015161ffff16610120840152608084015116610140830152611149565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b166040850152816060850152615a7e8285018b614c54565b91508382036080850152615a92828a614c54565b915060ff881660a085015283820360c0850152615aaf8288614801565b90861660e085015283810361010085015290506156ac8185614801565b600060208284031215615ade57600080fd5b815161114981614d12565b600081518084526020808501945080840160005b83811015614c9a57815187529582019590820190600101615afd565b606081526000615b2c6060830186615ae9565b8281036020840152615b3e8186615ae9565b915050826040830152949350505050565b600060208284031215615b6157600080fd5b5051919050565b67ffffffffffffffff81811683821601908082111561459b5761459b6154c6565b67ffffffffffffffff83168152604081016111496020830184614794565b600067ffffffffffffffff80831681810361561c5761561c6154c6565b615bce8184614794565b604060208201526000611a716040830184614801565b600060208284031215615bf657600080fd5b813567ffffffffffffffff811115615c0d57600080fd5b611a7184828501615043565b604081526000615c2c6040830185614801565b82810360208401526135248185614801565b60a081526000615c5160a0830188614801565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015267ffffffffffffffff851660608401528281036080840152615c958185614801565b98975050505050505050565b6000815160208301517fffffffff0000000000000000000000000000000000000000000000000000000080821693506004831015615ce95780818460040360031b1b83161693505b505050919050565b6020815260006111496020830184615709565b600081518084526020808501808196508360051b8101915082860160005b85811015615d4c578284038952615d3a848351614801565b98850198935090840190600101615d22565b5091979650505050505050565b6020815260006111496020830184615d04565b60408152615d8760408201845167ffffffffffffffff169052565b60006020840151615db0606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604084015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606084015167ffffffffffffffff811660a084015250608084015160c083015260a084015180151560e08401525060c0840151610100615e1e8185018367ffffffffffffffff169052565b60e08601519150610120615e498186018473ffffffffffffffffffffffffffffffffffffffff169052565b81870151925061014091508282860152808701519250506101a06101608181870152615e796101e0870185614801565b93508288015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0610180818887030181890152615eb88686615709565b9550828a01519450818887030184890152615ed38686615d04565b9550808a01516101c0890152505050505082810360208401526135248185615d04565b600060408284031215615f0857600080fd5b615f1061488d565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114615f3c57600080fd5b8152615f4a602084016158b9565b60208201529392505050565b600082615f6557615f65615508565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", } var EVM2EVMOffRampABI = EVM2EVMOffRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_offramp_helper/evm_2_evm_offramp_helper.go b/core/gethwrappers/ccip/generated/evm_2_evm_offramp_helper/evm_2_evm_offramp_helper.go index 1438df1ca7..384c8d34b0 100644 --- a/core/gethwrappers/ccip/generated/evm_2_evm_offramp_helper/evm_2_evm_offramp_helper.go +++ b/core/gethwrappers/ccip/generated/evm_2_evm_offramp_helper/evm_2_evm_offramp_helper.go @@ -104,7 +104,7 @@ type RateLimiterTokenBucket struct { var EVM2EVMOffRampHelperMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20[]\",\"name\":\"sourceTokens\",\"type\":\"address[]\"},{\"internalType\":\"contractIPool[]\",\"name\":\"pools\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyExecuted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadARMSignal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitStoreAlreadyInUse\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMessageId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidSourceChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenPoolConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdminOrOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenPoolMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"TokenRateLimitError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SkippedIncorrectNonce\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SkippedSenderWithPreviousRampMessageInflight\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_SCRIPT\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"applyPoolUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport\",\"name\":\"rep\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"manualExecGasLimits\",\"type\":\"uint256[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getDestinationToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDestinationTokens\",\"outputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"destTokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"bitmapIndex\",\"type\":\"uint64\"}],\"name\":\"getExecutionStateBitMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"destToken\",\"type\":\"address\"}],\"name\":\"getPoolByDestToken\",\"outputs\":[{\"internalType\":\"contractIPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getSenderNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"commitStore\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"contractIERC20[]\",\"name\":\"sourceTokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransmitters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport\",\"name\":\"report\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"metadataHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"releaseOrMintTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"executableMessages\",\"type\":\"bytes\"}],\"name\":\"report\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"setExecutionStateHelper\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setOCR2Config\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"setRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.EVM2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"trialExecute\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101806040526014805460ff191660011790553480156200001f57600080fd5b5060405162006f3538038062006f358339810160408190526200004291620008a6565b838383838033806000816200009e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000d157620000d1816200048d565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080938401819052600380546001600160a01b031916909517600160801b9384021760ff60a01b1916600160a01b90920291909117909355909102909217600455504690528151835114620001815760405162d8548360e71b815260040160405180910390fd5b60608401516001600160a01b03161580620001a4575083516001600160a01b0316155b15620001c3576040516342bcdf7f60e11b815260040160405180910390fd5b83600001516001600160a01b0316634120fccd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c9190620009bd565b6001600160401b03166001146200025657604051636fc2a20760e11b815260040160405180910390fd5b83516001600160a01b0390811660a090815260408601516001600160401b0390811660c05260208701511660e052606086015182166101005260808601518216610140528501511661016052620002cd7f4e9041136a73e90544063222a317017e85c604900d37085437c6051f5370f7f862000538565b6101205260005b83518110156200047e576200032e848281518110620002f757620002f7620009db565b6020026020010151848381518110620003145762000314620009db565b6020026020010151600c6200059f60201b9092919060201c565b50620003e3838281518110620003485762000348620009db565b60200260200101516001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b49190620009f1565b848381518110620003c957620003c9620009db565b6020026020010151600f6200059f60201b9092919060201c565b507f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c8482815181106200041a576200041a620009db565b6020026020010151848381518110620004375762000437620009db565b6020026020010151604051620004639291906001600160a01b0392831681529116602082015260400190565b60405180910390a1620004768162000a18565b9050620002d4565b50505050505050505062000a40565b336001600160a01b03821603620004e75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000095565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008160c05160e051610100516040516020016200058294939291909384526001600160401b039283166020850152911660408301526001600160a01b0316606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000620005b7846001600160a01b03851684620005bf565b949350505050565b6000620005b784846001600160a01b03851660008281526002840160205260408120829055620005b784846000620005f8838362000601565b90505b92915050565b60008181526001830160205260408120546200064a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005fb565b506000620005fb565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156200068e576200068e62000653565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006bf57620006bf62000653565b604052919050565b6001600160a01b0381168114620006dd57600080fd5b50565b80516001600160401b0381168114620006f857600080fd5b919050565b60006001600160401b0382111562000719576200071962000653565b5060051b60200190565b600082601f8301126200073557600080fd5b815160206200074e6200074883620006fd565b62000694565b82815260059290921b840181019181810190868411156200076e57600080fd5b8286015b84811015620007965780516200078881620006c7565b835291830191830162000772565b509695505050505050565b600082601f830112620007b357600080fd5b81516020620007c66200074883620006fd565b82815260059290921b84018101918181019086841115620007e657600080fd5b8286015b84811015620007965780516200080081620006c7565b8352918301918301620007ea565b80516001600160801b0381168114620006f857600080fd5b6000606082840312156200083957600080fd5b604051606081016001600160401b03811182821017156200085e576200085e62000653565b8060405250809150825180151581146200087757600080fd5b815262000887602084016200080e565b60208201526200089a604084016200080e565b60408201525092915050565b600080600080848603610160811215620008bf57600080fd5b60c0811215620008ce57600080fd5b50620008d962000669565b8551620008e681620006c7565b8152620008f660208701620006e0565b60208201526200090960408701620006e0565b604082015260608601516200091e81620006c7565b606082015260808601516200093381620006c7565b608082015260a08601516200094881620006c7565b60a082015260c08601519094506001600160401b03808211156200096b57600080fd5b620009798883890162000723565b945060e08701519150808211156200099057600080fd5b506200099f87828801620007a1565b925050620009b286610100870162000826565b905092959194509250565b600060208284031215620009d057600080fd5b620005f882620006e0565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000a0457600080fd5b815162000a1181620006c7565b9392505050565b60006001820162000a3957634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516101605161640362000b3260003960008181610381015281816123190152612cdb015260008181610345015281816118090152818161188b015281816122ef0152818161325101526132d801526000612e94015260008181610309015281816122c801526136f30152600081816102a90152818161227601526136d20152600081816102d9015281816122a0015281816128d0015281816136b10152613f1e01526000818161026d015281816122480152612f890152600081816115520152818161159e0152818161194c015261199801526164036000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80637437ff9f1161012a578063b4069b31116100bd578063d3c7c2c71161008c578063f2fde38b11610071578063f2fde38b146107f4578063f52121a514610807578063f8ccbf471461081a57600080fd5b8063d3c7c2c7146107d9578063d7e2bb50146107e157600080fd5b8063b4069b3114610798578063b5767166146107ab578063c5a1d7f0146107be578063c92b2832146107c657600080fd5b8063856c8247116100f9578063856c82471461071b5780638da5cb5b14610747578063afcb95d714610765578063b1dc65a41461078557600080fd5b80637437ff9f1461060a57806379ba5097146106d557806381ff7048146106dd57806385572ffb1461070d57600080fd5b8063546719cd116101bd578063681fba161161018c5780636c6bd845116101715780636c6bd845146105d1578063704b6c02146105e4578063740f4150146105f757600080fd5b8063681fba161461059c578063693928ae146105b157600080fd5b8063546719cd146104d1578063599f6431146105355780635d86f14114610574578063666cab8d1461058757600080fd5b80632dea00f3116101f95780632dea00f3146104525780633a87ac53146104655780634f9f03fe14610478578063506449721461049957600080fd5b806306285c691461022b578063142a98fc146103d4578063181f5a77146103f45780631ef381741461043d575b600080fd5b6103be6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b6040516103cb919061498a565b60405180910390f35b6103e76103e2366004614a21565b610837565b6040516103cb9190614aa8565b6104306040518060400160405280601481526020017f45564d3245564d4f666652616d7020312e322e3000000000000000000000000081525081565b6040516103cb9190614b24565b61045061044b366004614d92565b6108b2565b005b610450610460366004614e5f565b610d71565b610450610473366004614ee1565b610d7f565b61048b6104863660046151b7565b61118f565b6040516103cb92919061521b565b6104c36104a7366004614a21565b67ffffffffffffffff1660009081526013602052604090205490565b6040519081526020016103cb565b6104d96111a9565b6040516103cb919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103cb565b61054f61058236600461523b565b61125e565b61058f6112c7565b6040516103cb91906152a9565b6105a4611336565b6040516103cb91906152bc565b6105c46105bf36600461539d565b6113ef565b6040516103cb91906154c1565b6104506105df3660046156bd565b611455565b6104506105f236600461523b565b61145f565b6104506106053660046156bd565b61154f565b6106c86040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a081018252600a5463ffffffff808216835273ffffffffffffffffffffffffffffffffffffffff64010000000090920482166020840152600b549182169383019390935261ffff7401000000000000000000000000000000000000000082041660608301527601000000000000000000000000000000000000000000009004909116608082015290565b6040516103cb9190615778565b6104506116d1565b6007546005546040805163ffffffff808516825264010000000090940490931660208401528201526060016103cb565b6104506102263660046157db565b61072e61072936600461523b565b6117ce565b60405167ffffffffffffffff90911681526020016103cb565b60005473ffffffffffffffffffffffffffffffffffffffff1661054f565b6040805160018152600060208201819052918101919091526060016103cb565b610450610793366004615816565b6118f6565b61054f6107a636600461523b565b611b87565b6104506107b93660046158cd565b611c60565b6104c3611c6a565b6104506107d436600461592f565b611c95565b6105a4611d1a565b61054f6107ef36600461523b565b611dcf565b61045061080236600461523b565b611dde565b6104506108153660046151b7565b611def565b6014546108279060ff1681565b60405190151581526020016103cb565b6000610845600160046159cc565b6002610852608085615a0e565b67ffffffffffffffff166108669190615a35565b60136000610875608087615a4c565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054901c1660038111156108ac576108ac614a3e565b92915050565b84518460ff16601f821115610928576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f6f206d616e79207472616e736d697474657273000000000000000000000060448201526064015b60405180910390fd5b80600003610992576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f66206d75737420626520706f7369746976650000000000000000000000000000604482015260640161091f565b61099a612049565b6109a3856120cc565b60095460005b81811015610a2f5760086000600983815481106109c8576109c8615a73565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169055610a2881615aa2565b90506109a9565b50875160005b81811015610c2b5760008a8281518110610a5157610a51615a73565b6020026020010151905060006002811115610a6e57610a6e614a3e565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040902054610100900460ff166002811115610aad57610aad614a3e565b14610b14576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f7265706561746564207472616e736d6974746572206164647265737300000000604482015260640161091f565b73ffffffffffffffffffffffffffffffffffffffff8116610b61576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260ff83168152602081016002905273ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260409091208251815460ff9091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082168117835592840151919283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001617610100836002811115610c1157610c11614a3e565b02179055509050505080610c2490615aa2565b9050610a35565b508851610c3f9060099060208c01906148f4565b506006805460ff838116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216908b161717905560078054610cc5914691309190600090610c979063ffffffff16615ada565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff168d8d8d8d8d8d612379565b6005600001819055506000600760049054906101000a900463ffffffff16905043600760046101000a81548163ffffffff021916908363ffffffff1602179055507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581600560000154600760009054906101000a900463ffffffff168e8e8e8e8e8e604051610d5c99989796959493929190615afd565b60405180910390a15050505050505050505050565b610d7b8282612424565b5050565b610d87612049565b60005b83811015610f86576000858583818110610da657610da6615a73565b610dbc926020604090920201908101915061523b565b90506000868684818110610dd257610dd2615a73565b9050604002016020016020810190610dea919061523b565b9050610df7600c836124ce565b610e2d576040517f9c8787c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610e4f600c846124f0565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea7600c83612512565b50610f228173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a9190615b93565b600f90612512565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a1505080610f7f90615aa2565b9050610d8a565b5060005b81811015611188576000838383818110610fa657610fa6615a73565b610fbc926020604090920201908101915061523b565b90506000848484818110610fd257610fd2615a73565b9050604002016020016020810190610fea919061523b565b905073ffffffffffffffffffffffffffffffffffffffff82161580611023575073ffffffffffffffffffffffffffffffffffffffff8116155b1561105a576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611065600c836124ce565b1561109c576040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110a8600c8383612534565b506111248173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190615b93565b600f9083612534565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a150508061118190615aa2565b9050610f8a565b5050505050565b6000606061119d8484612557565b915091505b9250929050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152611259906126fa565b905090565b6000808061126d600c856127ac565b91509150816112c0576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161091f565b9392505050565b6060600980548060200260200160405190810160405280929190818152602001828054801561132c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611301575b5050505050905090565b6060611342600f6127cf565b67ffffffffffffffff81111561135a5761135a614b37565b604051908082528060200260200182016040528015611383578160200160208202803683370190505b50905060005b81518110156113eb57600061139f600f836127da565b509050808383815181106113b5576113b5615a73565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152506113e481615aa2565b9050611389565b5090565b60606114488989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061143991508990508a615bb0565b6114438789615bb0565b6127f6565b9998505050505050505050565b610d7b8282612cd9565b60005473ffffffffffffffffffffffffffffffffffffffff16331480159061149f575060025473ffffffffffffffffffffffffffffffffffffffff163314155b156114d6576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c9060200160405180910390a150565b467f0000000000000000000000000000000000000000000000000000000000000000146115da576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff4616602482015260440161091f565b81515181518114611617576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156116c157600083828151811061163657611636615a73565b602002602001015190508060001415801561166f5750845180518390811061166057611660615a73565b60200260200101516080015181105b156116b0576040517f085e39cf000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161091f565b506116ba81615aa2565b905061161a565b506116cc8383612cd9565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161091f565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205467ffffffffffffffff168015801561184157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b156108ac576040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190615bbd565b6119008787613689565b600554883590808214611949576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161091f565b467f0000000000000000000000000000000000000000000000000000000000000000146119ca576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161091f565b6040805183815260208c81013560081c63ffffffff16908201527fb04e63db38c49950639fa09d29872f21f5d49d614f3a969d8adf3d4b52e41a62910160405180910390a13360009081526008602090815260408083208151808301909252805460ff80821684529293919291840191610100909104166002811115611a5257611a52614a3e565b6002811115611a6357611a63614a3e565b9052509050600281602001516002811115611a8057611a80614a3e565b148015611ac757506009816000015160ff1681548110611aa257611aa2615a73565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b611afd576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000611b0b856020615a35565b611b16886020615a35565b611b228b610144615bda565b611b2c9190615bda565b611b369190615bda565b9050368114611b7a576040517f8e1192e10000000000000000000000000000000000000000000000000000000081526004810182905236602482015260440161091f565b5050505050505050505050565b60008080611b96600c856127ac565b9150915081611be9576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161091f565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c589190615b93565b949350505050565b610d7b8282613689565b60006112597f4e9041136a73e90544063222a317017e85c604900d37085437c6051f5370f7f86136ac565b60005473ffffffffffffffffffffffffffffffffffffffff163314801590611cd5575060025473ffffffffffffffffffffffffffffffffffffffff163314155b15611d0c576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d17600382613779565b50565b6060611d26600c6127cf565b67ffffffffffffffff811115611d3e57611d3e614b37565b604051908082528060200260200182016040528015611d67578160200160208202803683370190505b50905060005b81518110156113eb576000611d83600c836127da565b50905080838381518110611d9957611d99615a73565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250611dc881615aa2565b9050611d6d565b6000808061126d600f856127ac565b611de6612049565b611d178161395e565b333014611e28576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611e65565b6040805180820190915260008082526020820152815260200190600190039081611e3e5790505b506101408401515190915015611ed257611ecf8361014001518460200151604051602001611eaf919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040528560400151866101600151866127f6565b90505b604083015173ffffffffffffffffffffffffffffffffffffffff163b1580611f3c57506040830151611f3a9073ffffffffffffffffffffffffffffffffffffffff167f85572ffb00000000000000000000000000000000000000000000000000000000613a53565b155b15611f4657505050565b600a546000908190640100000000900473ffffffffffffffffffffffffffffffffffffffff16633cf97983611f7b8786613a6f565b611388886080015189604001516040518563ffffffff1660e01b8152600401611fa79493929190615bed565b6000604051808303816000875af1158015611fc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261200c9190810190615cbf565b915091508161118857806040517f0a8d6e8c00000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b60005473ffffffffffffffffffffffffffffffffffffffff1633146120ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161091f565b565b6000818060200190518101906120e29190615d60565b602081015190915073ffffffffffffffffffffffffffffffffffffffff16612136576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a805460208085015173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9586161792909217909255604080850151600b80546060808901516080808b0151909916760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff61ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff00000000000000000000000000000000000000000000909416958816959095179290921791909116929092179055815160c0810183527f00000000000000000000000000000000000000000000000000000000000000008416815267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116958201959095527f0000000000000000000000000000000000000000000000000000000000000000909416848301527f00000000000000000000000000000000000000000000000000000000000000008316908401527f00000000000000000000000000000000000000000000000000000000000000008216938301939093527f00000000000000000000000000000000000000000000000000000000000000001660a082015290517f737ef22d3f6615e342ed21c69e06620dbc5c8a261ed7cfb2ce214806b1f76eda9161236d918490615dfb565b60405180910390a15050565b6000808a8a8a8a8a8a8a8a8a60405160200161239d99989796959493929190615eca565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179150509998505050505050505050565b60006002612433608085615a0e565b67ffffffffffffffff166124479190615a35565b90506000601381612459608087615a4c565b67ffffffffffffffff168152602081019190915260400160002054905081612483600160046159cc565b901b19168183600381111561249a5761249a614a3e565b901b1780601360006124ad608088615a4c565b67ffffffffffffffff16815260208101919091526040016000205550505050565b60006112c08373ffffffffffffffffffffffffffffffffffffffff8416613b1f565b60006112c08373ffffffffffffffffffffffffffffffffffffffff8416613b2b565b60006112c08373ffffffffffffffffffffffffffffffffffffffff8416613b37565b6000611c588473ffffffffffffffffffffffffffffffffffffffff851684613b43565b6040517ff52121a5000000000000000000000000000000000000000000000000000000008152600090606090309063f52121a59061259b9087908790600401615fb1565b600060405180830381600087803b1580156125b557600080fd5b505af19250505080156125c6575060015b6126df573d8080156125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b506126038161613b565b7fffffffff00000000000000000000000000000000000000000000000000000000167f0a8d6e8c00000000000000000000000000000000000000000000000000000000148061269b57506126568161613b565b7fffffffff00000000000000000000000000000000000000000000000000000000167fe1cd550900000000000000000000000000000000000000000000000000000000145b156126ab576003925090506111a2565b806040517fcf19edfd00000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b50506040805160208101909152600081526002909250929050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261278882606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261276c91906159cc565b85608001516fffffffffffffffffffffffffffffffff16613b66565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b60008061119d8473ffffffffffffffffffffffffffffffffffffffff8516613b85565b60006108ac82613b94565b60008080806127e98686613b9f565b9097909650945050505050565b60606000865167ffffffffffffffff81111561281457612814614b37565b60405190808252806020026020018201604052801561285957816020015b60408051808201909152600080825260208201528152602001906001900390816128325790505b50905060005b8751811015612ca857600061289089838151811061287f5761287f615a73565b60200260200101516000015161125e565b90508073ffffffffffffffffffffffffffffffffffffffff16638627fad689898c86815181106128c2576128c2615a73565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000008b888151811061290157612901615a73565b60200260200101518b898151811061291b5761291b615a73565b602002602001015160405160200161293492919061618b565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016129639594939291906161b0565b600060405180830381600087803b15801561297d57600080fd5b505af192505050801561298e575060015b612bb1573d8080156129bc576040519150601f19603f3d011682016040523d82523d6000602084013e6129c1565b606091505b5060006129cd8261613b565b90507f9725942a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161480612a6057507ff94ebcd1000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b80612aac57507f15279c08000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b80612af857507f1a76572a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b80612b4457507fd0c8d23a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b15612b7d57816040517f30dabb5900000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b816040517fe1cd550900000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c209190615b93565b838381518110612c3257612c32615a73565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff90911690528851899083908110612c6b57612c6b615a73565b602002602001015160200151838381518110612c8957612c89615a73565b602090810291909101810151015250612ca181615aa2565b905061285f565b50600b54612ccd90829073ffffffffffffffffffffffffffffffffffffffff16613bae565b90505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d689190616213565b15612d9f576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151516000819003612ddc576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260200151518114612e1a576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115612e3557612e35614b37565b604051908082528060200260200182016040528015612e5e578160200160208202803683370190505b50905060005b82811015612f3e57600085600001518281518110612e8457612e84615a73565b60200260200101519050612eb8817f0000000000000000000000000000000000000000000000000000000000000000613d96565b838381518110612eca57612eca615a73565b602002602001018181525050806101800151838381518110612eee57612eee615a73565b602002602001015114612f2d576040517f7185cf6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50612f3781615aa2565b9050612e64565b50604080850151606086015191517f3204887500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692633204887592612fbf92879291600401616260565b602060405180830381865afa158015612fdc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130009190616296565b90508060000361303c576040517fea75680100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351151560005b848110156136805760008760000151828151811061306357613063615a73565b60200260200101519050600061307c8260600151610837565b9050600081600381111561309257613092614a3e565b14806130af575060038160038111156130ad576130ad614a3e565b145b6130f75760608201516040517f50a6e05200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b83156131b457600a5460009063ffffffff1661311387426159cc565b11905080806131335750600382600381111561313157613131614a3e565b145b613169576040517f6358b0d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88848151811061317b5761317b615a73565b60200260200101516000146131ae5788848151811061319c5761319c615a73565b60200260200101518360800181815250505b50613211565b60008160038111156131c8576131c8614a3e565b146132115760608201516040517f67d9ba0f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b60208083015173ffffffffffffffffffffffffffffffffffffffff1660009081526012909152604090205467ffffffffffffffff168015801561328957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b1561342c5760208301516040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063856c824790602401602060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133459190615bbd565b60c084015190915067ffffffffffffffff166133628260016162af565b67ffffffffffffffff16146133cf57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fe44a20935573a783dd0d5991c92d7b6a0eb3173566530364db3ec10e9a990b5d60405160405180910390a3505050613670565b60208381015173ffffffffffffffffffffffffffffffffffffffff16600090815260129091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b600082600381111561344057613440614a3e565b036134cc5760c083015167ffffffffffffffff1661345f8260016162af565b67ffffffffffffffff16146134cc57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fd32ddb11d71e3d63411d37b09f9a8b28664f1cb1338bfd1413c173b0ebf4123760405160405180910390a3505050613670565b60008a6020015185815181106134e4576134e4615a73565b602002602001015190506134f9848251613f1c565b61350884606001516001612424565b6000806135158684612557565b91509150613527866060015183612424565b600382600381111561353b5761353b614a3e565b1415801561355b5750600282600381111561355857613558614a3e565b14155b1561359a578560600151826040517f9e26160300000000000000000000000000000000000000000000000000000000815260040161091f9291906162d0565b60008560038111156135ae576135ae614a3e565b0361361b5760208087015173ffffffffffffffffffffffffffffffffffffffff166000908152601290915260408120805467ffffffffffffffff16916135f3836162ee565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b856101800151866060015167ffffffffffffffff167fd4f851956a5d67c3997d1c9205045fef79bae2947fdee7e9e2641abc7391ef65848460405161366192919061521b565b60405180910390a35050505050505b61367981615aa2565b9050613043565b50505050505050565b610d7b6136988284018461630b565b604080516000815260208101909152612cd9565b6000817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405160200161375c949392919093845267ffffffffffffffff92831660208501529116604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b604051602081830303815290604052805190602001209050919050565b81546000906137a290700100000000000000000000000000000000900463ffffffff16426159cc565b9050801561384457600183015483546137ea916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613b66565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461386a916fffffffffffffffffffffffffffffffff90811691166140f2565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906139519084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60405180910390a1505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036139dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161091f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000613a5e83614108565b80156112c057506112c0838361416c565b6040805160a08101825260008082526020820152606091810182905281810182905260808101919091526040518060a001604052808461018001518152602001846000015167ffffffffffffffff1681526020018460200151604051602001613af4919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040528152602001846101200151815260200183815250905092915050565b60006112c0838361423b565b60006112c08383614247565b60006112c083836142d1565b6000611c58848473ffffffffffffffffffffffffffffffffffffffff85166142ee565b6000612cd085613b768486615a35565b613b809087615bda565b6140f2565b60008080806127e9868661430b565b60006108ac82614345565b60008080806127e98686614350565b81516000805b82811015613d825760008473ffffffffffffffffffffffffffffffffffffffff1663d02641a0878481518110613bec57613bec615a73565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016040805180830381865afa158015613c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c849190616340565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116600003613d1657858281518110613cbf57613cbf615a73565b6020908102919091010151516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161091f565b613d64868381518110613d2b57613d2b615a73565b602002602001015160200151827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661437b90919063ffffffff16565b613d6e9084615bda565b92505080613d7b90615aa2565b9050613bb4565b50613d9060038260006143b8565b50505050565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b6101000151604051602001613e3998979695949392919073ffffffffffffffffffffffffffffffffffffffff9889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b6040516020818303038152906040528051906020012085610120015180519060200120866101400151604051602001613e7291906154c1565b60405160208183030381529060405280519060200120876101600151604051602001613e9e91906163a0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16826000015167ffffffffffffffff1614613f9c5781516040517f1279ec8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b600b54610140830151517401000000000000000000000000000000000000000090910461ffff16101561400d5760608201516040517f099d3f7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b80826101400151511461405e5760608201516040517f8808f8e700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b600b546101208301515176010000000000000000000000000000000000000000000090910463ffffffff161015610d7b57600b54610120830151516040517f8693378900000000000000000000000000000000000000000000000000000000815276010000000000000000000000000000000000000000000090920463ffffffff166004830152602482015260440161091f565b600081831061410157816112c0565b5090919050565b6000614134827f01ffc9a70000000000000000000000000000000000000000000000000000000061416c565b80156108ac5750614165827fffffffff0000000000000000000000000000000000000000000000000000000061416c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015614224575060208210155b80156142305750600081115b979650505050505050565b60006112c0838361473b565b60008181526002830160205260408120548015158061426b575061426b848461423b565b6112c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640161091f565b600081815260028301602052604081208190556112c08383614753565b60008281526002840160205260408120829055611c58848461475f565b600081815260028301602052604081205481908061433a5761432d858561423b565b9250600091506111a29050565b6001925090506111a2565b60006108ac8261476b565b6000808061435e8585614775565b600081815260029690960160205260409095205494959350505050565b6000670de0b6b3a76400006143ae837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616615a35565b6112c091906163b3565b825474010000000000000000000000000000000000000000900460ff1615806143df575081155b156143e957505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061442f90700100000000000000000000000000000000900463ffffffff16426159cc565b905080156144ef5781831115614471576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546144ab9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613b66565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156145a65773ffffffffffffffffffffffffffffffffffffffff841661454e576040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600481018390526024810186905260440161091f565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff8516604482015260640161091f565b848310156146b95760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906145ea90826159cc565b6145f4878a6159cc565b6145fe9190615bda565b61460891906163b3565b905073ffffffffffffffffffffffffffffffffffffffff8616614661576040517f15279c08000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260440161091f565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff8716604482015260640161091f565b6146c385846159cc565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b600081815260018301602052604081205415156112c0565b60006112c08383614781565b60006112c0838361487b565b60006108ac825490565b60006112c083836148ca565b6000818152600183016020526040812054801561486a5760006147a56001836159cc565b85549091506000906147b9906001906159cc565b905081811461481e5760008660000182815481106147d9576147d9615a73565b90600052602060002001549050808760000184815481106147fc576147fc615a73565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061482f5761482f6163c7565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108ac565b60009150506108ac565b5092915050565b60008181526001830160205260408120546148c2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108ac565b5060006108ac565b60008260000182815481106148e1576148e1615a73565b9060005260206000200154905092915050565b82805482825590600052602060002090810192821561496e579160200282015b8281111561496e57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614914565b506113eb9291505b808211156113eb5760008155600101614976565b60c081016108ac828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b67ffffffffffffffff81168114611d1757600080fd5b8035614a1c816149fb565b919050565b600060208284031215614a3357600080fd5b81356112c0816149fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110614aa4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016108ac8284614a6d565b60005b83811015614ad1578181015183820152602001614ab9565b50506000910152565b60008151808452614af2816020860160208601614ab6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112c06020830184614ada565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614b8957614b89614b37565b60405290565b6040516101a0810167ffffffffffffffff81118282101715614b8957614b89614b37565b6040516080810167ffffffffffffffff81118282101715614b8957614b89614b37565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614c1d57614c1d614b37565b604052919050565b600067ffffffffffffffff821115614c3f57614c3f614b37565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611d1757600080fd5b8035614a1c81614c49565b600082601f830112614c8757600080fd5b81356020614c9c614c9783614c25565b614bd6565b82815260059290921b84018101918181019086841115614cbb57600080fd5b8286015b84811015614cdf578035614cd281614c49565b8352918301918301614cbf565b509695505050505050565b803560ff81168114614a1c57600080fd5b600067ffffffffffffffff821115614d1557614d15614b37565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112614d5257600080fd5b8135614d60614c9782614cfb565b818152846020838601011115614d7557600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215614dab57600080fd5b863567ffffffffffffffff80821115614dc357600080fd5b614dcf8a838b01614c76565b97506020890135915080821115614de557600080fd5b614df18a838b01614c76565b9650614dff60408a01614cea565b95506060890135915080821115614e1557600080fd5b614e218a838b01614d41565b9450614e2f60808a01614a11565b935060a0890135915080821115614e4557600080fd5b50614e5289828a01614d41565b9150509295509295509295565b60008060408385031215614e7257600080fd5b8235614e7d816149fb565b9150602083013560048110614e9157600080fd5b809150509250929050565b60008083601f840112614eae57600080fd5b50813567ffffffffffffffff811115614ec657600080fd5b6020830191508360208260061b85010111156111a257600080fd5b60008060008060408587031215614ef757600080fd5b843567ffffffffffffffff80821115614f0f57600080fd5b614f1b88838901614e9c565b90965094506020870135915080821115614f3457600080fd5b50614f4187828801614e9c565b95989497509550505050565b8015158114611d1757600080fd5b8035614a1c81614f4d565b600082601f830112614f7757600080fd5b81356020614f87614c9783614c25565b82815260069290921b84018101918181019086841115614fa657600080fd5b8286015b84811015614cdf5760408189031215614fc35760008081fd5b614fcb614b66565b8135614fd681614c49565b81528185013585820152835291830191604001614faa565b6000614ffc614c9784614c25565b8381529050602080820190600585901b84018681111561501b57600080fd5b845b8181101561505757803567ffffffffffffffff81111561503d5760008081fd5b61504989828901614d41565b85525092820192820161501d565b505050509392505050565b600082601f83011261507357600080fd5b6112c083833560208501614fee565b60006101a0828403121561509557600080fd5b61509d614b8f565b90506150a882614a11565b81526150b660208301614c6b565b60208201526150c760408301614c6b565b60408201526150d860608301614a11565b6060820152608082013560808201526150f360a08301614f5b565b60a082015261510460c08301614a11565b60c082015261511560e08301614c6b565b60e082015261010082810135908201526101208083013567ffffffffffffffff8082111561514257600080fd5b61514e86838701614d41565b8385015261014092508285013591508082111561516a57600080fd5b61517686838701614f66565b8385015261016092508285013591508082111561519257600080fd5b5061519f85828601615062565b82840152505061018080830135818301525092915050565b600080604083850312156151ca57600080fd5b823567ffffffffffffffff808211156151e257600080fd5b6151ee86838701615082565b9350602085013591508082111561520457600080fd5b5061521185828601615062565b9150509250929050565b6152258184614a6d565b604060208201526000611c586040830184614ada565b60006020828403121561524d57600080fd5b81356112c081614c49565b600081518084526020808501945080840160005b8381101561529e57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161526c565b509495945050505050565b6020815260006112c06020830184615258565b6020808252825182820181905260009190848201906040850190845b8181101561530a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152d8565b50909695505050505050565b60008083601f84011261532857600080fd5b50813567ffffffffffffffff81111561534057600080fd5b6020830191508360208285010111156111a257600080fd5b60008083601f84011261536a57600080fd5b50813567ffffffffffffffff81111561538257600080fd5b6020830191508360208260051b85010111156111a257600080fd5b60008060008060008060008060a0898b0312156153b957600080fd5b883567ffffffffffffffff808211156153d157600080fd5b6153dd8c838d01614f66565b995060208b01359150808211156153f357600080fd5b6153ff8c838d01615316565b909950975060408b0135915061541482614c49565b90955060608a0135908082111561542a57600080fd5b6154368c838d01615358565b909650945060808b013591508082111561544f57600080fd5b5061545c8b828c01615358565b999c989b5096995094979396929594505050565b600081518084526020808501945080840160005b8381101561529e578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101615484565b6020815260006112c06020830184615470565b600082601f8301126154e557600080fd5b813560206154f5614c9783614c25565b82815260059290921b8401810191818101908684111561551457600080fd5b8286015b84811015614cdf57803567ffffffffffffffff8111156155385760008081fd5b6155468986838b0101615062565b845250918301918301615518565b600082601f83011261556557600080fd5b81356020615575614c9783614c25565b82815260059290921b8401810191818101908684111561559457600080fd5b8286015b84811015614cdf5780358352918301918301615598565b6000608082840312156155c157600080fd5b6155c9614bb3565b9050813567ffffffffffffffff808211156155e357600080fd5b818401915084601f8301126155f757600080fd5b81356020615607614c9783614c25565b82815260059290921b8401810191818101908884111561562657600080fd5b8286015b8481101561565e578035868111156156425760008081fd5b6156508b86838b0101615082565b84525091830191830161562a565b508652508581013593508284111561567557600080fd5b615681878588016154d4565b9085015250604084013591508082111561569a57600080fd5b506156a784828501615554565b6040830152506060820135606082015292915050565b600080604083850312156156d057600080fd5b823567ffffffffffffffff808211156156e857600080fd5b6156f4868387016155af565b935060209150818501358181111561570b57600080fd5b85019050601f8101861361571e57600080fd5b803561572c614c9782614c25565b81815260059190911b8201830190838101908883111561574b57600080fd5b928401925b8284101561576957833582529284019290840190615750565b80955050505050509250929050565b60a081016108ac828463ffffffff808251168352602082015173ffffffffffffffffffffffffffffffffffffffff8082166020860152806040850151166040860152505061ffff6060830151166060840152806080830151166080840152505050565b6000602082840312156157ed57600080fd5b813567ffffffffffffffff81111561580457600080fd5b820160a081850312156112c057600080fd5b60008060008060008060008060e0898b03121561583257600080fd5b606089018a81111561584357600080fd5b8998503567ffffffffffffffff8082111561585d57600080fd5b6158698c838d01615316565b909950975060808b013591508082111561588257600080fd5b61588e8c838d01615358565b909750955060a08b01359150808211156158a757600080fd5b506158b48b828c01615358565b999c989b50969995989497949560c00135949350505050565b600080602083850312156158e057600080fd5b823567ffffffffffffffff8111156158f757600080fd5b61590385828601615316565b90969095509350505050565b80356fffffffffffffffffffffffffffffffff81168114614a1c57600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964614b37565b604052823561597281614f4d565b81526159806020840161590f565b60208201526159916040840161590f565b60408201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156108ac576108ac61599d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680615a2957615a296159df565b92169190910692915050565b80820281158282048414176108ac576108ac61599d565b600067ffffffffffffffff80841680615a6757615a676159df565b92169190910492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615ad357615ad361599d565b5060010190565b600063ffffffff808316818103615af357615af361599d565b6001019392505050565b600061012063ffffffff808d1684528b6020850152808b16604085015250806060840152615b2d8184018a615258565b90508281036080840152615b418189615258565b905060ff871660a084015282810360c0840152615b5e8187614ada565b905067ffffffffffffffff851660e0840152828103610100840152615b838185614ada565b9c9b505050505050505050505050565b600060208284031215615ba557600080fd5b81516112c081614c49565b60006112c0368484614fee565b600060208284031215615bcf57600080fd5b81516112c0816149fb565b808201808211156108ac576108ac61599d565b608081528451608082015267ffffffffffffffff60208601511660a08201526000604086015160a060c0840152615c28610120840182614ada565b905060608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80808584030160e0860152615c648383614ada565b925060808901519150808584030161010086015250615c838282615470565b92505050615c97602083018661ffff169052565b836040830152612cd0606083018473ffffffffffffffffffffffffffffffffffffffff169052565b60008060408385031215615cd257600080fd5b8251615cdd81614f4d565b602084015190925067ffffffffffffffff811115615cfa57600080fd5b8301601f81018513615d0b57600080fd5b8051615d19614c9782614cfb565b818152866020838501011115615d2e57600080fd5b615d3f826020830160208601614ab6565b8093505050509250929050565b805163ffffffff81168114614a1c57600080fd5b600060a08284031215615d7257600080fd5b60405160a0810181811067ffffffffffffffff82111715615d9557615d95614b37565b604052615da183615d4c565b81526020830151615db181614c49565b60208201526040830151615dc481614c49565b6040820152606083015161ffff81168114615dde57600080fd5b6060820152615def60808401615d4c565b60808201529392505050565b6101608101615e6d828573ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b825163ffffffff90811660c0840152602084015173ffffffffffffffffffffffffffffffffffffffff90811660e0850152604085015116610100840152606084015161ffff166101208401526080840151166101408301526112c0565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b166040850152816060850152615f118285018b615258565b91508382036080850152615f25828a615258565b915060ff881660a085015283820360c0850152615f428288614ada565b90861660e08501528381036101008501529050615b838185614ada565b6000815180845260208085019450848260051b860182860160005b85811015615fa4578383038952615f92838351614ada565b98850198925090840190600101615f7a565b5090979650505050505050565b60408152615fcc60408201845167ffffffffffffffff169052565b60006020840151615ff5606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604084015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606084015167ffffffffffffffff811660a084015250608084015160c083015260a084015180151560e08401525060c08401516101006160638185018367ffffffffffffffff169052565b60e0860151915061012061608e8186018473ffffffffffffffffffffffffffffffffffffffff169052565b81870151925061014091508282860152808701519250506101a061016081818701526160be6101e0870185614ada565b93508288015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101808188870301818901526160fd8686615470565b9550828a015194508188870301848901526161188686615f5f565b9550808a01516101c089015250505050508281036020840152612cd08185615f5f565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156161835780818460040360031b1b83161693505b505050919050565b60408152600061619e6040830185614ada565b8281036020840152612cd08185614ada565b60a0815260006161c360a0830188614ada565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015267ffffffffffffffff8516606084015282810360808401526162078185614ada565b98975050505050505050565b60006020828403121561622557600080fd5b81516112c081614f4d565b600081518084526020808501945080840160005b8381101561529e57815187529582019590820190600101616244565b6060815260006162736060830186616230565b82810360208401526162858186616230565b915050826040830152949350505050565b6000602082840312156162a857600080fd5b5051919050565b67ffffffffffffffff8181168382160190808211156148745761487461599d565b67ffffffffffffffff83168152604081016112c06020830184614a6d565b600067ffffffffffffffff808316818103615af357615af361599d565b60006020828403121561631d57600080fd5b813567ffffffffffffffff81111561633457600080fd5b611c58848285016155af565b60006040828403121561635257600080fd5b61635a614b66565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461638657600080fd5b815261639460208401615d4c565b60208201529392505050565b6020815260006112c06020830184615f5f565b6000826163c2576163c26159df565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", + Bin: "0x6101806040526014805460ff191660011790553480156200001f57600080fd5b5060405162006f3538038062006f358339810160408190526200004291620008a6565b838383838033806000816200009e5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000d157620000d1816200048d565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080938401819052600380546001600160a01b031916909517600160801b9384021760ff60a01b1916600160a01b90920291909117909355909102909217600455504690528151835114620001815760405162d8548360e71b815260040160405180910390fd5b60608401516001600160a01b03161580620001a4575083516001600160a01b0316155b15620001c3576040516342bcdf7f60e11b815260040160405180910390fd5b83600001516001600160a01b0316634120fccd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c9190620009bd565b6001600160401b03166001146200025657604051636fc2a20760e11b815260040160405180910390fd5b83516001600160a01b0390811660a090815260408601516001600160401b0390811660c05260208701511660e052606086015182166101005260808601518216610140528501511661016052620002cd7f8acd72527118c8324937b1a42e02cd246697c3b633f1742f3cae11de233722b362000538565b6101205260005b83518110156200047e576200032e848281518110620002f757620002f7620009db565b6020026020010151848381518110620003145762000314620009db565b6020026020010151600c6200059f60201b9092919060201c565b50620003e3838281518110620003485762000348620009db565b60200260200101516001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b49190620009f1565b848381518110620003c957620003c9620009db565b6020026020010151600f6200059f60201b9092919060201c565b507f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c8482815181106200041a576200041a620009db565b6020026020010151848381518110620004375762000437620009db565b6020026020010151604051620004639291906001600160a01b0392831681529116602082015260400190565b60405180910390a1620004768162000a18565b9050620002d4565b50505050505050505062000a40565b336001600160a01b03821603620004e75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000095565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008160c05160e051610100516040516020016200058294939291909384526001600160401b039283166020850152911660408301526001600160a01b0316606082015260800190565b604051602081830303815290604052805190602001209050919050565b6000620005b7846001600160a01b03851684620005bf565b949350505050565b6000620005b784846001600160a01b03851660008281526002840160205260408120829055620005b784846000620005f8838362000601565b90505b92915050565b60008181526001830160205260408120546200064a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005fb565b506000620005fb565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156200068e576200068e62000653565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006bf57620006bf62000653565b604052919050565b6001600160a01b0381168114620006dd57600080fd5b50565b80516001600160401b0381168114620006f857600080fd5b919050565b60006001600160401b0382111562000719576200071962000653565b5060051b60200190565b600082601f8301126200073557600080fd5b815160206200074e6200074883620006fd565b62000694565b82815260059290921b840181019181810190868411156200076e57600080fd5b8286015b84811015620007965780516200078881620006c7565b835291830191830162000772565b509695505050505050565b600082601f830112620007b357600080fd5b81516020620007c66200074883620006fd565b82815260059290921b84018101918181019086841115620007e657600080fd5b8286015b84811015620007965780516200080081620006c7565b8352918301918301620007ea565b80516001600160801b0381168114620006f857600080fd5b6000606082840312156200083957600080fd5b604051606081016001600160401b03811182821017156200085e576200085e62000653565b8060405250809150825180151581146200087757600080fd5b815262000887602084016200080e565b60208201526200089a604084016200080e565b60408201525092915050565b600080600080848603610160811215620008bf57600080fd5b60c0811215620008ce57600080fd5b50620008d962000669565b8551620008e681620006c7565b8152620008f660208701620006e0565b60208201526200090960408701620006e0565b604082015260608601516200091e81620006c7565b606082015260808601516200093381620006c7565b608082015260a08601516200094881620006c7565b60a082015260c08601519094506001600160401b03808211156200096b57600080fd5b620009798883890162000723565b945060e08701519150808211156200099057600080fd5b506200099f87828801620007a1565b925050620009b286610100870162000826565b905092959194509250565b600060208284031215620009d057600080fd5b620005f882620006e0565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000a0457600080fd5b815162000a1181620006c7565b9392505050565b60006001820162000a3957634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e0516101005161012051610140516101605161640362000b3260003960008181610381015281816123190152612cdb015260008181610345015281816118090152818161188b015281816122ef0152818161325101526132d801526000612e94015260008181610309015281816122c801526136f30152600081816102a90152818161227601526136d20152600081816102d9015281816122a0015281816128d0015281816136b10152613f1e01526000818161026d015281816122480152612f890152600081816115520152818161159e0152818161194c015261199801526164036000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80637437ff9f1161012a578063b4069b31116100bd578063d3c7c2c71161008c578063f2fde38b11610071578063f2fde38b146107f4578063f52121a514610807578063f8ccbf471461081a57600080fd5b8063d3c7c2c7146107d9578063d7e2bb50146107e157600080fd5b8063b4069b3114610798578063b5767166146107ab578063c5a1d7f0146107be578063c92b2832146107c657600080fd5b8063856c8247116100f9578063856c82471461071b5780638da5cb5b14610747578063afcb95d714610765578063b1dc65a41461078557600080fd5b80637437ff9f1461060a57806379ba5097146106d557806381ff7048146106dd57806385572ffb1461070d57600080fd5b8063546719cd116101bd578063681fba161161018c5780636c6bd845116101715780636c6bd845146105d1578063704b6c02146105e4578063740f4150146105f757600080fd5b8063681fba161461059c578063693928ae146105b157600080fd5b8063546719cd146104d1578063599f6431146105355780635d86f14114610574578063666cab8d1461058757600080fd5b80632dea00f3116101f95780632dea00f3146104525780633a87ac53146104655780634f9f03fe14610478578063506449721461049957600080fd5b806306285c691461022b578063142a98fc146103d4578063181f5a77146103f45780631ef381741461043d575b600080fd5b6103be6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091526040518060c001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b6040516103cb919061498a565b60405180910390f35b6103e76103e2366004614a21565b610837565b6040516103cb9190614aa8565b6104306040518060400160405280601481526020017f45564d3245564d4f666652616d7020312e322e3000000000000000000000000081525081565b6040516103cb9190614b24565b61045061044b366004614d92565b6108b2565b005b610450610460366004614e5f565b610d71565b610450610473366004614ee1565b610d7f565b61048b6104863660046151b7565b61118f565b6040516103cb92919061521b565b6104c36104a7366004614a21565b67ffffffffffffffff1660009081526013602052604090205490565b6040519081526020016103cb565b6104d96111a9565b6040516103cb919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103cb565b61054f61058236600461523b565b61125e565b61058f6112c7565b6040516103cb91906152a9565b6105a4611336565b6040516103cb91906152bc565b6105c46105bf36600461539d565b6113ef565b6040516103cb91906154c1565b6104506105df3660046156bd565b611455565b6104506105f236600461523b565b61145f565b6104506106053660046156bd565b61154f565b6106c86040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a081018252600a5463ffffffff808216835273ffffffffffffffffffffffffffffffffffffffff64010000000090920482166020840152600b549182169383019390935261ffff7401000000000000000000000000000000000000000082041660608301527601000000000000000000000000000000000000000000009004909116608082015290565b6040516103cb9190615778565b6104506116d1565b6007546005546040805163ffffffff808516825264010000000090940490931660208401528201526060016103cb565b6104506102263660046157db565b61072e61072936600461523b565b6117ce565b60405167ffffffffffffffff90911681526020016103cb565b60005473ffffffffffffffffffffffffffffffffffffffff1661054f565b6040805160018152600060208201819052918101919091526060016103cb565b610450610793366004615816565b6118f6565b61054f6107a636600461523b565b611b87565b6104506107b93660046158cd565b611c60565b6104c3611c6a565b6104506107d436600461592f565b611c95565b6105a4611d1a565b61054f6107ef36600461523b565b611dcf565b61045061080236600461523b565b611dde565b6104506108153660046151b7565b611def565b6014546108279060ff1681565b60405190151581526020016103cb565b6000610845600160046159cc565b6002610852608085615a0e565b67ffffffffffffffff166108669190615a35565b60136000610875608087615a4c565b67ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002054901c1660038111156108ac576108ac614a3e565b92915050565b84518460ff16601f821115610928576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f6f206d616e79207472616e736d697474657273000000000000000000000060448201526064015b60405180910390fd5b80600003610992576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f66206d75737420626520706f7369746976650000000000000000000000000000604482015260640161091f565b61099a612049565b6109a3856120cc565b60095460005b81811015610a2f5760086000600983815481106109c8576109c8615a73565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169055610a2881615aa2565b90506109a9565b50875160005b81811015610c2b5760008a8281518110610a5157610a51615a73565b6020026020010151905060006002811115610a6e57610a6e614a3e565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040902054610100900460ff166002811115610aad57610aad614a3e565b14610b14576040517f89a6198900000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f7265706561746564207472616e736d6974746572206164647265737300000000604482015260640161091f565b73ffffffffffffffffffffffffffffffffffffffff8116610b61576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260ff83168152602081016002905273ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260409091208251815460ff9091167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082168117835592840151919283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001617610100836002811115610c1157610c11614a3e565b02179055509050505080610c2490615aa2565b9050610a35565b508851610c3f9060099060208c01906148f4565b506006805460ff838116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909216908b161717905560078054610cc5914691309190600090610c979063ffffffff16615ada565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff168d8d8d8d8d8d612379565b6005600001819055506000600760049054906101000a900463ffffffff16905043600760046101000a81548163ffffffff021916908363ffffffff1602179055507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0581600560000154600760009054906101000a900463ffffffff168e8e8e8e8e8e604051610d5c99989796959493929190615afd565b60405180910390a15050505050505050505050565b610d7b8282612424565b5050565b610d87612049565b60005b83811015610f86576000858583818110610da657610da6615a73565b610dbc926020604090920201908101915061523b565b90506000868684818110610dd257610dd2615a73565b9050604002016020016020810190610dea919061523b565b9050610df7600c836124ce565b610e2d576040517f9c8787c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610e4f600c846124f0565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea7600c83612512565b50610f228173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a9190615b93565b600f90612512565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a1505080610f7f90615aa2565b9050610d8a565b5060005b81811015611188576000838383818110610fa657610fa6615a73565b610fbc926020604090920201908101915061523b565b90506000848484818110610fd257610fd2615a73565b9050604002016020016020810190610fea919061523b565b905073ffffffffffffffffffffffffffffffffffffffff82161580611023575073ffffffffffffffffffffffffffffffffffffffff8116155b1561105a576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611065600c836124ce565b1561109c576040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110a8600c8383612534565b506111248173ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190615b93565b600f9083612534565b506040805173ffffffffffffffffffffffffffffffffffffffff8085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a150508061118190615aa2565b9050610f8a565b5050505050565b6000606061119d8484612557565b915091505b9250929050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152611259906126fa565b905090565b6000808061126d600c856127ac565b91509150816112c0576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161091f565b9392505050565b6060600980548060200260200160405190810160405280929190818152602001828054801561132c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611301575b5050505050905090565b6060611342600f6127cf565b67ffffffffffffffff81111561135a5761135a614b37565b604051908082528060200260200182016040528015611383578160200160208202803683370190505b50905060005b81518110156113eb57600061139f600f836127da565b509050808383815181106113b5576113b5615a73565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152506113e481615aa2565b9050611389565b5090565b60606114488989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061143991508990508a615bb0565b6114438789615bb0565b6127f6565b9998505050505050505050565b610d7b8282612cd9565b60005473ffffffffffffffffffffffffffffffffffffffff16331480159061149f575060025473ffffffffffffffffffffffffffffffffffffffff163314155b156114d6576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c9060200160405180910390a150565b467f0000000000000000000000000000000000000000000000000000000000000000146115da576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015267ffffffffffffffff4616602482015260440161091f565b81515181518114611617576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156116c157600083828151811061163657611636615a73565b602002602001015190508060001415801561166f5750845180518390811061166057611660615a73565b60200260200101516080015181105b156116b0576040517f085e39cf000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161091f565b506116ba81615aa2565b905061161a565b506116cc8383612cd9565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161091f565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b73ffffffffffffffffffffffffffffffffffffffff811660009081526012602052604081205467ffffffffffffffff168015801561184157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b156108ac576040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190615bbd565b6119008787613689565b600554883590808214611949576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161091f565b467f0000000000000000000000000000000000000000000000000000000000000000146119ca576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015246602482015260440161091f565b6040805183815260208c81013560081c63ffffffff16908201527fb04e63db38c49950639fa09d29872f21f5d49d614f3a969d8adf3d4b52e41a62910160405180910390a13360009081526008602090815260408083208151808301909252805460ff80821684529293919291840191610100909104166002811115611a5257611a52614a3e565b6002811115611a6357611a63614a3e565b9052509050600281602001516002811115611a8057611a80614a3e565b148015611ac757506009816000015160ff1681548110611aa257611aa2615a73565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b611afd576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000611b0b856020615a35565b611b16886020615a35565b611b228b610144615bda565b611b2c9190615bda565b611b369190615bda565b9050368114611b7a576040517f8e1192e10000000000000000000000000000000000000000000000000000000081526004810182905236602482015260440161091f565b5050505050505050505050565b60008080611b96600c856127ac565b9150915081611be9576040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161091f565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c589190615b93565b949350505050565b610d7b8282613689565b60006112597f8acd72527118c8324937b1a42e02cd246697c3b633f1742f3cae11de233722b36136ac565b60005473ffffffffffffffffffffffffffffffffffffffff163314801590611cd5575060025473ffffffffffffffffffffffffffffffffffffffff163314155b15611d0c576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d17600382613779565b50565b6060611d26600c6127cf565b67ffffffffffffffff811115611d3e57611d3e614b37565b604051908082528060200260200182016040528015611d67578160200160208202803683370190505b50905060005b81518110156113eb576000611d83600c836127da565b50905080838381518110611d9957611d99615a73565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015250611dc881615aa2565b9050611d6d565b6000808061126d600f856127ac565b611de6612049565b611d178161395e565b333014611e28576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281611e65565b6040805180820190915260008082526020820152815260200190600190039081611e3e5790505b506101408401515190915015611ed257611ecf8361014001518460200151604051602001611eaf919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040528560400151866101600151866127f6565b90505b604083015173ffffffffffffffffffffffffffffffffffffffff163b1580611f3c57506040830151611f3a9073ffffffffffffffffffffffffffffffffffffffff167f85572ffb00000000000000000000000000000000000000000000000000000000613a53565b155b15611f4657505050565b600a546000908190640100000000900473ffffffffffffffffffffffffffffffffffffffff16633cf97983611f7b8786613a6f565b611388886080015189604001516040518563ffffffff1660e01b8152600401611fa79493929190615bed565b6000604051808303816000875af1158015611fc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261200c9190810190615cbf565b915091508161118857806040517f0a8d6e8c00000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b60005473ffffffffffffffffffffffffffffffffffffffff1633146120ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161091f565b565b6000818060200190518101906120e29190615d60565b602081015190915073ffffffffffffffffffffffffffffffffffffffff16612136576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600a805460208085015173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9586161792909217909255604080850151600b80546060808901516080808b0151909916760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff61ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff00000000000000000000000000000000000000000000909416958816959095179290921791909116929092179055815160c0810183527f00000000000000000000000000000000000000000000000000000000000000008416815267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116958201959095527f0000000000000000000000000000000000000000000000000000000000000000909416848301527f00000000000000000000000000000000000000000000000000000000000000008316908401527f00000000000000000000000000000000000000000000000000000000000000008216938301939093527f00000000000000000000000000000000000000000000000000000000000000001660a082015290517f737ef22d3f6615e342ed21c69e06620dbc5c8a261ed7cfb2ce214806b1f76eda9161236d918490615dfb565b60405180910390a15050565b6000808a8a8a8a8a8a8a8a8a60405160200161239d99989796959493929190615eca565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179150509998505050505050505050565b60006002612433608085615a0e565b67ffffffffffffffff166124479190615a35565b90506000601381612459608087615a4c565b67ffffffffffffffff168152602081019190915260400160002054905081612483600160046159cc565b901b19168183600381111561249a5761249a614a3e565b901b1780601360006124ad608088615a4c565b67ffffffffffffffff16815260208101919091526040016000205550505050565b60006112c08373ffffffffffffffffffffffffffffffffffffffff8416613b1f565b60006112c08373ffffffffffffffffffffffffffffffffffffffff8416613b2b565b60006112c08373ffffffffffffffffffffffffffffffffffffffff8416613b37565b6000611c588473ffffffffffffffffffffffffffffffffffffffff851684613b43565b6040517ff52121a5000000000000000000000000000000000000000000000000000000008152600090606090309063f52121a59061259b9087908790600401615fb1565b600060405180830381600087803b1580156125b557600080fd5b505af19250505080156125c6575060015b6126df573d8080156125f4576040519150601f19603f3d011682016040523d82523d6000602084013e6125f9565b606091505b506126038161613b565b7fffffffff00000000000000000000000000000000000000000000000000000000167f0a8d6e8c00000000000000000000000000000000000000000000000000000000148061269b57506126568161613b565b7fffffffff00000000000000000000000000000000000000000000000000000000167fe1cd550900000000000000000000000000000000000000000000000000000000145b156126ab576003925090506111a2565b806040517fcf19edfd00000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b50506040805160208101909152600081526002909250929050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261278882606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261276c91906159cc565b85608001516fffffffffffffffffffffffffffffffff16613b66565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b60008061119d8473ffffffffffffffffffffffffffffffffffffffff8516613b85565b60006108ac82613b94565b60008080806127e98686613b9f565b9097909650945050505050565b60606000865167ffffffffffffffff81111561281457612814614b37565b60405190808252806020026020018201604052801561285957816020015b60408051808201909152600080825260208201528152602001906001900390816128325790505b50905060005b8751811015612ca857600061289089838151811061287f5761287f615a73565b60200260200101516000015161125e565b90508073ffffffffffffffffffffffffffffffffffffffff16638627fad689898c86815181106128c2576128c2615a73565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000008b888151811061290157612901615a73565b60200260200101518b898151811061291b5761291b615a73565b602002602001015160405160200161293492919061618b565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016129639594939291906161b0565b600060405180830381600087803b15801561297d57600080fd5b505af192505050801561298e575060015b612bb1573d8080156129bc576040519150601f19603f3d011682016040523d82523d6000602084013e6129c1565b606091505b5060006129cd8261613b565b90507f9725942a000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000082161480612a6057507ff94ebcd1000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b80612aac57507f15279c08000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b80612af857507f1a76572a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b80612b4457507fd0c8d23a000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216145b15612b7d57816040517f30dabb5900000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b816040517fe1cd550900000000000000000000000000000000000000000000000000000000815260040161091f9190614b24565b8073ffffffffffffffffffffffffffffffffffffffff166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c209190615b93565b838381518110612c3257612c32615a73565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff90911690528851899083908110612c6b57612c6b615a73565b602002602001015160200151838381518110612c8957612c89615a73565b602090810291909101810151015250612ca181615aa2565b905061285f565b50600b54612ccd90829073ffffffffffffffffffffffffffffffffffffffff16613bae565b90505b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d689190616213565b15612d9f576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151516000819003612ddc576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260200151518114612e1a576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff811115612e3557612e35614b37565b604051908082528060200260200182016040528015612e5e578160200160208202803683370190505b50905060005b82811015612f3e57600085600001518281518110612e8457612e84615a73565b60200260200101519050612eb8817f0000000000000000000000000000000000000000000000000000000000000000613d96565b838381518110612eca57612eca615a73565b602002602001018181525050806101800151838381518110612eee57612eee615a73565b602002602001015114612f2d576040517f7185cf6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50612f3781615aa2565b9050612e64565b50604080850151606086015191517f3204887500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692633204887592612fbf92879291600401616260565b602060405180830381865afa158015612fdc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130009190616296565b90508060000361303c576040517fea75680100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351151560005b848110156136805760008760000151828151811061306357613063615a73565b60200260200101519050600061307c8260600151610837565b9050600081600381111561309257613092614a3e565b14806130af575060038160038111156130ad576130ad614a3e565b145b6130f75760608201516040517f50a6e05200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b83156131b457600a5460009063ffffffff1661311387426159cc565b11905080806131335750600382600381111561313157613131614a3e565b145b613169576040517f6358b0d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88848151811061317b5761317b615a73565b60200260200101516000146131ae5788848151811061319c5761319c615a73565b60200260200101518360800181815250505b50613211565b60008160038111156131c8576131c8614a3e565b146132115760608201516040517f67d9ba0f00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b60208083015173ffffffffffffffffffffffffffffffffffffffff1660009081526012909152604090205467ffffffffffffffff168015801561328957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615155b1561342c5760208301516040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063856c824790602401602060405180830381865afa158015613321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133459190615bbd565b60c084015190915067ffffffffffffffff166133628260016162af565b67ffffffffffffffff16146133cf57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fe44a20935573a783dd0d5991c92d7b6a0eb3173566530364db3ec10e9a990b5d60405160405180910390a3505050613670565b60208381015173ffffffffffffffffffffffffffffffffffffffff16600090815260129091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83161790555b600082600381111561344057613440614a3e565b036134cc5760c083015167ffffffffffffffff1661345f8260016162af565b67ffffffffffffffff16146134cc57826020015173ffffffffffffffffffffffffffffffffffffffff168360c0015167ffffffffffffffff167fd32ddb11d71e3d63411d37b09f9a8b28664f1cb1338bfd1413c173b0ebf4123760405160405180910390a3505050613670565b60008a6020015185815181106134e4576134e4615a73565b602002602001015190506134f9848251613f1c565b61350884606001516001612424565b6000806135158684612557565b91509150613527866060015183612424565b600382600381111561353b5761353b614a3e565b1415801561355b5750600282600381111561355857613558614a3e565b14155b1561359a578560600151826040517f9e26160300000000000000000000000000000000000000000000000000000000815260040161091f9291906162d0565b60008560038111156135ae576135ae614a3e565b0361361b5760208087015173ffffffffffffffffffffffffffffffffffffffff166000908152601290915260408120805467ffffffffffffffff16916135f3836162ee565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b856101800151866060015167ffffffffffffffff167fd4f851956a5d67c3997d1c9205045fef79bae2947fdee7e9e2641abc7391ef65848460405161366192919061521b565b60405180910390a35050505050505b61367981615aa2565b9050613043565b50505050505050565b610d7b6136988284018461630b565b604080516000815260208101909152612cd9565b6000817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060405160200161375c949392919093845267ffffffffffffffff92831660208501529116604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b604051602081830303815290604052805190602001209050919050565b81546000906137a290700100000000000000000000000000000000900463ffffffff16426159cc565b9050801561384457600183015483546137ea916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613b66565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b6020820151835461386a916fffffffffffffffffffffffffffffffff90811691166140f2565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906139519084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b60405180910390a1505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036139dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161091f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000613a5e83614108565b80156112c057506112c0838361416c565b6040805160a08101825260008082526020820152606091810182905281810182905260808101919091526040518060a001604052808461018001518152602001846000015167ffffffffffffffff1681526020018460200151604051602001613af4919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040528152602001846101200151815260200183815250905092915050565b60006112c0838361423b565b60006112c08383614247565b60006112c083836142d1565b6000611c58848473ffffffffffffffffffffffffffffffffffffffff85166142ee565b6000612cd085613b768486615a35565b613b809087615bda565b6140f2565b60008080806127e9868661430b565b60006108ac82614345565b60008080806127e98686614350565b81516000805b82811015613d825760008473ffffffffffffffffffffffffffffffffffffffff1663d02641a0878481518110613bec57613bec615a73565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016040805180830381865afa158015613c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c849190616340565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116600003613d1657858281518110613cbf57613cbf615a73565b6020908102919091010151516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161091f565b613d64868381518110613d2b57613d2b615a73565b602002602001015160200151827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661437b90919063ffffffff16565b613d6e9084615bda565b92505080613d7b90615aa2565b9050613bb4565b50613d9060038260006143b8565b50505050565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b6101000151604051602001613e3998979695949392919073ffffffffffffffffffffffffffffffffffffffff9889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b6040516020818303038152906040528051906020012085610120015180519060200120866101400151604051602001613e7291906154c1565b60405160208183030381529060405280519060200120876101600151604051602001613e9e91906163a0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16826000015167ffffffffffffffff1614613f9c5781516040517f1279ec8a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b600b54610140830151517401000000000000000000000000000000000000000090910461ffff16101561400d5760608201516040517f099d3f7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b80826101400151511461405e5760608201516040517f8808f8e700000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161091f565b600b546101208301515176010000000000000000000000000000000000000000000090910463ffffffff161015610d7b57600b54610120830151516040517f8693378900000000000000000000000000000000000000000000000000000000815276010000000000000000000000000000000000000000000090920463ffffffff166004830152602482015260440161091f565b600081831061410157816112c0565b5090919050565b6000614134827f01ffc9a70000000000000000000000000000000000000000000000000000000061416c565b80156108ac5750614165827fffffffff0000000000000000000000000000000000000000000000000000000061416c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015614224575060208210155b80156142305750600081115b979650505050505050565b60006112c0838361473b565b60008181526002830160205260408120548015158061426b575061426b848461423b565b6112c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640161091f565b600081815260028301602052604081208190556112c08383614753565b60008281526002840160205260408120829055611c58848461475f565b600081815260028301602052604081205481908061433a5761432d858561423b565b9250600091506111a29050565b6001925090506111a2565b60006108ac8261476b565b6000808061435e8585614775565b600081815260029690960160205260409095205494959350505050565b6000670de0b6b3a76400006143ae837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616615a35565b6112c091906163b3565b825474010000000000000000000000000000000000000000900460ff1615806143df575081155b156143e957505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061442f90700100000000000000000000000000000000900463ffffffff16426159cc565b905080156144ef5781831115614471576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546144ab9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613b66565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156145a65773ffffffffffffffffffffffffffffffffffffffff841661454e576040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600481018390526024810186905260440161091f565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff8516604482015260640161091f565b848310156146b95760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906145ea90826159cc565b6145f4878a6159cc565b6145fe9190615bda565b61460891906163b3565b905073ffffffffffffffffffffffffffffffffffffffff8616614661576040517f15279c08000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260440161091f565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff8716604482015260640161091f565b6146c385846159cc565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b600081815260018301602052604081205415156112c0565b60006112c08383614781565b60006112c0838361487b565b60006108ac825490565b60006112c083836148ca565b6000818152600183016020526040812054801561486a5760006147a56001836159cc565b85549091506000906147b9906001906159cc565b905081811461481e5760008660000182815481106147d9576147d9615a73565b90600052602060002001549050808760000184815481106147fc576147fc615a73565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061482f5761482f6163c7565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108ac565b60009150506108ac565b5092915050565b60008181526001830160205260408120546148c2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108ac565b5060006108ac565b60008260000182815481106148e1576148e1615a73565b9060005260206000200154905092915050565b82805482825590600052602060002090810192821561496e579160200282015b8281111561496e57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614914565b506113eb9291505b808211156113eb5760008155600101614976565b60c081016108ac828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b67ffffffffffffffff81168114611d1757600080fd5b8035614a1c816149fb565b919050565b600060208284031215614a3357600080fd5b81356112c0816149fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110614aa4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016108ac8284614a6d565b60005b83811015614ad1578181015183820152602001614ab9565b50506000910152565b60008151808452614af2816020860160208601614ab6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112c06020830184614ada565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715614b8957614b89614b37565b60405290565b6040516101a0810167ffffffffffffffff81118282101715614b8957614b89614b37565b6040516080810167ffffffffffffffff81118282101715614b8957614b89614b37565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614c1d57614c1d614b37565b604052919050565b600067ffffffffffffffff821115614c3f57614c3f614b37565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611d1757600080fd5b8035614a1c81614c49565b600082601f830112614c8757600080fd5b81356020614c9c614c9783614c25565b614bd6565b82815260059290921b84018101918181019086841115614cbb57600080fd5b8286015b84811015614cdf578035614cd281614c49565b8352918301918301614cbf565b509695505050505050565b803560ff81168114614a1c57600080fd5b600067ffffffffffffffff821115614d1557614d15614b37565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112614d5257600080fd5b8135614d60614c9782614cfb565b818152846020838601011115614d7557600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215614dab57600080fd5b863567ffffffffffffffff80821115614dc357600080fd5b614dcf8a838b01614c76565b97506020890135915080821115614de557600080fd5b614df18a838b01614c76565b9650614dff60408a01614cea565b95506060890135915080821115614e1557600080fd5b614e218a838b01614d41565b9450614e2f60808a01614a11565b935060a0890135915080821115614e4557600080fd5b50614e5289828a01614d41565b9150509295509295509295565b60008060408385031215614e7257600080fd5b8235614e7d816149fb565b9150602083013560048110614e9157600080fd5b809150509250929050565b60008083601f840112614eae57600080fd5b50813567ffffffffffffffff811115614ec657600080fd5b6020830191508360208260061b85010111156111a257600080fd5b60008060008060408587031215614ef757600080fd5b843567ffffffffffffffff80821115614f0f57600080fd5b614f1b88838901614e9c565b90965094506020870135915080821115614f3457600080fd5b50614f4187828801614e9c565b95989497509550505050565b8015158114611d1757600080fd5b8035614a1c81614f4d565b600082601f830112614f7757600080fd5b81356020614f87614c9783614c25565b82815260069290921b84018101918181019086841115614fa657600080fd5b8286015b84811015614cdf5760408189031215614fc35760008081fd5b614fcb614b66565b8135614fd681614c49565b81528185013585820152835291830191604001614faa565b6000614ffc614c9784614c25565b8381529050602080820190600585901b84018681111561501b57600080fd5b845b8181101561505757803567ffffffffffffffff81111561503d5760008081fd5b61504989828901614d41565b85525092820192820161501d565b505050509392505050565b600082601f83011261507357600080fd5b6112c083833560208501614fee565b60006101a0828403121561509557600080fd5b61509d614b8f565b90506150a882614a11565b81526150b660208301614c6b565b60208201526150c760408301614c6b565b60408201526150d860608301614a11565b6060820152608082013560808201526150f360a08301614f5b565b60a082015261510460c08301614a11565b60c082015261511560e08301614c6b565b60e082015261010082810135908201526101208083013567ffffffffffffffff8082111561514257600080fd5b61514e86838701614d41565b8385015261014092508285013591508082111561516a57600080fd5b61517686838701614f66565b8385015261016092508285013591508082111561519257600080fd5b5061519f85828601615062565b82840152505061018080830135818301525092915050565b600080604083850312156151ca57600080fd5b823567ffffffffffffffff808211156151e257600080fd5b6151ee86838701615082565b9350602085013591508082111561520457600080fd5b5061521185828601615062565b9150509250929050565b6152258184614a6d565b604060208201526000611c586040830184614ada565b60006020828403121561524d57600080fd5b81356112c081614c49565b600081518084526020808501945080840160005b8381101561529e57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161526c565b509495945050505050565b6020815260006112c06020830184615258565b6020808252825182820181905260009190848201906040850190845b8181101561530a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016152d8565b50909695505050505050565b60008083601f84011261532857600080fd5b50813567ffffffffffffffff81111561534057600080fd5b6020830191508360208285010111156111a257600080fd5b60008083601f84011261536a57600080fd5b50813567ffffffffffffffff81111561538257600080fd5b6020830191508360208260051b85010111156111a257600080fd5b60008060008060008060008060a0898b0312156153b957600080fd5b883567ffffffffffffffff808211156153d157600080fd5b6153dd8c838d01614f66565b995060208b01359150808211156153f357600080fd5b6153ff8c838d01615316565b909950975060408b0135915061541482614c49565b90955060608a0135908082111561542a57600080fd5b6154368c838d01615358565b909650945060808b013591508082111561544f57600080fd5b5061545c8b828c01615358565b999c989b5096995094979396929594505050565b600081518084526020808501945080840160005b8381101561529e578151805173ffffffffffffffffffffffffffffffffffffffff1688528301518388015260409096019590820190600101615484565b6020815260006112c06020830184615470565b600082601f8301126154e557600080fd5b813560206154f5614c9783614c25565b82815260059290921b8401810191818101908684111561551457600080fd5b8286015b84811015614cdf57803567ffffffffffffffff8111156155385760008081fd5b6155468986838b0101615062565b845250918301918301615518565b600082601f83011261556557600080fd5b81356020615575614c9783614c25565b82815260059290921b8401810191818101908684111561559457600080fd5b8286015b84811015614cdf5780358352918301918301615598565b6000608082840312156155c157600080fd5b6155c9614bb3565b9050813567ffffffffffffffff808211156155e357600080fd5b818401915084601f8301126155f757600080fd5b81356020615607614c9783614c25565b82815260059290921b8401810191818101908884111561562657600080fd5b8286015b8481101561565e578035868111156156425760008081fd5b6156508b86838b0101615082565b84525091830191830161562a565b508652508581013593508284111561567557600080fd5b615681878588016154d4565b9085015250604084013591508082111561569a57600080fd5b506156a784828501615554565b6040830152506060820135606082015292915050565b600080604083850312156156d057600080fd5b823567ffffffffffffffff808211156156e857600080fd5b6156f4868387016155af565b935060209150818501358181111561570b57600080fd5b85019050601f8101861361571e57600080fd5b803561572c614c9782614c25565b81815260059190911b8201830190838101908883111561574b57600080fd5b928401925b8284101561576957833582529284019290840190615750565b80955050505050509250929050565b60a081016108ac828463ffffffff808251168352602082015173ffffffffffffffffffffffffffffffffffffffff8082166020860152806040850151166040860152505061ffff6060830151166060840152806080830151166080840152505050565b6000602082840312156157ed57600080fd5b813567ffffffffffffffff81111561580457600080fd5b820160a081850312156112c057600080fd5b60008060008060008060008060e0898b03121561583257600080fd5b606089018a81111561584357600080fd5b8998503567ffffffffffffffff8082111561585d57600080fd5b6158698c838d01615316565b909950975060808b013591508082111561588257600080fd5b61588e8c838d01615358565b909750955060a08b01359150808211156158a757600080fd5b506158b48b828c01615358565b999c989b50969995989497949560c00135949350505050565b600080602083850312156158e057600080fd5b823567ffffffffffffffff8111156158f757600080fd5b61590385828601615316565b90969095509350505050565b80356fffffffffffffffffffffffffffffffff81168114614a1c57600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964614b37565b604052823561597281614f4d565b81526159806020840161590f565b60208201526159916040840161590f565b60408201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156108ac576108ac61599d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680615a2957615a296159df565b92169190910692915050565b80820281158282048414176108ac576108ac61599d565b600067ffffffffffffffff80841680615a6757615a676159df565b92169190910492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615ad357615ad361599d565b5060010190565b600063ffffffff808316818103615af357615af361599d565b6001019392505050565b600061012063ffffffff808d1684528b6020850152808b16604085015250806060840152615b2d8184018a615258565b90508281036080840152615b418189615258565b905060ff871660a084015282810360c0840152615b5e8187614ada565b905067ffffffffffffffff851660e0840152828103610100840152615b838185614ada565b9c9b505050505050505050505050565b600060208284031215615ba557600080fd5b81516112c081614c49565b60006112c0368484614fee565b600060208284031215615bcf57600080fd5b81516112c0816149fb565b808201808211156108ac576108ac61599d565b608081528451608082015267ffffffffffffffff60208601511660a08201526000604086015160a060c0840152615c28610120840182614ada565b905060608701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80808584030160e0860152615c648383614ada565b925060808901519150808584030161010086015250615c838282615470565b92505050615c97602083018661ffff169052565b836040830152612cd0606083018473ffffffffffffffffffffffffffffffffffffffff169052565b60008060408385031215615cd257600080fd5b8251615cdd81614f4d565b602084015190925067ffffffffffffffff811115615cfa57600080fd5b8301601f81018513615d0b57600080fd5b8051615d19614c9782614cfb565b818152866020838501011115615d2e57600080fd5b615d3f826020830160208601614ab6565b8093505050509250929050565b805163ffffffff81168114614a1c57600080fd5b600060a08284031215615d7257600080fd5b60405160a0810181811067ffffffffffffffff82111715615d9557615d95614b37565b604052615da183615d4c565b81526020830151615db181614c49565b60208201526040830151615dc481614c49565b6040820152606083015161ffff81168114615dde57600080fd5b6060820152615def60808401615d4c565b60808201529392505050565b6101608101615e6d828573ffffffffffffffffffffffffffffffffffffffff808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015250508060608301511660608401528060808301511660808401528060a08301511660a0840152505050565b825163ffffffff90811660c0840152602084015173ffffffffffffffffffffffffffffffffffffffff90811660e0850152604085015116610100840152606084015161ffff166101208401526080840151166101408301526112c0565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b166040850152816060850152615f118285018b615258565b91508382036080850152615f25828a615258565b915060ff881660a085015283820360c0850152615f428288614ada565b90861660e08501528381036101008501529050615b838185614ada565b6000815180845260208085019450848260051b860182860160005b85811015615fa4578383038952615f92838351614ada565b98850198925090840190600101615f7a565b5090979650505050505050565b60408152615fcc60408201845167ffffffffffffffff169052565b60006020840151615ff5606084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604084015173ffffffffffffffffffffffffffffffffffffffff8116608084015250606084015167ffffffffffffffff811660a084015250608084015160c083015260a084015180151560e08401525060c08401516101006160638185018367ffffffffffffffff169052565b60e0860151915061012061608e8186018473ffffffffffffffffffffffffffffffffffffffff169052565b81870151925061014091508282860152808701519250506101a061016081818701526160be6101e0870185614ada565b93508288015192507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101808188870301818901526160fd8686615470565b9550828a015194508188870301848901526161188686615f5f565b9550808a01516101c089015250505050508281036020840152612cd08185615f5f565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156161835780818460040360031b1b83161693505b505050919050565b60408152600061619e6040830185614ada565b8281036020840152612cd08185614ada565b60a0815260006161c360a0830188614ada565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015267ffffffffffffffff8516606084015282810360808401526162078185614ada565b98975050505050505050565b60006020828403121561622557600080fd5b81516112c081614f4d565b600081518084526020808501945080840160005b8381101561529e57815187529582019590820190600101616244565b6060815260006162736060830186616230565b82810360208401526162858186616230565b915050826040830152949350505050565b6000602082840312156162a857600080fd5b5051919050565b67ffffffffffffffff8181168382160190808211156148745761487461599d565b67ffffffffffffffff83168152604081016112c06020830184614a6d565b600067ffffffffffffffff808316818103615af357615af361599d565b60006020828403121561631d57600080fd5b813567ffffffffffffffff81111561633457600080fd5b611c58848285016155af565b60006040828403121561635257600080fd5b61635a614b66565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461638657600080fd5b815261639460208401615d4c565b60208201529392505050565b6020815260006112c06020830184615f5f565b6000826163c2576163c26159df565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", } var EVM2EVMOffRampHelperABI = EVM2EVMOffRampHelperMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/evm_2_evm_onramp/evm_2_evm_onramp.go b/core/gethwrappers/ccip/generated/evm_2_evm_onramp/evm_2_evm_onramp.go index fdff6a2af5..6d1ad41d79 100644 --- a/core/gethwrappers/ccip/generated/evm_2_evm_onramp/evm_2_evm_onramp.go +++ b/core/gethwrappers/ccip/generated/evm_2_evm_onramp/evm_2_evm_onramp.go @@ -140,7 +140,7 @@ type RateLimiterTokenBucket struct { var EVM2EVMOnRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"maxNopFeesJuels\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"tokensAndPools\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structEVM2EVMOnRamp.FeeTokenConfigArgs[]\",\"name\":\"feeTokenConfigs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOnRamp.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"internalType\":\"structEVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BadARMSignal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"}],\"name\":\"InvalidNopAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenPoolConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWithdrawParams\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkBalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxFeeBalanceReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoFeesToPay\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoNopsToPay\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"NotAFeeToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdminOrOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdminOrNop\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PoolDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenPoolMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyNops\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"strict\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sourceTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPSendRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"maxNopFeesJuels\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOnRamp.FeeTokenConfigArgs[]\",\"name\":\"feeConfig\",\"type\":\"tuple[]\"}],\"name\":\"FeeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NopPaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nopWeightsTotal\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"}],\"name\":\"NopsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structEVM2EVMOnRamp.TokenTransferFeeConfigArgs[]\",\"name\":\"transferFeeConfig\",\"type\":\"tuple[]\"}],\"name\":\"TokenTransferFeeConfigSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"internalType\":\"structInternal.PoolUpdate[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"applyPoolUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getFeeTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structEVM2EVMOnRamp.FeeTokenConfig\",\"name\":\"feeTokenConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNopFeesJuels\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNops\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"internalType\":\"structEVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"weightsTotal\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getSenderNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint96\",\"name\":\"maxNopFeesJuels\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"internalType\":\"structEVM2EVMOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOnRamp.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"linkAvailableForPayment\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payNops\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"maxTokensLength\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceRegistry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"maxDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"minTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferFeeUSD\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplier\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structEVM2EVMOnRamp.FeeTokenConfigArgs[]\",\"name\":\"feeTokenConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setFeeTokenConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"nop\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"weight\",\"type\":\"uint16\"}],\"internalType\":\"structEVM2EVMOnRamp.NopAndWeight[]\",\"name\":\"nopsAndWeights\",\"type\":\"tuple[]\"}],\"name\":\"setNops\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"setRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"ratio\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"internalType\":\"structEVM2EVMOnRamp.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setTokenTransferFeeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawNonLinkFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6101806040523480156200001257600080fd5b506040516200834c3803806200834c833981016040819052620000359162001e1d565b8333806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000323565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080909301839052600380546001600160a01b031916909417600160801b9283021760ff60a01b1916600160a01b90910217909255029091176004555086516001600160a01b0316158062000169575060208701516001600160401b0316155b8062000180575060408701516001600160401b0316155b8062000197575060608701516001600160401b0316155b80620001ae575060c08701516001600160a01b0316155b15620001cd576040516306b7c75960e31b815260040160405180910390fd5b6020808801516040808a015181517f4e9041136a73e90544063222a317017e85c604900d37085437c6051f5370f7f8948101949094526001600160401b039283169184019190915216606082015230608082015260a00160408051601f198184030181529181528151602092830120608090815289516001600160a01b0390811660e052928a01516001600160401b0390811661010052918a015182166101205260608a015190911660a0908152908901516001600160601b031660c0908152908901518216610140528801511661016052620002aa86620003ce565b620002b58362000645565b620002c082620007e0565b620002cb81620008e5565b6040805160008082526020820190925262000316916200030e565b6040805180820190915260008082526020820152815260200190600190039081620002e65790505b508662000b0f565b5050505050505062002408565b336001600160a01b038216036200037d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e08101516001600160a01b0316620003fa576040516306b7c75960e31b815260040160405180910390fd5b80600560008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601a6101000a81548161ffff021916908361ffff160217905550608082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160006101000a81548161ffff021916908361ffff16021790555060c08201518160010160026101000a81548161ffff021916908361ffff16021790555060e08201518160010160046101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555061012082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055509050507f2a57f7c2027cf032c78b77d4d8d2fbd20ad22e5d5e5b5fb23ac7d7820d44adc66040518060e0016040528060e0516001600160a01b03168152602001610100516001600160401b03168152602001610120516001600160401b0316815260200160a0516001600160401b0316815260200160c0516001600160601b03168152602001610140516001600160a01b03168152602001610160516001600160a01b0316815250826040516200063a92919062001ff2565b60405180910390a150565b60005b8151811015620007ae57600082828151811062000669576200066962002072565b6020908102919091018101516040805160c080820183528385015163ffffffff908116835283850151811683870190815260608087015183168587019081526080808901516001600160401b0390811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600d909a529690982094518554925198519151965194511515600160e01b0260ff60e01b19958916600160a01b0295909516600160a01b600160e81b0319979098166c0100000000000000000000000002600160601b600160a01b0319928516680100000000000000000292909216600160401b600160a01b0319998516640100000000026001600160401b0319909416919094161791909117969096161794909417919091169190911791909117905550620007a6816200209e565b905062000648565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8816040516200063a9190620020ba565b60005b8151811015620008b357600082828151811062000804576200080462002072565b60209081029190910181015160408051606080820183528385015161ffff90811683528385015163ffffffff90811684880190815292860151811684860190815295516001600160a01b03166000908152600e909752939095209151825491519451841666010000000000000263ffffffff60301b1995909416620100000265ffffffffffff19909216951694909417939093179190911617905550620008ab816200209e565b9050620007e3565b507f3df02211160f78e9bbed13e8bf0752035362a05f0651a5e25007acfb659c3620816040516200063a919062002172565b805160408111156200090a57604051635ad0867d60e11b815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff161580159062000954575060105463ffffffff6c010000000000000000000000008204166001600160601b0390911610155b1562000964576200096462000e12565b600062000972600762001012565b90505b8015620009be576000620009986200098f600184620021e1565b60079062001025565b509050620009a860078262001043565b505080620009b690620021f7565b905062000975565b506000805b8281101562000aa6576000848281518110620009e357620009e362002072565b6020026020010151600001519050600085838151811062000a085762000a0862002072565b602002602001015160200151905060e0516001600160a01b0316826001600160a01b0316148062000a4057506001600160a01b038216155b1562000a6b57604051634de938d160e01b81526001600160a01b038316600482015260240162000084565b62000a7d60078361ffff841662001061565b5062000a8e61ffff82168562002211565b935050508062000a9e906200209e565b9050620009c3565b506010805463ffffffff60601b19166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd249062000b02908390869062002231565b60405180910390a1505050565b60005b825181101562000c4b57600083828151811062000b335762000b3362002072565b6020026020010151600001519050600084838151811062000b585762000b5862002072565b6020908102919091018101510151905062000b75600a8362001081565b62000b9f576040516373913ebd60e01b81526001600160a01b038316600482015260240162000084565b6001600160a01b03811662000bb6600a8462001098565b6001600160a01b03161462000bde57604051630d98f73360e31b815260040160405180910390fd5b62000beb600a83620010af565b1562000c3557604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b50508062000c43906200209e565b905062000b12565b5060005b815181101562000e0d57600082828151811062000c705762000c7062002072565b6020026020010151600001519050600083838151811062000c955762000c9562002072565b602002602001015160200151905060006001600160a01b0316826001600160a01b0316148062000ccc57506001600160a01b038116155b1562000cea5760405162d8548360e71b815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d29573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d4f91906200229e565b6001600160a01b0316826001600160a01b03161462000d8157604051630d98f73360e31b815260040160405180910390fd5b62000d8f600a8383620010c6565b1562000dde57604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a162000df7565b604051633caf458560e01b815260040160405180910390fd5b50508062000e05906200209e565b905062000c4f565b505050565b6000546001600160a01b0316331480159062000e3957506002546001600160a01b03163314155b801562000e50575062000e4e600733620010de565b155b1562000e6f5760405163032bb72b60e31b815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff16600081900362000eab5760405163990e30bf60e01b815260040160405180910390fd5b6010546001600160601b03168181101562000ed9576040516311a1ee3b60e31b815260040160405180910390fd5b600062000ee5620010f5565b121562000f0557604051631e9acf1760e31b815260040160405180910390fd5b80600062000f14600762001012565b905060005b8181101562000fec5760008062000f3260078462001025565b909250905060008762000f4f836001600160601b038a16620022be565b62000f5b9190620022d8565b905062000f698187620022fb565b60e05190965062000f8e906001600160a01b0316846001600160601b03841662001183565b6040516001600160601b03821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a25050508062000fe4906200209e565b905062000f19565b5050601080546001600160601b0319166001600160601b03929092169190911790555050565b60006200101f82620011db565b92915050565b6000808080620010368686620011e8565b9097909650945050505050565b60006200105a836001600160a01b03841662001215565b9392505050565b600062001079846001600160a01b0385168462001234565b949350505050565b60006200105a836001600160a01b03841662001253565b60006200105a836001600160a01b03841662001261565b60006200105a836001600160a01b0384166200126f565b600062001079846001600160a01b038516846200127d565b60006200105a836001600160a01b03841662001295565b60105460e0516040516370a0823160e01b81523060048201526000926001600160601b0316916001600160a01b0316906370a0823190602401602060405180830381865afa1580156200114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117291906200231e565b6200117e919062002338565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663a9059cbb60e01b1790915262000e0d918591620012a316565b60006200101f8262001374565b60008080620011f885856200137f565b600081815260029690960160205260409095205494959350505050565b600081815260028301602052604081208190556200105a83836200138d565b600082815260028401602052604081208290556200107984846200139b565b60006200105a838362001295565b60006200105a8383620013a9565b60006200105a838362001215565b60006200107984846001600160a01b03851662001234565b60006200105a83836200141e565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620012f2906001600160a01b03851690849062001437565b80519091501562000e0d57808060200190518101906200131391906200235b565b62000e0d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b60006200101f825490565b60006200105a838362001448565b60006200105a838362001475565b60006200105a838362001580565b600081815260028301602052604081205480151580620013d05750620013d0848462001295565b6200105a5760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640162000084565b600081815260018301602052604081205415156200105a565b6060620010798484600085620015d2565b600082600001828154811062001462576200146262002072565b9060005260206000200154905092915050565b600081815260018301602052604081205480156200156e5760006200149c600183620021e1565b8554909150600090620014b290600190620021e1565b90508181146200151e576000866000018281548110620014d657620014d662002072565b9060005260206000200154905080876000018481548110620014fc57620014fc62002072565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062001532576200153262002379565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200101f565b60009150506200101f565b5092915050565b6000818152600183016020526040812054620015c9575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200101f565b5060006200101f565b606082471015620016355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b03168587604051620016539190620023b5565b60006040518083038185875af1925050503d806000811462001692576040519150601f19603f3d011682016040523d82523d6000602084013e62001697565b606091505b509092509050620016ab87838387620016b6565b979650505050505050565b606083156200172a57825160000362001722576001600160a01b0385163b620017225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b508162001079565b620010798383815115620017415781518083602001fd5b8060405162461bcd60e51b8152600401620000849190620023d3565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156200179857620017986200175d565b60405290565b60405161014081016001600160401b03811182821017156200179857620017986200175d565b604080519081016001600160401b03811182821017156200179857620017986200175d565b604051608081016001600160401b03811182821017156200179857620017986200175d565b604051601f8201601f191681016001600160401b03811182821017156200183957620018396200175d565b604052919050565b6001600160a01b03811681146200185757600080fd5b50565b8051620018678162001841565b919050565b80516001600160401b03811681146200186757600080fd5b600060e082840312156200189757600080fd5b620018a162001773565b90508151620018b08162001841565b8152620018c0602083016200186c565b6020820152620018d3604083016200186c565b6040820152620018e6606083016200186c565b606082015260808201516001600160601b03811681146200190657600080fd5b60808201526200191960a083016200185a565b60a08201526200192c60c083016200185a565b60c082015292915050565b805161ffff811681146200186757600080fd5b805163ffffffff811681146200186757600080fd5b600061014082840312156200197357600080fd5b6200197d6200179e565b90506200198a826200185a565b81526200199a6020830162001937565b6020820152620019ad604083016200194a565b6040820152620019c06060830162001937565b6060820152620019d3608083016200194a565b6080820152620019e660a0830162001937565b60a0820152620019f960c0830162001937565b60c082015262001a0c60e083016200185a565b60e082015261010062001a218184016200194a565b9082015261012062001a358382016200194a565b9082015292915050565b60006001600160401b0382111562001a5b5762001a5b6200175d565b5060051b60200190565b600082601f83011262001a7757600080fd5b8151602062001a9062001a8a8362001a3f565b6200180e565b82815260069290921b8401810191818101908684111562001ab057600080fd5b8286015b8481101562001b0a576040818903121562001acf5760008081fd5b62001ad9620017c4565b815162001ae68162001841565b81528185015162001af78162001841565b8186015283529183019160400162001ab4565b509695505050505050565b805180151581146200186757600080fd5b80516001600160801b03811681146200186757600080fd5b60006060828403121562001b5157600080fd5b604051606081016001600160401b038111828210171562001b765762001b766200175d565b60405290508062001b878362001b15565b815262001b976020840162001b26565b602082015262001baa6040840162001b26565b60408201525092915050565b600082601f83011262001bc857600080fd5b8151602062001bdb62001a8a8362001a3f565b82815260e0928302850182019282820191908785111562001bfb57600080fd5b8387015b8581101562001cb05781818a03121562001c195760008081fd5b62001c2362001773565b815162001c308162001841565b815262001c3f8287016200194a565b86820152604062001c528184016200194a565b90820152606062001c658382016200194a565b90820152608062001c788382016200186c565b9082015260a062001c8b8382016200186c565b9082015260c062001c9e83820162001b15565b90820152845292840192810162001bff565b5090979650505050505050565b600082601f83011262001ccf57600080fd5b8151602062001ce262001a8a8362001a3f565b82815260079290921b8401810191818101908684111562001d0257600080fd5b8286015b8481101562001b0a576080818903121562001d215760008081fd5b62001d2b620017e9565b815162001d388162001841565b815262001d4782860162001937565b85820152604062001d5a8184016200194a565b90820152606062001d6d8382016200194a565b9082015283529183019160800162001d06565b600082601f83011262001d9257600080fd5b8151602062001da562001a8a8362001a3f565b82815260069290921b8401810191818101908684111562001dc557600080fd5b8286015b8481101562001b0a576040818903121562001de45760008081fd5b62001dee620017c4565b815162001dfb8162001841565b815262001e0a82860162001937565b8186015283529183019160400162001dc9565b6000806000806000806000610300888a03121562001e3a57600080fd5b62001e46898962001884565b965062001e578960e08a016200195f565b6102208901519096506001600160401b038082111562001e7657600080fd5b62001e848b838c0162001a65565b965062001e968b6102408c0162001b3e565b95506102a08a015191508082111562001eae57600080fd5b62001ebc8b838c0162001bb6565b94506102c08a015191508082111562001ed457600080fd5b62001ee28b838c0162001cbd565b93506102e08a015191508082111562001efa57600080fd5b5062001f098a828b0162001d80565b91505092959891949750929550565b80516001600160a01b03168252602081015162001f3b602084018261ffff169052565b50604081015162001f54604084018263ffffffff169052565b50606081015162001f6b606084018261ffff169052565b50608081015162001f84608084018263ffffffff169052565b5060a081015162001f9b60a084018261ffff169052565b5060c081015162001fb260c084018261ffff169052565b5060e081015162001fce60e08401826001600160a01b03169052565b506101008181015163ffffffff908116918401919091526101209182015116910152565b82516001600160a01b0390811682526020808501516001600160401b0390811691840191909152604080860151821690840152606080860151909116908301526080808501516001600160601b03169083015260a08085015182169083015260c0808501519091169082015261022081016200105a60e083018462001f18565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620020b357620020b362002088565b5060010190565b602080825282518282018190526000919060409081850190868401855b828110156200216557815180516001600160a01b031685528681015163ffffffff9081168887015286820151811687870152606080830151909116908601526080808201516001600160401b03169086015260a08082015162002144878301826001600160401b03169052565b505060c09081015115159085015260e09093019290850190600101620020d7565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200216557815180516001600160a01b031685528681015161ffff16878601528581015163ffffffff908116878701526060918201511690850152608090930192908501906001016200218f565b818103818111156200101f576200101f62002088565b60008162002209576200220962002088565b506000190190565b63ffffffff81811683821601908082111562001579576200157962002088565b6000604080830163ffffffff8616845260208281860152818651808452606087019150828801935060005b818110156200229057845180516001600160a01b0316845284015161ffff168484015293830193918501916001016200225c565b509098975050505050505050565b600060208284031215620022b157600080fd5b81516200105a8162001841565b80820281158282048414176200101f576200101f62002088565b600082620022f657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160601b0382811682821603908082111562001579576200157962002088565b6000602082840312156200233157600080fd5b5051919050565b818103600083128015838313168383128216171562001579576200157962002088565b6000602082840312156200236e57600080fd5b6200105a8262001b15565b634e487b7160e01b600052603160045260246000fd5b60005b83811015620023ac57818101518382015260200162002392565b50506000910152565b60008251620023c98184602087016200238f565b9190910192915050565b6020815260008251806020840152620023f48160408501602087016200238f565b601f01601f19169190910160400192915050565b60805160a05160c05160e05161010051610120516101405161016051615e3d6200250f600039600081816103340152818161151d0152613e010152600081816103050152818161143f015281816114a7015281816119f801528181611a600152613dd201526000818161027101528181610bc201528181611e120152613d3e01526000818161024101528181611b2b0152613d0e01526000818161021201528181610f91015281816117a3015281816118a401528181612342015281816130cd0152818161345a0152613cdf0152600081816102d1015281816119700152613d9e0152600081816102a1015281816126890152613d6e01526000611eda0152615e3d6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806375294130116100f9578063b06d41bc11610097578063d3c7c2c711610071578063d3c7c2c71461092c578063e687b40a14610941578063eff7cc4814610954578063f2fde38b1461095c57600080fd5b8063b06d41bc146108fb578063c92b283214610911578063d09dc3391461092457600080fd5b8063856c8247116100d3578063856c8247146107575780638da5cb5b1461076a5780639a113c361461077b578063a7d3e02f146108e857600080fd5b8063752941301461072957806376f6ae761461073c57806379ba50971461074f57600080fd5b8063546719cd11610166578063599f643111610140578063599f64311461056f5780635d86f14114610594578063704b6c02146105a75780637437ff9f146105ba57600080fd5b8063546719cd146104d8578063549e946f1461053c57806354b714681461054f57600080fd5b8063352e4bc8116101a2578063352e4bc81461046e57806338724a95146104835780633a87ac53146104a45780634120fccd146104b757600080fd5b806306285c69146101c95780631772047e1461037a578063181f5a7714610425575b600080fd5b6103646040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b604051610371919061492a565b60405180910390f35b6103f16103883660046149cb565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600e825292829020825193840183525461ffff8116845263ffffffff62010000820481169285019290925266010000000000009004169082015290565b60408051825161ffff16815260208084015163ffffffff908116918301919091529282015190921690820152606001610371565b6104616040518060400160405280601381526020017f45564d3245564d4f6e52616d7020312e322e300000000000000000000000000081525081565b6040516103719190614a56565b61048161047c366004614bf5565b61096f565b005b610496610491366004614d2b565b6109d8565b604051908152602001610371565b6104816104b2366004614dfc565b610e38565b6104bf610e4e565b60405167ffffffffffffffff9091168152602001610371565b6104e0610e82565b604051610371919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b61048161054a366004614e60565b610f32565b6010546040516bffffffffffffffffffffffff9091168152602001610371565b6002546001600160a01b03165b6040516001600160a01b039091168152602001610371565b61057c6105a23660046149cb565b6110e7565b6104816105b53660046149cb565b611146565b61071c6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091525060408051610140810182526005546001600160a01b03808216835261ffff7401000000000000000000000000000000000000000083048116602085015263ffffffff76010000000000000000000000000000000000000000000084048116958501959095527a0100000000000000000000000000000000000000000000000000008304811660608501527c0100000000000000000000000000000000000000000000000000000000928390048516608085015260065480821660a086015262010000810490911660c0850152640100000000810490911660e08401527801000000000000000000000000000000000000000000000000810484166101008401520490911661012082015290565b6040516103719190614f74565b610481610737366004614f95565b611210565b61048161074a366004615082565b611276565b61048161132e565b6104bf6107653660046149cb565b611411565b6000546001600160a01b031661057c565b61087e6107893660046149cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b03166000908152600d6020908152604091829020825160c081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081049092169281019290925267ffffffffffffffff6c0100000000000000000000000082048116606084015274010000000000000000000000000000000000000000820416608083015260ff7c010000000000000000000000000000000000000000000000000000000090910416151560a082015290565b6040516103719190600060c08201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015167ffffffffffffffff8082166060850152806080860151166080850152505060a0830151151560a083015292915050565b6104966108f63660046150f7565b611519565b610903611f4b565b6040516103719291906151a5565b61048161091f3660046151e7565b61204f565b6104966120b7565b6109346120c1565b6040516103719190615255565b61048161094f3660046152a2565b612172565b610481612183565b61048161096a3660046149cb565b61241a565b6000546001600160a01b0316331480159061099557506002546001600160a01b03163314155b156109cc576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d58161242b565b50565b6000806109f06109eb608085018561536a565b61265a565b9050610a1b610a02602085018561536a565b8351909150610a1460408701876153cf565b905061274e565b6000600d81610a3060808701606088016149cb565b6001600160a01b031681526020808201929092526040908101600020815160c081018352905463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316918101919091526c01000000000000000000000000820467ffffffffffffffff90811660608301527401000000000000000000000000000000000000000083041660808201527c010000000000000000000000000000000000000000000000000000000090910460ff16151560a08201819052909150610b4d57610b0a60808501606086016149cb565b6040517fa7499d200000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b600654600090819064010000000090046001600160a01b031663ffdb4b37610b7b6080890160608a016149cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044016040805180830381865afa158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a9190615463565b9092509050806000808080610c4260408c018c6153cf565b90501115610c7d57610c71610c5d60808c0160608d016149cb565b87610c6b60408e018e6153cf565b8b612877565b91945092509050610c99565b8651610c969063ffffffff16662386f26fc100006154c5565b92505b6080870151610cb29067ffffffffffffffff16846154c5565b606088015160055491945060009167ffffffffffffffff9091169063ffffffff8516907a010000000000000000000000000000000000000000000000000000900461ffff16610d0460208f018f61536a565b610d0f9291506154c5565b6005548c51610d3e91760100000000000000000000000000000000000000000000900463ffffffff16906154dc565b610d4891906154dc565b610d5291906154dc565b610d5c91906154c5565b610d76906dffffffffffffffffffffffffffff87166154c5565b60065490915060009062010000900461ffff1615610dea576000607060ff16887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16901c9050610de6818e8060200190610dcc919061536a565b90508f8060400190610dde91906153cf565b905087612b30565b9150505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff881681610e1484886154dc565b610e1e91906154dc565b610e2891906154ef565b9c9b505050505050505050505050565b610e40612c02565b610e4a8282612c78565b5050565b601054600090610e7d90700100000000000000000000000000000000900467ffffffffffffffff16600161552a565b905090565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152610e7d90612fd8565b6000546001600160a01b03163314801590610f5857506002546001600160a01b03163314155b15610f8f576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610fd657506001600160a01b038116155b1561100d576040517f232cb97f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061101761308a565b121561104f576040517f02075e0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610e4a9082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d6919061554b565b6001600160a01b038516919061314a565b60006110f4600a836131ca565b611135576040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b44565b611140600a836131df565b92915050565b6000546001600160a01b0316331480159061116c57506002546001600160a01b03163314155b156111a3576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c906020015b60405180910390a150565b6000546001600160a01b0316331480159061123657506002546001600160a01b03163314155b1561126d576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d5816131f4565b6000546001600160a01b0316331480159061129c57506002546001600160a01b03163314155b156112d3576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4a8282808060200260200160405190810160405280939291908181526020016000905b828210156113245761131560408302860136819003810190615564565b815260200190600101906112f8565b5050505050613321565b6001546001600160a01b031633146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610b44565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b0381166000908152600f602052604081205467ffffffffffffffff168015801561146a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b15611140576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151291906155a3565b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d91906155c0565b156115d4576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611614576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005546001600160a01b03163314611658576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611662848061536a565b90506020146116a957611675848061536a565b6040517f370d875f000000000000000000000000000000000000000000000000000000008152600401610b44929190615626565b60006116b5858061536a565b8101906116c2919061563a565b90506001600160a01b038111806116d95750600a81105b156116e857611675858061536a565b60006116fa6109eb608088018861536a565b51905061171d61170d602088018861536a565b905082610a1460408a018a6153cf565b61179961172d60408801886153cf565b808060200260200160405190810160405280939291908181526020016000905b828210156117795761176a60408302860136819003810190615653565b8152602001906001019061174d565b505060065464010000000090046001600160a01b03169250613594915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117d360808801606089016149cb565b6001600160a01b03160361183757601080548691906000906118049084906bffffffffffffffffffffffff1661568d565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061195e565b60065464010000000090046001600160a01b03166241e5be61185f6080890160608a016149cb565b60405160e083901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039182166004820152602481018990527f00000000000000000000000000000000000000000000000000000000000000009091166044820152606401602060405180830381865afa1580156118eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190f919061554b565b6010805460009061192f9084906bffffffffffffffffffffffff1661568d565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b6010546bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911611156119cb576040517fe5c7a49100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152600f602052604090205467ffffffffffffffff16158015611a2357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b15611b1b576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa158015611aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acb91906155a3565b6001600160a01b0385166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169190911790555b6000604051806101a001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168152602001866001600160a01b03168152602001846001600160a01b0316815260200160108081819054906101000a900467ffffffffffffffff16611b98906156b2565b825467ffffffffffffffff9182166101009390930a838102908302199091161790925582526020808301869052600060408085018290526001600160a01b038b168252600f90925290812080546060909401939092611bf791166156b2565b825467ffffffffffffffff9182166101009390930a83810292021916179091558152602001611c2c60808a0160608b016149cb565b6001600160a01b03168152602001878152602001888060200190611c50919061536a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001611c9760408a018a6153cf565b808060200260200160405190810160405280939291908181526020016000905b82821015611ce357611cd460408302860136819003810190615653565b81526020019060010190611cb7565b5050509183525050602001611cfb60408a018a6153cf565b905067ffffffffffffffff811115611d1557611d15614a69565b604051908082528060200260200182016040528015611d4857816020015b6060815260200190600190039081611d335790505b508152600060209091018190529091505b611d6660408901896153cf565b9050811015611ed3576000611d7e60408a018a6153cf565b83818110611d8e57611d8e6156d9565b905060400201803603810190611da49190615653565b9050611db381600001516110e7565b6001600160a01b0316639687544588611dcc8c8061536a565b60208087015160408051928301815260008352517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152611e3a959493927f000000000000000000000000000000000000000000000000000000000000000091600401615708565b6000604051808303816000875af1158015611e59573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e9f9190810190615760565b8361016001518381518110611eb657611eb66156d9565b60200260200101819052505080611ecc90615812565b9050611d59565b50611efe817f000000000000000000000000000000000000000000000000000000000000000061374f565b6101808201526040517fd0c3c799bf9e2639de44391e7f524d229b2b55f5b1ea94b2bf7da42f7243dddd90611f349083906158e3565b60405180910390a161018001519695505050505050565b6060600080611f5a60076138c8565b90508067ffffffffffffffff811115611f7557611f75614a69565b604051908082528060200260200182016040528015611fba57816020015b6040805180820190915260008082526020820152815260200190600190039081611f935790505b50925060005b8181101561202c57600080611fd66007846138d3565b915091506040518060400160405280836001600160a01b031681526020018261ffff1681525086848151811061200e5761200e6156d9565b602002602001018190525050508061202590615812565b9050611fc0565b505060105491926c0100000000000000000000000090920463ffffffff16919050565b6000546001600160a01b0316331480159061207557506002546001600160a01b03163314155b156120ac576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d56003826138f1565b6000610e7d61308a565b606060006120cf600a613ac9565b67ffffffffffffffff8111156120e7576120e7614a69565b604051908082528060200260200182016040528015612110578160200160208202803683370190505b50905060005b815181101561216c5761212a600a82613ad4565b5082828151811061213d5761213d6156d9565b60200260200101816001600160a01b03166001600160a01b0316815250508061216590615812565b9050612116565b50919050565b61217a612c02565b6109d581613ae3565b6000546001600160a01b031633148015906121a957506002546001600160a01b03163314155b80156121bd57506121bb600733613e3b565b155b156121f4576040517f195db95800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff166000819003612248576040517f990e30bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546bffffffffffffffffffffffff1681811015612293576040517f8d0f71d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061229d61308a565b12156122d5576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060006122e260076138c8565b905060005b818110156123d7576000806122fd6007846138d3565b909250905060008761231d836bffffffffffffffffffffffff8a166154c5565b61232791906154ef565b90506123338187615a36565b95506123776001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016846bffffffffffffffffffffffff841661314a565b6040516bffffffffffffffffffffffff821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a2505050806123d090615812565b90506122e7565b5050601080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790555050565b612422612c02565b6109d581613e50565b60005b815181101561262a57600082828151811061244b5761244b6156d9565b6020908102919091018101516040805160c080820183528385015163ffffffff9081168352838501518116838701908152606080870151831685870190815260808089015167ffffffffffffffff90811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600d909a5296909820945185549251985191519651945115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9589167401000000000000000000000000000000000000000002959095167fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff979098166c01000000000000000000000000027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff9285166801000000000000000002929092167fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff998516640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090941691909416179190911796909616179490941791909116919091179190911790555061262381615812565b905061242e565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8816040516112059190615a5b565b60408051602081019091526000815260008290036126b05750604080516020810190915267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152611140565b7f97a657c9000000000000000000000000000000000000000000000000000000006126db8385615b05565b7fffffffff000000000000000000000000000000000000000000000000000000001614612734576040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127418260048186615b4d565b8101906115129190615b77565b6006547801000000000000000000000000000000000000000000000000900463ffffffff16808411156127b7576040517f869337890000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610b44565b6006547c0100000000000000000000000000000000000000000000000000000000900463ffffffff16831115612819576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055474010000000000000000000000000000000000000000900461ffff16821115612871576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000808084815b81811015612abb57600088888381811061289a5761289a6156d9565b9050604002018036038101906128b09190615653565b80516001600160a01b03166000908152600e60209081526040918290208251606081018452905461ffff8116825263ffffffff620100008204811693830193909352660100000000000090048216928101929092528251929350909161291a91600a91906131ca16565b61295e5781516040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b44565b805160009061ffff1615612a775760008d6001600160a01b031684600001516001600160a01b031614612a225760065484516040517f4ab35b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526401000000009092041690634ab35b0b90602401602060405180830381865afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b9190615bb9565b9050612a25565b508b5b82516020850151620186a09161ffff1690612a5f907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff851690613f2b565b612a6991906154c5565b612a7391906154ef565b9150505b612a8181896154dc565b9750816020015187612a939190615bd4565b9650816040015186612aa59190615bd4565b955050505080612ab490615812565b905061287e565b506000856020015163ffffffff16662386f26fc10000612adb91906154c5565b905080851015612aee579350612b259050565b6000866040015163ffffffff16662386f26fc10000612b0d91906154c5565b905080861115612b21579450612b25915050565b5050505b955095509592505050565b60008063ffffffff8316612b456080866154c5565b612b51876102206154dc565b612b5b91906154dc565b612b6591906154dc565b6005546006549192506000917c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690612ba79061ffff16846154c5565b612bb191906154dc565b60065490915062010000900461ffff16612bdb6dffffffffffffffffffffffffffff8916836154c5565b612be591906154c5565b612bf590655af3107a40006154c5565b925050505b949350505050565b6000546001600160a01b03163314612c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610b44565b565b60005b8251811015612dd9576000838281518110612c9857612c986156d9565b60200260200101516000015190506000848381518110612cba57612cba6156d9565b6020026020010151602001519050612cdc82600a6131ca90919063ffffffff16565b612d1d576040517f73913ebd0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b44565b6001600160a01b038116612d32600a846131df565b6001600160a01b031614612d72576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d7d600a83613f68565b15612dc657604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b505080612dd290615812565b9050612c7b565b5060005b8151811015612fd3576000828281518110612dfa57612dfa6156d9565b60200260200101516000015190506000838381518110612e1c57612e1c6156d9565b602002602001015160200151905060006001600160a01b0316826001600160a01b03161480612e5257506001600160a01b038116155b15612e89576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eeb9190615bf1565b6001600160a01b0316826001600160a01b031614612f35576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f41600a8383613f7d565b15612f8e57604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a1612fc0565b6040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505080612fcc90615812565b9050612ddd565b505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261306682606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261304a9190615c0e565b85608001516fffffffffffffffffffffffffffffffff16613f93565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6010546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916bffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561311c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613140919061554b565b610e7d9190615c21565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612fd3908490613fbb565b6000611512836001600160a01b0384166140ba565b6000611512836001600160a01b0384166140c6565b60005b81518110156132f1576000828281518110613214576132146156d9565b60209081029190910181015160408051606080820183528385015161ffff90811683528385015163ffffffff90811684880190815292860151811684860190815295516001600160a01b03166000908152600e90975293909520915182549151945184166601000000000000027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff9590941662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009092169516949094179390931791909116179055506132ea81615812565b90506131f7565b507f3df02211160f78e9bbed13e8bf0752035362a05f0651a5e25007acfb659c3620816040516112059190615c41565b8051604081111561335e576040517fb5a10cfa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff16158015906133ac575060105463ffffffff6c010000000000000000000000008204166bffffffffffffffffffffffff90911610155b156133b9576133b9612183565b60006133c560076138c8565b90505b80156134075760006133e66133de600184615c0e565b6007906138d3565b5090506133f46007826140d2565b50508061340090615cae565b90506133c8565b506000805b82811015613515576000848281518110613428576134286156d9565b6020026020010151600001519050600085838151811061344a5761344a6156d9565b60200260200101516020015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061349f57506001600160a01b038216155b156134e1576040517f4de938d10000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b44565b6134f160078361ffff84166140e7565b5061350061ffff821685615bd4565b935050508061350e90615812565b905061340c565b50601080547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd24906135879083908690615ce3565b60405180910390a1505050565b81516000805b82811015613741576000846001600160a01b031663d02641a08784815181106135c5576135c56156d9565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa15801561362c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136509190615d02565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166000036136d55785828151811061368b5761368b6156d9565b6020908102919091010151516040517f9a655f7b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b44565b6137238683815181106136ea576136ea6156d9565b602002602001015160200151827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613f2b90919063ffffffff16565b61372d90846154dc565b9250508061373a90615812565b905061359a565b5061287160038260006140fd565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001516040516020016137e59897969594939291906001600160a01b039889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b604051602081830303815290604052805190602001208561012001518051906020012086610140015160405160200161381e9190615d35565b6040516020818303038152906040528051906020012087610160015160405160200161384a9190615d48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b60006111408261444c565b60008080806138e28686614457565b909450925050505b9250929050565b815460009061391a90700100000000000000000000000000000000900463ffffffff1642615c0e565b905080156139bc5760018301548354613962916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613f93565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546139e2916fffffffffffffffffffffffffffffffff9081169116614482565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906135879084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b6000611140826138c8565b60008080806138e286866138d3565b60e08101516001600160a01b0316613b27576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601a6101000a81548161ffff021916908361ffff160217905550608082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160006101000a81548161ffff021916908361ffff16021790555060c08201518160010160026101000a81548161ffff021916908361ffff16021790555060e08201518160010160046101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555061012082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055509050507f2a57f7c2027cf032c78b77d4d8d2fbd20ad22e5d5e5b5fb23ac7d7820d44adc66040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681525082604051611205929190615d5b565b6000611512836001600160a01b038416614498565b336001600160a01b03821603613ec2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610b44565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000670de0b6b3a7640000613f5e837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166154c5565b61151291906154ef565b6000611512836001600160a01b0384166144a4565b6000612bfa846001600160a01b038516846144b0565b6000613fb285613fa384866154c5565b613fad90876154dc565b614482565b95945050505050565b6000614010826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144c69092919063ffffffff16565b805190915015612fd3578080602001905181019061402e91906155c0565b612fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b44565b60006115128383614498565b600061151283836144d5565b6000611512836001600160a01b03841661455f565b6000612bfa846001600160a01b0385168461457c565b825474010000000000000000000000000000000000000000900460ff161580614124575081155b1561412e57505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061417490700100000000000000000000000000000000900463ffffffff1642615c0e565b9050801561423457818311156141b6576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546141f09083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613f93565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156142d1576001600160a01b038416614286576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610b44565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b0385166044820152606401610b44565b848310156143ca5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906143159082615c0e565b61431f878a615c0e565b61432991906154dc565b61433391906154ef565b90506001600160a01b03861661437f576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610b44565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b0387166044820152606401610b44565b6143d48584615c0e565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b600061114082614599565b6000808061446585856145a3565b600081815260029690960160205260409095205494959350505050565b60008183106144915781611512565b5090919050565b600061151283836145af565b6000611512838361455f565b6000612bfa84846001600160a01b03851661457c565b6060612bfa84846000856145c7565b6000818152600283016020526040812054801515806144f957506144f98484614498565b611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610b44565b6000818152600283016020526040812081905561151283836146c8565b60008281526002840160205260408120829055612bfa84846146d4565b6000611140825490565b600061151283836146e0565b60008181526001830160205260408120541515611512565b606082471015614659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b44565b600080866001600160a01b031685876040516146759190615de5565b60006040518083038185875af1925050503d80600081146146b2576040519150601f19603f3d011682016040523d82523d6000602084013e6146b7565b606091505b5091509150612bf58783838761470a565b6000611512838361479d565b60006115128383614897565b60008260000182815481106146f7576146f76156d9565b9060005260206000200154905092915050565b6060831561479357825160000361478c576001600160a01b0385163b61478c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b44565b5081612bfa565b612bfa83836148e6565b600081815260018301602052604081205480156148865760006147c1600183615c0e565b85549091506000906147d590600190615c0e565b905081811461483a5760008660000182815481106147f5576147f56156d9565b9060005260206000200154905080876000018481548110614818576148186156d9565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061484b5761484b615e01565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611140565b6000915050611140565b5092915050565b60008181526001830160205260408120546148de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611140565b506000611140565b8151156148f65781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b449190614a56565b60e0810161114082846001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b6001600160a01b03811681146109d557600080fd5b80356149c6816149a6565b919050565b6000602082840312156149dd57600080fd5b8135611512816149a6565b60005b83811015614a035781810151838201526020016149eb565b50506000910152565b60008151808452614a248160208601602086016149e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006115126020830184614a0c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715614abb57614abb614a69565b60405290565b6040805190810167ffffffffffffffff81118282101715614abb57614abb614a69565b6040516080810167ffffffffffffffff81118282101715614abb57614abb614a69565b604051610140810167ffffffffffffffff81118282101715614abb57614abb614a69565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614b7257614b72614a69565b604052919050565b600067ffffffffffffffff821115614b9457614b94614a69565b5060051b60200190565b63ffffffff811681146109d557600080fd5b80356149c681614b9e565b67ffffffffffffffff811681146109d557600080fd5b80356149c681614bbb565b80151581146109d557600080fd5b80356149c681614bdc565b60006020808385031215614c0857600080fd5b823567ffffffffffffffff811115614c1f57600080fd5b8301601f81018513614c3057600080fd5b8035614c43614c3e82614b7a565b614b2b565b81815260e09182028301840191848201919088841115614c6257600080fd5b938501935b83851015614d0d5780858a031215614c7f5760008081fd5b614c87614a98565b8535614c92816149a6565b815285870135614ca181614b9e565b81880152604086810135614cb481614b9e565b90820152606086810135614cc781614b9e565b908201526080614cd8878201614bd1565b9082015260a0614ce9878201614bd1565b9082015260c0614cfa878201614bea565b9082015283529384019391850191614c67565b50979650505050505050565b600060a0828403121561216c57600080fd5b600060208284031215614d3d57600080fd5b813567ffffffffffffffff811115614d5457600080fd5b612bfa84828501614d19565b600082601f830112614d7157600080fd5b81356020614d81614c3e83614b7a565b82815260069290921b84018101918181019086841115614da057600080fd5b8286015b84811015614df15760408189031215614dbd5760008081fd5b614dc5614ac1565b8135614dd0816149a6565b815281850135614ddf816149a6565b81860152835291830191604001614da4565b509695505050505050565b60008060408385031215614e0f57600080fd5b823567ffffffffffffffff80821115614e2757600080fd5b614e3386838701614d60565b93506020850135915080821115614e4957600080fd5b50614e5685828601614d60565b9150509250929050565b60008060408385031215614e7357600080fd5b8235614e7e816149a6565b91506020830135614e8e816149a6565b809150509250929050565b80516001600160a01b031682526020810151614ebb602084018261ffff169052565b506040810151614ed3604084018263ffffffff169052565b506060810151614ee9606084018261ffff169052565b506080810151614f01608084018263ffffffff169052565b5060a0810151614f1760a084018261ffff169052565b5060c0810151614f2d60c084018261ffff169052565b5060e0810151614f4860e08401826001600160a01b03169052565b506101008181015163ffffffff81168483015250506101208181015163ffffffff811684830152612871565b61014081016111408284614e99565b803561ffff811681146149c657600080fd5b60006020808385031215614fa857600080fd5b823567ffffffffffffffff811115614fbf57600080fd5b8301601f81018513614fd057600080fd5b8035614fde614c3e82614b7a565b81815260079190911b82018301908381019087831115614ffd57600080fd5b928401925b82841015615077576080848903121561501b5760008081fd5b615023614ae4565b843561502e816149a6565b815261503b858701614f83565b8682015260408086013561504e81614b9e565b9082015260608581013561506181614b9e565b9082015282526080939093019290840190615002565b979650505050505050565b6000806020838503121561509557600080fd5b823567ffffffffffffffff808211156150ad57600080fd5b818501915085601f8301126150c157600080fd5b8135818111156150d057600080fd5b8660208260061b85010111156150e557600080fd5b60209290920196919550909350505050565b60008060006060848603121561510c57600080fd5b833567ffffffffffffffff81111561512357600080fd5b61512f86828701614d19565b935050602084013591506040840135615147816149a6565b809150509250925092565b600081518084526020808501945080840160005b8381101561519a57815180516001600160a01b0316885283015161ffff168388015260409096019590820190600101615166565b509495945050505050565b6040815260006151b86040830185615152565b90508260208301529392505050565b80356fffffffffffffffffffffffffffffffff811681146149c657600080fd5b6000606082840312156151f957600080fd5b6040516060810181811067ffffffffffffffff8211171561521c5761521c614a69565b604052823561522a81614bdc565b8152615238602084016151c7565b6020820152615249604084016151c7565b60408201529392505050565b6020808252825182820181905260009190848201906040850190845b818110156152965783516001600160a01b031683529284019291840191600101615271565b50909695505050505050565b600061014082840312156152b557600080fd5b6152bd614b07565b6152c6836149bb565b81526152d460208401614f83565b60208201526152e560408401614bb0565b60408201526152f660608401614f83565b606082015261530760808401614bb0565b608082015261531860a08401614f83565b60a082015261532960c08401614f83565b60c082015261533a60e084016149bb565b60e082015261010061534d818501614bb0565b9082015261012061535f848201614bb0565b908201529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261539f57600080fd5b83018035915067ffffffffffffffff8211156153ba57600080fd5b6020019150368190038213156138ea57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261540457600080fd5b83018035915067ffffffffffffffff82111561541f57600080fd5b6020019150600681901b36038213156138ea57600080fd5b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146149c657600080fd5b6000806040838503121561547657600080fd5b61547f83615437565b915061548d60208401615437565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761114057611140615496565b8082018082111561114057611140615496565b600082615525577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b67ffffffffffffffff81811683821601908082111561489057614890615496565b60006020828403121561555d57600080fd5b5051919050565b60006040828403121561557657600080fd5b61557e614ac1565b8235615589816149a6565b815261559760208401614f83565b60208201529392505050565b6000602082840312156155b557600080fd5b815161151281614bbb565b6000602082840312156155d257600080fd5b815161151281614bdc565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612bfa6020830184866155dd565b60006020828403121561564c57600080fd5b5035919050565b60006040828403121561566557600080fd5b61566d614ac1565b8235615678816149a6565b81526020928301359281019290925250919050565b6bffffffffffffffffffffffff81811683821601908082111561489057614890615496565b600067ffffffffffffffff8083168181036156cf576156cf615496565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b038716815260a06020820152600061572b60a0830187896155dd565b85604084015267ffffffffffffffff8516606084015282810360808401526157538185614a0c565b9998505050505050505050565b60006020828403121561577257600080fd5b815167ffffffffffffffff8082111561578a57600080fd5b818401915084601f83011261579e57600080fd5b8151818111156157b0576157b0614a69565b6157e160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614b2b565b91508082528560208285010111156157f857600080fd5b6158098160208401602086016149e8565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361584357615843615496565b5060010190565b600081518084526020808501945080840160005b8381101561519a57815180516001600160a01b03168852830151838801526040909601959082019060010161585e565b600081518084526020808501808196508360051b8101915082860160005b858110156158d65782840389526158c4848351614a0c565b988501989350908401906001016158ac565b5091979650505050505050565b602081526158fe60208201835167ffffffffffffffff169052565b6000602083015161591a60408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015167ffffffffffffffff8116608084015250608083015160a083015260a083015161596360c084018215159052565b5060c083015167ffffffffffffffff811660e08401525060e0830151610100615996818501836001600160a01b03169052565b840151610120848101919091528401516101a0610140808601829052919250906159c46101c0860184614a0c565b92508086015190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610160818786030181880152615a03858461584a565b945080880151925050610180818786030181880152615a22858461588e565b970151959092019490945250929392505050565b6bffffffffffffffffffffffff82811682821603908082111561489057614890615496565b602080825282518282018190526000919060409081850190868401855b828110156158d657815180516001600160a01b031685528681015163ffffffff90811688870152868201518116878701526060808301519091169086015260808082015167ffffffffffffffff169086015260a080820151615ae58288018267ffffffffffffffff169052565b505060c09081015115159085015260e09093019290850190600101615a78565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015615b455780818660040360031b1b83161692505b505092915050565b60008085851115615b5d57600080fd5b83861115615b6a57600080fd5b5050820193919092039150565b600060208284031215615b8957600080fd5b6040516020810181811067ffffffffffffffff82111715615bac57615bac614a69565b6040529135825250919050565b600060208284031215615bcb57600080fd5b61151282615437565b63ffffffff81811683821601908082111561489057614890615496565b600060208284031215615c0357600080fd5b8151611512816149a6565b8181038181111561114057611140615496565b818103600083128015838313168383128216171561489057614890615496565b602080825282518282018190526000919060409081850190868401855b828110156158d657815180516001600160a01b031685528681015161ffff16878601528581015163ffffffff90811687870152606091820151169085015260809093019290850190600101615c5e565b600081615cbd57615cbd615496565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b63ffffffff83168152604060208201526000612bfa6040830184615152565b600060408284031215615d1457600080fd5b615d1c614ac1565b615d2583615437565b8152602083015161559781614b9e565b602081526000611512602083018461584a565b602081526000611512602083018461588e565b6102208101615dd882856001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b61151260e0830184614e99565b60008251615df78184602087016149e8565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", + Bin: "0x6101806040523480156200001257600080fd5b506040516200834c3803806200834c833981016040819052620000359162001e1d565b8333806000816200008d5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c057620000c08162000323565b50506040805160a081018252602084810180516001600160801b039081168085524263ffffffff169385018490528751151585870181905292518216606086018190529790950151166080909301839052600380546001600160a01b031916909417600160801b9283021760ff60a01b1916600160a01b90910217909255029091176004555086516001600160a01b0316158062000169575060208701516001600160401b0316155b8062000180575060408701516001600160401b0316155b8062000197575060608701516001600160401b0316155b80620001ae575060c08701516001600160a01b0316155b15620001cd576040516306b7c75960e31b815260040160405180910390fd5b6020808801516040808a015181517f8acd72527118c8324937b1a42e02cd246697c3b633f1742f3cae11de233722b3948101949094526001600160401b039283169184019190915216606082015230608082015260a00160408051601f198184030181529181528151602092830120608090815289516001600160a01b0390811660e052928a01516001600160401b0390811661010052918a015182166101205260608a015190911660a0908152908901516001600160601b031660c0908152908901518216610140528801511661016052620002aa86620003ce565b620002b58362000645565b620002c082620007e0565b620002cb81620008e5565b6040805160008082526020820190925262000316916200030e565b6040805180820190915260008082526020820152815260200190600190039081620002e65790505b508662000b0f565b5050505050505062002408565b336001600160a01b038216036200037d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000084565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e08101516001600160a01b0316620003fa576040516306b7c75960e31b815260040160405180910390fd5b80600560008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601a6101000a81548161ffff021916908361ffff160217905550608082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160006101000a81548161ffff021916908361ffff16021790555060c08201518160010160026101000a81548161ffff021916908361ffff16021790555060e08201518160010160046101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555061012082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055509050507f2a57f7c2027cf032c78b77d4d8d2fbd20ad22e5d5e5b5fb23ac7d7820d44adc66040518060e0016040528060e0516001600160a01b03168152602001610100516001600160401b03168152602001610120516001600160401b0316815260200160a0516001600160401b0316815260200160c0516001600160601b03168152602001610140516001600160a01b03168152602001610160516001600160a01b0316815250826040516200063a92919062001ff2565b60405180910390a150565b60005b8151811015620007ae57600082828151811062000669576200066962002072565b6020908102919091018101516040805160c080820183528385015163ffffffff908116835283850151811683870190815260608087015183168587019081526080808901516001600160401b0390811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600d909a529690982094518554925198519151965194511515600160e01b0260ff60e01b19958916600160a01b0295909516600160a01b600160e81b0319979098166c0100000000000000000000000002600160601b600160a01b0319928516680100000000000000000292909216600160401b600160a01b0319998516640100000000026001600160401b0319909416919094161791909117969096161794909417919091169190911791909117905550620007a6816200209e565b905062000648565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8816040516200063a9190620020ba565b60005b8151811015620008b357600082828151811062000804576200080462002072565b60209081029190910181015160408051606080820183528385015161ffff90811683528385015163ffffffff90811684880190815292860151811684860190815295516001600160a01b03166000908152600e909752939095209151825491519451841666010000000000000263ffffffff60301b1995909416620100000265ffffffffffff19909216951694909417939093179190911617905550620008ab816200209e565b9050620007e3565b507f3df02211160f78e9bbed13e8bf0752035362a05f0651a5e25007acfb659c3620816040516200063a919062002172565b805160408111156200090a57604051635ad0867d60e11b815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff161580159062000954575060105463ffffffff6c010000000000000000000000008204166001600160601b0390911610155b1562000964576200096462000e12565b600062000972600762001012565b90505b8015620009be576000620009986200098f600184620021e1565b60079062001025565b509050620009a860078262001043565b505080620009b690620021f7565b905062000975565b506000805b8281101562000aa6576000848281518110620009e357620009e362002072565b6020026020010151600001519050600085838151811062000a085762000a0862002072565b602002602001015160200151905060e0516001600160a01b0316826001600160a01b0316148062000a4057506001600160a01b038216155b1562000a6b57604051634de938d160e01b81526001600160a01b038316600482015260240162000084565b62000a7d60078361ffff841662001061565b5062000a8e61ffff82168562002211565b935050508062000a9e906200209e565b9050620009c3565b506010805463ffffffff60601b19166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd249062000b02908390869062002231565b60405180910390a1505050565b60005b825181101562000c4b57600083828151811062000b335762000b3362002072565b6020026020010151600001519050600084838151811062000b585762000b5862002072565b6020908102919091018101510151905062000b75600a8362001081565b62000b9f576040516373913ebd60e01b81526001600160a01b038316600482015260240162000084565b6001600160a01b03811662000bb6600a8462001098565b6001600160a01b03161462000bde57604051630d98f73360e31b815260040160405180910390fd5b62000beb600a83620010af565b1562000c3557604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b50508062000c43906200209e565b905062000b12565b5060005b815181101562000e0d57600082828151811062000c705762000c7062002072565b6020026020010151600001519050600083838151811062000c955762000c9562002072565b602002602001015160200151905060006001600160a01b0316826001600160a01b0316148062000ccc57506001600160a01b038116155b1562000cea5760405162d8548360e71b815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d29573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d4f91906200229e565b6001600160a01b0316826001600160a01b03161462000d8157604051630d98f73360e31b815260040160405180910390fd5b62000d8f600a8383620010c6565b1562000dde57604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a162000df7565b604051633caf458560e01b815260040160405180910390fd5b50508062000e05906200209e565b905062000c4f565b505050565b6000546001600160a01b0316331480159062000e3957506002546001600160a01b03163314155b801562000e50575062000e4e600733620010de565b155b1562000e6f5760405163032bb72b60e31b815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff16600081900362000eab5760405163990e30bf60e01b815260040160405180910390fd5b6010546001600160601b03168181101562000ed9576040516311a1ee3b60e31b815260040160405180910390fd5b600062000ee5620010f5565b121562000f0557604051631e9acf1760e31b815260040160405180910390fd5b80600062000f14600762001012565b905060005b8181101562000fec5760008062000f3260078462001025565b909250905060008762000f4f836001600160601b038a16620022be565b62000f5b9190620022d8565b905062000f698187620022fb565b60e05190965062000f8e906001600160a01b0316846001600160601b03841662001183565b6040516001600160601b03821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a25050508062000fe4906200209e565b905062000f19565b5050601080546001600160601b0319166001600160601b03929092169190911790555050565b60006200101f82620011db565b92915050565b6000808080620010368686620011e8565b9097909650945050505050565b60006200105a836001600160a01b03841662001215565b9392505050565b600062001079846001600160a01b0385168462001234565b949350505050565b60006200105a836001600160a01b03841662001253565b60006200105a836001600160a01b03841662001261565b60006200105a836001600160a01b0384166200126f565b600062001079846001600160a01b038516846200127d565b60006200105a836001600160a01b03841662001295565b60105460e0516040516370a0823160e01b81523060048201526000926001600160601b0316916001600160a01b0316906370a0823190602401602060405180830381865afa1580156200114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117291906200231e565b6200117e919062002338565b905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663a9059cbb60e01b1790915262000e0d918591620012a316565b60006200101f8262001374565b60008080620011f885856200137f565b600081815260029690960160205260409095205494959350505050565b600081815260028301602052604081208190556200105a83836200138d565b600082815260028401602052604081208290556200107984846200139b565b60006200105a838362001295565b60006200105a8383620013a9565b60006200105a838362001215565b60006200107984846001600160a01b03851662001234565b60006200105a83836200141e565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620012f2906001600160a01b03851690849062001437565b80519091501562000e0d57808060200190518101906200131391906200235b565b62000e0d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000084565b60006200101f825490565b60006200105a838362001448565b60006200105a838362001475565b60006200105a838362001580565b600081815260028301602052604081205480151580620013d05750620013d0848462001295565b6200105a5760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640162000084565b600081815260018301602052604081205415156200105a565b6060620010798484600085620015d2565b600082600001828154811062001462576200146262002072565b9060005260206000200154905092915050565b600081815260018301602052604081205480156200156e5760006200149c600183620021e1565b8554909150600090620014b290600190620021e1565b90508181146200151e576000866000018281548110620014d657620014d662002072565b9060005260206000200154905080876000018481548110620014fc57620014fc62002072565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062001532576200153262002379565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200101f565b60009150506200101f565b5092915050565b6000818152600183016020526040812054620015c9575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200101f565b5060006200101f565b606082471015620016355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000084565b600080866001600160a01b03168587604051620016539190620023b5565b60006040518083038185875af1925050503d806000811462001692576040519150601f19603f3d011682016040523d82523d6000602084013e62001697565b606091505b509092509050620016ab87838387620016b6565b979650505050505050565b606083156200172a57825160000362001722576001600160a01b0385163b620017225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000084565b508162001079565b620010798383815115620017415781518083602001fd5b8060405162461bcd60e51b8152600401620000849190620023d3565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156200179857620017986200175d565b60405290565b60405161014081016001600160401b03811182821017156200179857620017986200175d565b604080519081016001600160401b03811182821017156200179857620017986200175d565b604051608081016001600160401b03811182821017156200179857620017986200175d565b604051601f8201601f191681016001600160401b03811182821017156200183957620018396200175d565b604052919050565b6001600160a01b03811681146200185757600080fd5b50565b8051620018678162001841565b919050565b80516001600160401b03811681146200186757600080fd5b600060e082840312156200189757600080fd5b620018a162001773565b90508151620018b08162001841565b8152620018c0602083016200186c565b6020820152620018d3604083016200186c565b6040820152620018e6606083016200186c565b606082015260808201516001600160601b03811681146200190657600080fd5b60808201526200191960a083016200185a565b60a08201526200192c60c083016200185a565b60c082015292915050565b805161ffff811681146200186757600080fd5b805163ffffffff811681146200186757600080fd5b600061014082840312156200197357600080fd5b6200197d6200179e565b90506200198a826200185a565b81526200199a6020830162001937565b6020820152620019ad604083016200194a565b6040820152620019c06060830162001937565b6060820152620019d3608083016200194a565b6080820152620019e660a0830162001937565b60a0820152620019f960c0830162001937565b60c082015262001a0c60e083016200185a565b60e082015261010062001a218184016200194a565b9082015261012062001a358382016200194a565b9082015292915050565b60006001600160401b0382111562001a5b5762001a5b6200175d565b5060051b60200190565b600082601f83011262001a7757600080fd5b8151602062001a9062001a8a8362001a3f565b6200180e565b82815260069290921b8401810191818101908684111562001ab057600080fd5b8286015b8481101562001b0a576040818903121562001acf5760008081fd5b62001ad9620017c4565b815162001ae68162001841565b81528185015162001af78162001841565b8186015283529183019160400162001ab4565b509695505050505050565b805180151581146200186757600080fd5b80516001600160801b03811681146200186757600080fd5b60006060828403121562001b5157600080fd5b604051606081016001600160401b038111828210171562001b765762001b766200175d565b60405290508062001b878362001b15565b815262001b976020840162001b26565b602082015262001baa6040840162001b26565b60408201525092915050565b600082601f83011262001bc857600080fd5b8151602062001bdb62001a8a8362001a3f565b82815260e0928302850182019282820191908785111562001bfb57600080fd5b8387015b8581101562001cb05781818a03121562001c195760008081fd5b62001c2362001773565b815162001c308162001841565b815262001c3f8287016200194a565b86820152604062001c528184016200194a565b90820152606062001c658382016200194a565b90820152608062001c788382016200186c565b9082015260a062001c8b8382016200186c565b9082015260c062001c9e83820162001b15565b90820152845292840192810162001bff565b5090979650505050505050565b600082601f83011262001ccf57600080fd5b8151602062001ce262001a8a8362001a3f565b82815260079290921b8401810191818101908684111562001d0257600080fd5b8286015b8481101562001b0a576080818903121562001d215760008081fd5b62001d2b620017e9565b815162001d388162001841565b815262001d4782860162001937565b85820152604062001d5a8184016200194a565b90820152606062001d6d8382016200194a565b9082015283529183019160800162001d06565b600082601f83011262001d9257600080fd5b8151602062001da562001a8a8362001a3f565b82815260069290921b8401810191818101908684111562001dc557600080fd5b8286015b8481101562001b0a576040818903121562001de45760008081fd5b62001dee620017c4565b815162001dfb8162001841565b815262001e0a82860162001937565b8186015283529183019160400162001dc9565b6000806000806000806000610300888a03121562001e3a57600080fd5b62001e46898962001884565b965062001e578960e08a016200195f565b6102208901519096506001600160401b038082111562001e7657600080fd5b62001e848b838c0162001a65565b965062001e968b6102408c0162001b3e565b95506102a08a015191508082111562001eae57600080fd5b62001ebc8b838c0162001bb6565b94506102c08a015191508082111562001ed457600080fd5b62001ee28b838c0162001cbd565b93506102e08a015191508082111562001efa57600080fd5b5062001f098a828b0162001d80565b91505092959891949750929550565b80516001600160a01b03168252602081015162001f3b602084018261ffff169052565b50604081015162001f54604084018263ffffffff169052565b50606081015162001f6b606084018261ffff169052565b50608081015162001f84608084018263ffffffff169052565b5060a081015162001f9b60a084018261ffff169052565b5060c081015162001fb260c084018261ffff169052565b5060e081015162001fce60e08401826001600160a01b03169052565b506101008181015163ffffffff908116918401919091526101209182015116910152565b82516001600160a01b0390811682526020808501516001600160401b0390811691840191909152604080860151821690840152606080860151909116908301526080808501516001600160601b03169083015260a08085015182169083015260c0808501519091169082015261022081016200105a60e083018462001f18565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201620020b357620020b362002088565b5060010190565b602080825282518282018190526000919060409081850190868401855b828110156200216557815180516001600160a01b031685528681015163ffffffff9081168887015286820151811687870152606080830151909116908601526080808201516001600160401b03169086015260a08082015162002144878301826001600160401b03169052565b505060c09081015115159085015260e09093019290850190600101620020d7565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200216557815180516001600160a01b031685528681015161ffff16878601528581015163ffffffff908116878701526060918201511690850152608090930192908501906001016200218f565b818103818111156200101f576200101f62002088565b60008162002209576200220962002088565b506000190190565b63ffffffff81811683821601908082111562001579576200157962002088565b6000604080830163ffffffff8616845260208281860152818651808452606087019150828801935060005b818110156200229057845180516001600160a01b0316845284015161ffff168484015293830193918501916001016200225c565b509098975050505050505050565b600060208284031215620022b157600080fd5b81516200105a8162001841565b80820281158282048414176200101f576200101f62002088565b600082620022f657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160601b0382811682821603908082111562001579576200157962002088565b6000602082840312156200233157600080fd5b5051919050565b818103600083128015838313168383128216171562001579576200157962002088565b6000602082840312156200236e57600080fd5b6200105a8262001b15565b634e487b7160e01b600052603160045260246000fd5b60005b83811015620023ac57818101518382015260200162002392565b50506000910152565b60008251620023c98184602087016200238f565b9190910192915050565b6020815260008251806020840152620023f48160408501602087016200238f565b601f01601f19169190910160400192915050565b60805160a05160c05160e05161010051610120516101405161016051615e3d6200250f600039600081816103340152818161151d0152613e010152600081816103050152818161143f015281816114a7015281816119f801528181611a600152613dd201526000818161027101528181610bc201528181611e120152613d3e01526000818161024101528181611b2b0152613d0e01526000818161021201528181610f91015281816117a3015281816118a401528181612342015281816130cd0152818161345a0152613cdf0152600081816102d1015281816119700152613d9e0152600081816102a1015281816126890152613d6e01526000611eda0152615e3d6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806375294130116100f9578063b06d41bc11610097578063d3c7c2c711610071578063d3c7c2c71461092c578063e687b40a14610941578063eff7cc4814610954578063f2fde38b1461095c57600080fd5b8063b06d41bc146108fb578063c92b283214610911578063d09dc3391461092457600080fd5b8063856c8247116100d3578063856c8247146107575780638da5cb5b1461076a5780639a113c361461077b578063a7d3e02f146108e857600080fd5b8063752941301461072957806376f6ae761461073c57806379ba50971461074f57600080fd5b8063546719cd11610166578063599f643111610140578063599f64311461056f5780635d86f14114610594578063704b6c02146105a75780637437ff9f146105ba57600080fd5b8063546719cd146104d8578063549e946f1461053c57806354b714681461054f57600080fd5b8063352e4bc8116101a2578063352e4bc81461046e57806338724a95146104835780633a87ac53146104a45780634120fccd146104b757600080fd5b806306285c69146101c95780631772047e1461037a578063181f5a7714610425575b600080fd5b6103646040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b604051610371919061492a565b60405180910390f35b6103f16103883660046149cb565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600e825292829020825193840183525461ffff8116845263ffffffff62010000820481169285019290925266010000000000009004169082015290565b60408051825161ffff16815260208084015163ffffffff908116918301919091529282015190921690820152606001610371565b6104616040518060400160405280601381526020017f45564d3245564d4f6e52616d7020312e322e300000000000000000000000000081525081565b6040516103719190614a56565b61048161047c366004614bf5565b61096f565b005b610496610491366004614d2b565b6109d8565b604051908152602001610371565b6104816104b2366004614dfc565b610e38565b6104bf610e4e565b60405167ffffffffffffffff9091168152602001610371565b6104e0610e82565b604051610371919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b61048161054a366004614e60565b610f32565b6010546040516bffffffffffffffffffffffff9091168152602001610371565b6002546001600160a01b03165b6040516001600160a01b039091168152602001610371565b61057c6105a23660046149cb565b6110e7565b6104816105b53660046149cb565b611146565b61071c6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101919091525060408051610140810182526005546001600160a01b03808216835261ffff7401000000000000000000000000000000000000000083048116602085015263ffffffff76010000000000000000000000000000000000000000000084048116958501959095527a0100000000000000000000000000000000000000000000000000008304811660608501527c0100000000000000000000000000000000000000000000000000000000928390048516608085015260065480821660a086015262010000810490911660c0850152640100000000810490911660e08401527801000000000000000000000000000000000000000000000000810484166101008401520490911661012082015290565b6040516103719190614f74565b610481610737366004614f95565b611210565b61048161074a366004615082565b611276565b61048161132e565b6104bf6107653660046149cb565b611411565b6000546001600160a01b031661057c565b61087e6107893660046149cb565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b03166000908152600d6020908152604091829020825160c081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081049092169281019290925267ffffffffffffffff6c0100000000000000000000000082048116606084015274010000000000000000000000000000000000000000820416608083015260ff7c010000000000000000000000000000000000000000000000000000000090910416151560a082015290565b6040516103719190600060c08201905063ffffffff80845116835280602085015116602084015280604085015116604084015250606083015167ffffffffffffffff8082166060850152806080860151166080850152505060a0830151151560a083015292915050565b6104966108f63660046150f7565b611519565b610903611f4b565b6040516103719291906151a5565b61048161091f3660046151e7565b61204f565b6104966120b7565b6109346120c1565b6040516103719190615255565b61048161094f3660046152a2565b612172565b610481612183565b61048161096a3660046149cb565b61241a565b6000546001600160a01b0316331480159061099557506002546001600160a01b03163314155b156109cc576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d58161242b565b50565b6000806109f06109eb608085018561536a565b61265a565b9050610a1b610a02602085018561536a565b8351909150610a1460408701876153cf565b905061274e565b6000600d81610a3060808701606088016149cb565b6001600160a01b031681526020808201929092526040908101600020815160c081018352905463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316918101919091526c01000000000000000000000000820467ffffffffffffffff90811660608301527401000000000000000000000000000000000000000083041660808201527c010000000000000000000000000000000000000000000000000000000090910460ff16151560a08201819052909150610b4d57610b0a60808501606086016149cb565b6040517fa7499d200000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b600654600090819064010000000090046001600160a01b031663ffdb4b37610b7b6080890160608a016149cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044016040805180830381865afa158015610c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2a9190615463565b9092509050806000808080610c4260408c018c6153cf565b90501115610c7d57610c71610c5d60808c0160608d016149cb565b87610c6b60408e018e6153cf565b8b612877565b91945092509050610c99565b8651610c969063ffffffff16662386f26fc100006154c5565b92505b6080870151610cb29067ffffffffffffffff16846154c5565b606088015160055491945060009167ffffffffffffffff9091169063ffffffff8516907a010000000000000000000000000000000000000000000000000000900461ffff16610d0460208f018f61536a565b610d0f9291506154c5565b6005548c51610d3e91760100000000000000000000000000000000000000000000900463ffffffff16906154dc565b610d4891906154dc565b610d5291906154dc565b610d5c91906154c5565b610d76906dffffffffffffffffffffffffffff87166154c5565b60065490915060009062010000900461ffff1615610dea576000607060ff16887bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16901c9050610de6818e8060200190610dcc919061536a565b90508f8060400190610dde91906153cf565b905087612b30565b9150505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff881681610e1484886154dc565b610e1e91906154dc565b610e2891906154ef565b9c9b505050505050505050505050565b610e40612c02565b610e4a8282612c78565b5050565b601054600090610e7d90700100000000000000000000000000000000900467ffffffffffffffff16600161552a565b905090565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160a0810182526003546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff161515938301939093526004548084166060840152049091166080820152610e7d90612fd8565b6000546001600160a01b03163314801590610f5857506002546001600160a01b03163314155b15610f8f576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610fd657506001600160a01b038116155b1561100d576040517f232cb97f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061101761308a565b121561104f576040517f02075e0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610e4a9082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d6919061554b565b6001600160a01b038516919061314a565b60006110f4600a836131ca565b611135576040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b44565b611140600a836131df565b92915050565b6000546001600160a01b0316331480159061116c57506002546001600160a01b03163314155b156111a3576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8fe72c3e0020beb3234e76ae6676fa576fbfcae600af1c4fea44784cf0db329c906020015b60405180910390a150565b6000546001600160a01b0316331480159061123657506002546001600160a01b03163314155b1561126d576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d5816131f4565b6000546001600160a01b0316331480159061129c57506002546001600160a01b03163314155b156112d3576040517ffbdb8e5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4a8282808060200260200160405190810160405280939291908181526020016000905b828210156113245761131560408302860136819003810190615564565b815260200190600101906112f8565b5050505050613321565b6001546001600160a01b031633146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610b44565b60008054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b0381166000908152600f602052604081205467ffffffffffffffff168015801561146a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b15611140576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151291906155a3565b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d91906155c0565b156115d4576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611614576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005546001600160a01b03163314611658576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611662848061536a565b90506020146116a957611675848061536a565b6040517f370d875f000000000000000000000000000000000000000000000000000000008152600401610b44929190615626565b60006116b5858061536a565b8101906116c2919061563a565b90506001600160a01b038111806116d95750600a81105b156116e857611675858061536a565b60006116fa6109eb608088018861536a565b51905061171d61170d602088018861536a565b905082610a1460408a018a6153cf565b61179961172d60408801886153cf565b808060200260200160405190810160405280939291908181526020016000905b828210156117795761176a60408302860136819003810190615653565b8152602001906001019061174d565b505060065464010000000090046001600160a01b03169250613594915050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166117d360808801606089016149cb565b6001600160a01b03160361183757601080548691906000906118049084906bffffffffffffffffffffffff1661568d565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061195e565b60065464010000000090046001600160a01b03166241e5be61185f6080890160608a016149cb565b60405160e083901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039182166004820152602481018990527f00000000000000000000000000000000000000000000000000000000000000009091166044820152606401602060405180830381865afa1580156118eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190f919061554b565b6010805460009061192f9084906bffffffffffffffffffffffff1661568d565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505b6010546bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911611156119cb576040517fe5c7a49100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152600f602052604090205467ffffffffffffffff16158015611a2357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b15611b1b576040517f856c82470000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063856c824790602401602060405180830381865afa158015611aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acb91906155a3565b6001600160a01b0385166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169190911790555b6000604051806101a001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168152602001866001600160a01b03168152602001846001600160a01b0316815260200160108081819054906101000a900467ffffffffffffffff16611b98906156b2565b825467ffffffffffffffff9182166101009390930a838102908302199091161790925582526020808301869052600060408085018290526001600160a01b038b168252600f90925290812080546060909401939092611bf791166156b2565b825467ffffffffffffffff9182166101009390930a83810292021916179091558152602001611c2c60808a0160608b016149cb565b6001600160a01b03168152602001878152602001888060200190611c50919061536a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001611c9760408a018a6153cf565b808060200260200160405190810160405280939291908181526020016000905b82821015611ce357611cd460408302860136819003810190615653565b81526020019060010190611cb7565b5050509183525050602001611cfb60408a018a6153cf565b905067ffffffffffffffff811115611d1557611d15614a69565b604051908082528060200260200182016040528015611d4857816020015b6060815260200190600190039081611d335790505b508152600060209091018190529091505b611d6660408901896153cf565b9050811015611ed3576000611d7e60408a018a6153cf565b83818110611d8e57611d8e6156d9565b905060400201803603810190611da49190615653565b9050611db381600001516110e7565b6001600160a01b0316639687544588611dcc8c8061536a565b60208087015160408051928301815260008352517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152611e3a959493927f000000000000000000000000000000000000000000000000000000000000000091600401615708565b6000604051808303816000875af1158015611e59573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e9f9190810190615760565b8361016001518381518110611eb657611eb66156d9565b60200260200101819052505080611ecc90615812565b9050611d59565b50611efe817f000000000000000000000000000000000000000000000000000000000000000061374f565b6101808201526040517fd0c3c799bf9e2639de44391e7f524d229b2b55f5b1ea94b2bf7da42f7243dddd90611f349083906158e3565b60405180910390a161018001519695505050505050565b6060600080611f5a60076138c8565b90508067ffffffffffffffff811115611f7557611f75614a69565b604051908082528060200260200182016040528015611fba57816020015b6040805180820190915260008082526020820152815260200190600190039081611f935790505b50925060005b8181101561202c57600080611fd66007846138d3565b915091506040518060400160405280836001600160a01b031681526020018261ffff1681525086848151811061200e5761200e6156d9565b602002602001018190525050508061202590615812565b9050611fc0565b505060105491926c0100000000000000000000000090920463ffffffff16919050565b6000546001600160a01b0316331480159061207557506002546001600160a01b03163314155b156120ac576040517ff6cd562000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109d56003826138f1565b6000610e7d61308a565b606060006120cf600a613ac9565b67ffffffffffffffff8111156120e7576120e7614a69565b604051908082528060200260200182016040528015612110578160200160208202803683370190505b50905060005b815181101561216c5761212a600a82613ad4565b5082828151811061213d5761213d6156d9565b60200260200101816001600160a01b03166001600160a01b0316815250508061216590615812565b9050612116565b50919050565b61217a612c02565b6109d581613ae3565b6000546001600160a01b031633148015906121a957506002546001600160a01b03163314155b80156121bd57506121bb600733613e3b565b155b156121f4576040517f195db95800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff166000819003612248576040517f990e30bf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546bffffffffffffffffffffffff1681811015612293576040517f8d0f71d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061229d61308a565b12156122d5576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060006122e260076138c8565b905060005b818110156123d7576000806122fd6007846138d3565b909250905060008761231d836bffffffffffffffffffffffff8a166154c5565b61232791906154ef565b90506123338187615a36565b95506123776001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016846bffffffffffffffffffffffff841661314a565b6040516bffffffffffffffffffffffff821681526001600160a01b038416907f55fdec2aab60a41fa5abb106670eb1006f5aeaee1ba7afea2bc89b5b3ec7678f9060200160405180910390a2505050806123d090615812565b90506122e7565b5050601080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff929092169190911790555050565b612422612c02565b6109d581613e50565b60005b815181101561262a57600082828151811061244b5761244b6156d9565b6020908102919091018101516040805160c080820183528385015163ffffffff9081168352838501518116838701908152606080870151831685870190815260808089015167ffffffffffffffff90811693880193845260a0808b01518216928901928352968a0151151596880196875298516001600160a01b03166000908152600d909a5296909820945185549251985191519651945115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9589167401000000000000000000000000000000000000000002959095167fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff979098166c01000000000000000000000000027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff9285166801000000000000000002929092167fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff998516640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090941691909416179190911796909616179490941791909116919091179190911790555061262381615812565b905061242e565b507f2386f61ab5cafc3fed44f9f614f721ab53479ef64067fd16c1a2491b63ddf1a8816040516112059190615a5b565b60408051602081019091526000815260008290036126b05750604080516020810190915267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152611140565b7f97a657c9000000000000000000000000000000000000000000000000000000006126db8385615b05565b7fffffffff000000000000000000000000000000000000000000000000000000001614612734576040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127418260048186615b4d565b8101906115129190615b77565b6006547801000000000000000000000000000000000000000000000000900463ffffffff16808411156127b7576040517f869337890000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610b44565b6006547c0100000000000000000000000000000000000000000000000000000000900463ffffffff16831115612819576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055474010000000000000000000000000000000000000000900461ffff16821115612871576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000808084815b81811015612abb57600088888381811061289a5761289a6156d9565b9050604002018036038101906128b09190615653565b80516001600160a01b03166000908152600e60209081526040918290208251606081018452905461ffff8116825263ffffffff620100008204811693830193909352660100000000000090048216928101929092528251929350909161291a91600a91906131ca16565b61295e5781516040517fbf16aab60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b44565b805160009061ffff1615612a775760008d6001600160a01b031684600001516001600160a01b031614612a225760065484516040517f4ab35b0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526401000000009092041690634ab35b0b90602401602060405180830381865afa1580156129f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b9190615bb9565b9050612a25565b508b5b82516020850151620186a09161ffff1690612a5f907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff851690613f2b565b612a6991906154c5565b612a7391906154ef565b9150505b612a8181896154dc565b9750816020015187612a939190615bd4565b9650816040015186612aa59190615bd4565b955050505080612ab490615812565b905061287e565b506000856020015163ffffffff16662386f26fc10000612adb91906154c5565b905080851015612aee579350612b259050565b6000866040015163ffffffff16662386f26fc10000612b0d91906154c5565b905080861115612b21579450612b25915050565b5050505b955095509592505050565b60008063ffffffff8316612b456080866154c5565b612b51876102206154dc565b612b5b91906154dc565b612b6591906154dc565b6005546006549192506000917c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690612ba79061ffff16846154c5565b612bb191906154dc565b60065490915062010000900461ffff16612bdb6dffffffffffffffffffffffffffff8916836154c5565b612be591906154c5565b612bf590655af3107a40006154c5565b925050505b949350505050565b6000546001600160a01b03163314612c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610b44565b565b60005b8251811015612dd9576000838281518110612c9857612c986156d9565b60200260200101516000015190506000848381518110612cba57612cba6156d9565b6020026020010151602001519050612cdc82600a6131ca90919063ffffffff16565b612d1d576040517f73913ebd0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b44565b6001600160a01b038116612d32600a846131df565b6001600160a01b031614612d72576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d7d600a83613f68565b15612dc657604080516001600160a01b038085168252831660208201527f987eb3c2f78454541205f72f34839b434c306c9eaf4922efd7c0c3060fdb2e4c910160405180910390a15b505080612dd290615812565b9050612c7b565b5060005b8151811015612fd3576000828281518110612dfa57612dfa6156d9565b60200260200101516000015190506000838381518110612e1c57612e1c6156d9565b602002602001015160200151905060006001600160a01b0316826001600160a01b03161480612e5257506001600160a01b038116155b15612e89576040517f6c2a418000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03166321df0da76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eeb9190615bf1565b6001600160a01b0316826001600160a01b031614612f35576040517f6cc7b99800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f41600a8383613f7d565b15612f8e57604080516001600160a01b038085168252831660208201527f95f865c2808f8b2a85eea2611db7843150ee7835ef1403f9755918a97d76933c910160405180910390a1612fc0565b6040517f3caf458500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505080612fcc90615812565b9050612ddd565b505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261306682606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff164261304a9190615c0e565b85608001516fffffffffffffffffffffffffffffffff16613f93565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b6010546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916bffffffffffffffffffffffff16907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561311c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613140919061554b565b610e7d9190615c21565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052612fd3908490613fbb565b6000611512836001600160a01b0384166140ba565b6000611512836001600160a01b0384166140c6565b60005b81518110156132f1576000828281518110613214576132146156d9565b60209081029190910181015160408051606080820183528385015161ffff90811683528385015163ffffffff90811684880190815292860151811684860190815295516001600160a01b03166000908152600e90975293909520915182549151945184166601000000000000027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff9590941662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000009092169516949094179390931791909116179055506132ea81615812565b90506131f7565b507f3df02211160f78e9bbed13e8bf0752035362a05f0651a5e25007acfb659c3620816040516112059190615c41565b8051604081111561335e576040517fb5a10cfa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6010546c01000000000000000000000000900463ffffffff16158015906133ac575060105463ffffffff6c010000000000000000000000008204166bffffffffffffffffffffffff90911610155b156133b9576133b9612183565b60006133c560076138c8565b90505b80156134075760006133e66133de600184615c0e565b6007906138d3565b5090506133f46007826140d2565b50508061340090615cae565b90506133c8565b506000805b82811015613515576000848281518110613428576134286156d9565b6020026020010151600001519050600085838151811061344a5761344a6156d9565b60200260200101516020015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061349f57506001600160a01b038216155b156134e1576040517f4de938d10000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610b44565b6134f160078361ffff84166140e7565b5061350061ffff821685615bd4565b935050508061350e90615812565b905061340c565b50601080547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790556040517f8c337bff38141c507abd25c547606bdde78fe8c12e941ab613f3a565fea6cd24906135879083908690615ce3565b60405180910390a1505050565b81516000805b82811015613741576000846001600160a01b031663d02641a08784815181106135c5576135c56156d9565b6020908102919091010151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa15801561362c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136509190615d02565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166000036136d55785828151811061368b5761368b6156d9565b6020908102919091010151516040517f9a655f7b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610b44565b6137238683815181106136ea576136ea6156d9565b602002602001015160200151827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613f2b90919063ffffffff16565b61372d90846154dc565b9250508061373a90615812565b905061359a565b5061287160038260006140fd565b60008060001b8284602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001516040516020016137e59897969594939291906001600160a01b039889168152968816602088015267ffffffffffffffff95861660408801526060870194909452911515608086015290921660a0840152921660c082015260e08101919091526101000190565b604051602081830303815290604052805190602001208561012001518051906020012086610140015160405160200161381e9190615d35565b6040516020818303038152906040528051906020012087610160015160405160200161384a9190615d48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b60006111408261444c565b60008080806138e28686614457565b909450925050505b9250929050565b815460009061391a90700100000000000000000000000000000000900463ffffffff1642615c0e565b905080156139bc5760018301548354613962916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416613f93565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546139e2916fffffffffffffffffffffffffffffffff9081169116614482565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906135879084908151151581526020808301516fffffffffffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b6000611140826138c8565b60008080806138e286866138d3565b60e08101516001600160a01b0316613b27576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548161ffff021916908361ffff16021790555060408201518160000160166101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601a6101000a81548161ffff021916908361ffff160217905550608082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160006101000a81548161ffff021916908361ffff16021790555060c08201518160010160026101000a81548161ffff021916908361ffff16021790555060e08201518160010160046101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555061012082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055509050507f2a57f7c2027cf032c78b77d4d8d2fbd20ad22e5d5e5b5fb23ac7d7820d44adc66040518060e001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681525082604051611205929190615d5b565b6000611512836001600160a01b038416614498565b336001600160a01b03821603613ec2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610b44565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000670de0b6b3a7640000613f5e837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166154c5565b61151291906154ef565b6000611512836001600160a01b0384166144a4565b6000612bfa846001600160a01b038516846144b0565b6000613fb285613fa384866154c5565b613fad90876154dc565b614482565b95945050505050565b6000614010826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144c69092919063ffffffff16565b805190915015612fd3578080602001905181019061402e91906155c0565b612fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610b44565b60006115128383614498565b600061151283836144d5565b6000611512836001600160a01b03841661455f565b6000612bfa846001600160a01b0385168461457c565b825474010000000000000000000000000000000000000000900460ff161580614124575081155b1561412e57505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061417490700100000000000000000000000000000000900463ffffffff1642615c0e565b9050801561423457818311156141b6576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546141f09083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613f93565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156142d1576001600160a01b038416614286576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610b44565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b0385166044820152606401610b44565b848310156143ca5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906143159082615c0e565b61431f878a615c0e565b61432991906154dc565b61433391906154ef565b90506001600160a01b03861661437f576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610b44565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b0387166044820152606401610b44565b6143d48584615c0e565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b600061114082614599565b6000808061446585856145a3565b600081815260029690960160205260409095205494959350505050565b60008183106144915781611512565b5090919050565b600061151283836145af565b6000611512838361455f565b6000612bfa84846001600160a01b03851661457c565b6060612bfa84846000856145c7565b6000818152600283016020526040812054801515806144f957506144f98484614498565b611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610b44565b6000818152600283016020526040812081905561151283836146c8565b60008281526002840160205260408120829055612bfa84846146d4565b6000611140825490565b600061151283836146e0565b60008181526001830160205260408120541515611512565b606082471015614659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610b44565b600080866001600160a01b031685876040516146759190615de5565b60006040518083038185875af1925050503d80600081146146b2576040519150601f19603f3d011682016040523d82523d6000602084013e6146b7565b606091505b5091509150612bf58783838761470a565b6000611512838361479d565b60006115128383614897565b60008260000182815481106146f7576146f76156d9565b9060005260206000200154905092915050565b6060831561479357825160000361478c576001600160a01b0385163b61478c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b44565b5081612bfa565b612bfa83836148e6565b600081815260018301602052604081205480156148865760006147c1600183615c0e565b85549091506000906147d590600190615c0e565b905081811461483a5760008660000182815481106147f5576147f56156d9565b9060005260206000200154905080876000018481548110614818576148186156d9565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061484b5761484b615e01565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611140565b6000915050611140565b5092915050565b60008181526001830160205260408120546148de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611140565b506000611140565b8151156148f65781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b449190614a56565b60e0810161114082846001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b6001600160a01b03811681146109d557600080fd5b80356149c6816149a6565b919050565b6000602082840312156149dd57600080fd5b8135611512816149a6565b60005b83811015614a035781810151838201526020016149eb565b50506000910152565b60008151808452614a248160208601602086016149e8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006115126020830184614a0c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715614abb57614abb614a69565b60405290565b6040805190810167ffffffffffffffff81118282101715614abb57614abb614a69565b6040516080810167ffffffffffffffff81118282101715614abb57614abb614a69565b604051610140810167ffffffffffffffff81118282101715614abb57614abb614a69565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614b7257614b72614a69565b604052919050565b600067ffffffffffffffff821115614b9457614b94614a69565b5060051b60200190565b63ffffffff811681146109d557600080fd5b80356149c681614b9e565b67ffffffffffffffff811681146109d557600080fd5b80356149c681614bbb565b80151581146109d557600080fd5b80356149c681614bdc565b60006020808385031215614c0857600080fd5b823567ffffffffffffffff811115614c1f57600080fd5b8301601f81018513614c3057600080fd5b8035614c43614c3e82614b7a565b614b2b565b81815260e09182028301840191848201919088841115614c6257600080fd5b938501935b83851015614d0d5780858a031215614c7f5760008081fd5b614c87614a98565b8535614c92816149a6565b815285870135614ca181614b9e565b81880152604086810135614cb481614b9e565b90820152606086810135614cc781614b9e565b908201526080614cd8878201614bd1565b9082015260a0614ce9878201614bd1565b9082015260c0614cfa878201614bea565b9082015283529384019391850191614c67565b50979650505050505050565b600060a0828403121561216c57600080fd5b600060208284031215614d3d57600080fd5b813567ffffffffffffffff811115614d5457600080fd5b612bfa84828501614d19565b600082601f830112614d7157600080fd5b81356020614d81614c3e83614b7a565b82815260069290921b84018101918181019086841115614da057600080fd5b8286015b84811015614df15760408189031215614dbd5760008081fd5b614dc5614ac1565b8135614dd0816149a6565b815281850135614ddf816149a6565b81860152835291830191604001614da4565b509695505050505050565b60008060408385031215614e0f57600080fd5b823567ffffffffffffffff80821115614e2757600080fd5b614e3386838701614d60565b93506020850135915080821115614e4957600080fd5b50614e5685828601614d60565b9150509250929050565b60008060408385031215614e7357600080fd5b8235614e7e816149a6565b91506020830135614e8e816149a6565b809150509250929050565b80516001600160a01b031682526020810151614ebb602084018261ffff169052565b506040810151614ed3604084018263ffffffff169052565b506060810151614ee9606084018261ffff169052565b506080810151614f01608084018263ffffffff169052565b5060a0810151614f1760a084018261ffff169052565b5060c0810151614f2d60c084018261ffff169052565b5060e0810151614f4860e08401826001600160a01b03169052565b506101008181015163ffffffff81168483015250506101208181015163ffffffff811684830152612871565b61014081016111408284614e99565b803561ffff811681146149c657600080fd5b60006020808385031215614fa857600080fd5b823567ffffffffffffffff811115614fbf57600080fd5b8301601f81018513614fd057600080fd5b8035614fde614c3e82614b7a565b81815260079190911b82018301908381019087831115614ffd57600080fd5b928401925b82841015615077576080848903121561501b5760008081fd5b615023614ae4565b843561502e816149a6565b815261503b858701614f83565b8682015260408086013561504e81614b9e565b9082015260608581013561506181614b9e565b9082015282526080939093019290840190615002565b979650505050505050565b6000806020838503121561509557600080fd5b823567ffffffffffffffff808211156150ad57600080fd5b818501915085601f8301126150c157600080fd5b8135818111156150d057600080fd5b8660208260061b85010111156150e557600080fd5b60209290920196919550909350505050565b60008060006060848603121561510c57600080fd5b833567ffffffffffffffff81111561512357600080fd5b61512f86828701614d19565b935050602084013591506040840135615147816149a6565b809150509250925092565b600081518084526020808501945080840160005b8381101561519a57815180516001600160a01b0316885283015161ffff168388015260409096019590820190600101615166565b509495945050505050565b6040815260006151b86040830185615152565b90508260208301529392505050565b80356fffffffffffffffffffffffffffffffff811681146149c657600080fd5b6000606082840312156151f957600080fd5b6040516060810181811067ffffffffffffffff8211171561521c5761521c614a69565b604052823561522a81614bdc565b8152615238602084016151c7565b6020820152615249604084016151c7565b60408201529392505050565b6020808252825182820181905260009190848201906040850190845b818110156152965783516001600160a01b031683529284019291840191600101615271565b50909695505050505050565b600061014082840312156152b557600080fd5b6152bd614b07565b6152c6836149bb565b81526152d460208401614f83565b60208201526152e560408401614bb0565b60408201526152f660608401614f83565b606082015261530760808401614bb0565b608082015261531860a08401614f83565b60a082015261532960c08401614f83565b60c082015261533a60e084016149bb565b60e082015261010061534d818501614bb0565b9082015261012061535f848201614bb0565b908201529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261539f57600080fd5b83018035915067ffffffffffffffff8211156153ba57600080fd5b6020019150368190038213156138ea57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261540457600080fd5b83018035915067ffffffffffffffff82111561541f57600080fd5b6020019150600681901b36038213156138ea57600080fd5b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146149c657600080fd5b6000806040838503121561547657600080fd5b61547f83615437565b915061548d60208401615437565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761114057611140615496565b8082018082111561114057611140615496565b600082615525577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b67ffffffffffffffff81811683821601908082111561489057614890615496565b60006020828403121561555d57600080fd5b5051919050565b60006040828403121561557657600080fd5b61557e614ac1565b8235615589816149a6565b815261559760208401614f83565b60208201529392505050565b6000602082840312156155b557600080fd5b815161151281614bbb565b6000602082840312156155d257600080fd5b815161151281614bdc565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612bfa6020830184866155dd565b60006020828403121561564c57600080fd5b5035919050565b60006040828403121561566557600080fd5b61566d614ac1565b8235615678816149a6565b81526020928301359281019290925250919050565b6bffffffffffffffffffffffff81811683821601908082111561489057614890615496565b600067ffffffffffffffff8083168181036156cf576156cf615496565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b038716815260a06020820152600061572b60a0830187896155dd565b85604084015267ffffffffffffffff8516606084015282810360808401526157538185614a0c565b9998505050505050505050565b60006020828403121561577257600080fd5b815167ffffffffffffffff8082111561578a57600080fd5b818401915084601f83011261579e57600080fd5b8151818111156157b0576157b0614a69565b6157e160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614b2b565b91508082528560208285010111156157f857600080fd5b6158098160208401602086016149e8565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361584357615843615496565b5060010190565b600081518084526020808501945080840160005b8381101561519a57815180516001600160a01b03168852830151838801526040909601959082019060010161585e565b600081518084526020808501808196508360051b8101915082860160005b858110156158d65782840389526158c4848351614a0c565b988501989350908401906001016158ac565b5091979650505050505050565b602081526158fe60208201835167ffffffffffffffff169052565b6000602083015161591a60408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015167ffffffffffffffff8116608084015250608083015160a083015260a083015161596360c084018215159052565b5060c083015167ffffffffffffffff811660e08401525060e0830151610100615996818501836001600160a01b03169052565b840151610120848101919091528401516101a0610140808601829052919250906159c46101c0860184614a0c565b92508086015190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610160818786030181880152615a03858461584a565b945080880151925050610180818786030181880152615a22858461588e565b970151959092019490945250929392505050565b6bffffffffffffffffffffffff82811682821603908082111561489057614890615496565b602080825282518282018190526000919060409081850190868401855b828110156158d657815180516001600160a01b031685528681015163ffffffff90811688870152868201518116878701526060808301519091169086015260808082015167ffffffffffffffff169086015260a080820151615ae58288018267ffffffffffffffff169052565b505060c09081015115159085015260e09093019290850190600101615a78565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015615b455780818660040360031b1b83161692505b505092915050565b60008085851115615b5d57600080fd5b83861115615b6a57600080fd5b5050820193919092039150565b600060208284031215615b8957600080fd5b6040516020810181811067ffffffffffffffff82111715615bac57615bac614a69565b6040529135825250919050565b600060208284031215615bcb57600080fd5b61151282615437565b63ffffffff81811683821601908082111561489057614890615496565b600060208284031215615c0357600080fd5b8151611512816149a6565b8181038181111561114057611140615496565b818103600083128015838313168383128216171561489057614890615496565b602080825282518282018190526000919060409081850190868401855b828110156158d657815180516001600160a01b031685528681015161ffff16878601528581015163ffffffff90811687870152606091820151169085015260809093019290850190600101615c5e565b600081615cbd57615cbd615496565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b63ffffffff83168152604060208201526000612bfa6040830184615152565b600060408284031215615d1457600080fd5b615d1c614ac1565b615d2583615437565b8152602083015161559781614b9e565b602081526000611512602083018461584a565b602081526000611512602083018461588e565b6102208101615dd882856001600160a01b03808251168352602082015167ffffffffffffffff808216602086015280604085015116604086015280606085015116606086015250506bffffffffffffffffffffffff60808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b61151260e0830184614e99565b60008251615df78184602087016149e8565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000813000a", } var EVM2EVMOnRampABI = EVM2EVMOnRampMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 46278bc909..f6e7a02841 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -5,9 +5,9 @@ burn_mint_token_pool: ../../../contracts/solc/v0.8.19/BurnMintTokenPool.abi ../. commit_store: ../../../contracts/solc/v0.8.19/CommitStore.abi ../../../contracts/solc/v0.8.19/CommitStore.bin 7d80f085f8249ef15e0850bf03698806c972125156f3476a1dafca54598f7f4d commit_store_helper: ../../../contracts/solc/v0.8.19/CommitStoreHelper.abi ../../../contracts/solc/v0.8.19/CommitStoreHelper.bin 0891a1662bda54db424d12e80a56533cfd9859f7d94a3be147ad3caa46cad072 custom_token_pool: ../../../contracts/solc/v0.8.19/CustomTokenPool.abi ../../../contracts/solc/v0.8.19/CustomTokenPool.bin 79ab937aa4493bf31fb0e57affd00555aad75205c90268e89674c28ea9e5e48f -evm_2_evm_offramp: ../../../contracts/solc/v0.8.19/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.19/EVM2EVMOffRamp.bin 911c974dde7053a3ced860d1578ca90bc7eff8545f2a2061a9b1be75284f3596 -evm_2_evm_offramp_helper: ../../../contracts/solc/v0.8.19/EVM2EVMOffRampHelper.abi ../../../contracts/solc/v0.8.19/EVM2EVMOffRampHelper.bin ddd536b27b8c44f632e4f75089f3ad9fc3f4574dad0a4afe39c75e7c67126f56 -evm_2_evm_onramp: ../../../contracts/solc/v0.8.19/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.19/EVM2EVMOnRamp.bin c2952fc3af17380141029b5e7b5b6422b54dcbe7b40e7d651d49aa0717c79ce0 +evm_2_evm_offramp: ../../../contracts/solc/v0.8.19/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.19/EVM2EVMOffRamp.bin 8a0bd8a428ae8d071d326a2d4e1f7a2d35da08fef7307b6e1f15e108eb23770e +evm_2_evm_offramp_helper: ../../../contracts/solc/v0.8.19/EVM2EVMOffRampHelper.abi ../../../contracts/solc/v0.8.19/EVM2EVMOffRampHelper.bin 9e06fb409bcc9b1728c1a327d404640796c2834e7798728224b8ad4e5745c4a7 +evm_2_evm_onramp: ../../../contracts/solc/v0.8.19/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.19/EVM2EVMOnRamp.bin 9623760aeacc020a7c5b1ebf67147db69a361b1344b23ad540df49c4b668c408 lock_release_token_pool: ../../../contracts/solc/v0.8.19/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.19/LockReleaseTokenPool.bin 7f7a28f55f9fb63669cd8038a7f99e31431acd6d15ddeeb6a77188eb0bf85d58 maybe_revert_message_receiver: ../../../contracts/solc/v0.8.19/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.19/MaybeRevertMessageReceiver.bin aaa90eac8cc555ee4b0fbe57d1fb8d72d6689b29510b238177c97ab9b7979ac5 mock_arm_contract: ../../../contracts/solc/v0.8.19/MockARM.abi ../../../contracts/solc/v0.8.19/MockARM.bin efcf4cb260a2b6a6e189639f62bb50ab650a135715c1fcd42c92dfa9d04aa0e3 diff --git a/core/scripts/ccip/manual-execution/helpers/execReport.go b/core/scripts/ccip/manual-execution/helpers/execReport.go index 9d92bc5767..b0cfd81cf8 100644 --- a/core/scripts/ccip/manual-execution/helpers/execReport.go +++ b/core/scripts/ccip/manual-execution/helpers/execReport.go @@ -150,7 +150,7 @@ func NewLeafHasher(sourceChainId uint64, destChainId uint64, onRampId common.Add geABI, _ := abi.JSON(strings.NewReader(OnRampABI)) return &LeafHasher{ geABI: geABI, - metaDataHash: getMetaDataHash(ctx, ctx.Hash([]byte("EVM2EVMMessageHash")), sourceChainId, onRampId, destChainId), + metaDataHash: getMetaDataHash(ctx, ctx.Hash([]byte("EVM2EVMMessageHashV2")), sourceChainId, onRampId, destChainId), ctx: ctx, } } diff --git a/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher.go b/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher.go index 936cd11bfc..ac875d7965 100644 --- a/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher.go +++ b/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher.go @@ -30,7 +30,7 @@ type LeafHasher struct { func NewLeafHasher(sourceChainSelector uint64, destChainSelector uint64, onRampId common.Address, ctx Ctx[[32]byte]) *LeafHasher { return &LeafHasher{ - metaDataHash: GetMetaDataHash(ctx, ctx.Hash([]byte("EVM2EVMMessageHash")), sourceChainSelector, onRampId, destChainSelector), + metaDataHash: GetMetaDataHash(ctx, ctx.Hash([]byte("EVM2EVMMessageHashV2")), sourceChainSelector, onRampId, destChainSelector), ctx: ctx, } } diff --git a/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher_test.go b/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher_test.go index 222762754c..e2e0978f74 100644 --- a/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher_test.go +++ b/core/services/ocr2/plugins/ccip/internal/hashlib/leaf_hasher_test.go @@ -43,7 +43,7 @@ func TestHasher(t *testing.T) { require.NoError(t, err) // NOTE: Must match spec - require.Equal(t, "69f2a5a728a38fd6d6f04b53b0bf8a244955e1dfd7ec776ed51bad06382c431a", hex.EncodeToString(hash[:])) + require.Equal(t, "46ad031bfb052db2e4a2514fed8dc480b98e5ce4acb55d5640d91407e0d8a3e9", hex.EncodeToString(hash[:])) message = evm_2_evm_onramp.InternalEVM2EVMMessage{ SourceChainSelector: sourceChainSelector, @@ -70,7 +70,7 @@ func TestHasher(t *testing.T) { require.NoError(t, err) // NOTE: Must match spec - require.Equal(t, "807e16f57abf48486d4427a4c06d21b75eb6ab05170ce4fdb5f272ed18cfa3ae", hex.EncodeToString(hash[:])) + require.Equal(t, "4362a13a42e52ff5ce4324e7184dc7aa41704c3146bc842d35d95b94b32a78b6", hex.EncodeToString(hash[:])) } func TestMetaDataHash(t *testing.T) {