0 txs
0 calls
constructor
constructor(address _etherFiDataProvider)
functions
CASH_MODULE_CONTROLLER_ROLE
viewfunction CASH_MODULE_CONTROLLER_ROLE() view returns (bytes32)
ETH
viewfunction ETH() view returns (address)
ETHER_FI_WALLET_ROLE
viewfunction ETHER_FI_WALLET_ROLE() view returns (bytes32)
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
HUNDRED_PERCENT_IN_BPS
viewfunction HUNDRED_PERCENT_IN_BPS() view returns (uint256)
MAX_CASHBACK_PERCENTAGE
viewfunction MAX_CASHBACK_PERCENTAGE() view returns (uint256)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
roleRegistry
viewfunction roleRegistry() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
configureWithdrawAssets
nonpayablefunction configureWithdrawAssets(address[] assets, bool[] shouldWhitelist)
pause
nonpayablefunction pause()
requestWithdrawal
nonpayablefunction requestWithdrawal(address safe, address[] tokens, uint256[] amounts, address recipient, address[] signers, bytes[] signatures)
setCashbackSplitToSafeBps
nonpayablefunction setCashbackSplitToSafeBps(address safe, uint256 splitInBps, address signer, bytes signature)
setDelays
nonpayablefunction setDelays(uint64 withdrawalDelay, uint64 spendLimitDelay, uint64 modeDelay)
setMode
nonpayablefunction setMode(address safe, uint8 mode, address signer, bytes signature)
setReferrerCashbackPercentageInBps
nonpayablefunction setReferrerCashbackPercentageInBps(uint64 cashbackPercentage)
setSafeTier
nonpayablefunction setSafeTier(address[] safes, uint8[] tiers)
setSettlementDispatcher
nonpayablefunction setSettlementDispatcher(uint8 binSponsor, address dispatcher)
setTierCashbackPercentage
nonpayablefunction setTierCashbackPercentage(uint8[] tiers, uint256[] cashbackPercentages)
setupModule
nonpayablefunction setupModule(bytes data)
unpause
nonpayablefunction unpause()
updateSpendingLimit
nonpayablefunction updateSpendingLimit(address safe, uint256 dailyLimitInUsd, uint256 monthlyLimitInUsd, address signer, bytes signature)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyInSameTier
error AlreadyInSameTier(uint256 index)
AmountZero
error AmountZero()
ArrayLengthMismatch
error ArrayLengthMismatch()
ArrayLengthMismatch
error ArrayLengthMismatch()
BorrowingsExceedMaxBorrowAfterSpending
error BorrowingsExceedMaxBorrowAfterSpending()
CannotWithdrawYet
error CannotWithdrawYet()
CashbackPercentageGreaterThanMaxAllowed
error CashbackPercentageGreaterThanMaxAllowed()
DailyLimitCannotBeGreaterThanMonthlyLimit
error DailyLimitCannotBeGreaterThanMonthlyLimit()
DuplicateElementFound
error DuplicateElementFound()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InvalidAddress
error InvalidAddress(uint256 index)
InvalidERC1271Signer
error InvalidERC1271Signer()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
InvalidSignatures
error InvalidSignatures()
InvalidSigner
error InvalidSigner()
InvalidWithdrawAsset
error InvalidWithdrawAsset(address asset)
ModeAlreadySet
error ModeAlreadySet()
NotInitializing
error NotInitializing()
OnlyBorrowToken
error OnlyBorrowToken()
OnlyCashModuleController
error OnlyCashModuleController()
OnlyDebtManager
error OnlyDebtManager()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlyEtherFiWallet
error OnlyEtherFiWallet()
OnlyOneTokenAllowedInCreditMode
error OnlyOneTokenAllowedInCreditMode()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
OnlySafeAdmin
error OnlySafeAdmin()
RecipientCannotBeAddressZero
error RecipientCannotBeAddressZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SettlementDispatcherNotSetForBinSponsor
error SettlementDispatcherNotSetForBinSponsor()
SplitAlreadyTheSame
error SplitAlreadyTheSame()
TransactionAlreadyCleared
error TransactionAlreadyCleared()
Unauthorized
error Unauthorized()
UnsupportedToken
error UnsupportedToken()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c060405230608052348015610013575f5ffd5b506040516151fe3803806151fe83398101604081905261003291610130565b80806001600160a01b03811661005b5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b031660a05261006f61007e565b5061007861007e565b5061015d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ce5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461012d5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610140575f5ffd5b81516001600160a01b0381168114610156575f5ffd5b9392505050565b60805160a05161504f6101af5f395f81816104bc0152818161099e01528181610b0501528181610c440152818161112b015261171501525f8181611af201528181611b1b0152611ccf015261504f5ff3fe608060405260043610610161575f3560e01c80636b7cd20c116100cd5780638fd26fc311610087578063ad3cb1cc11610062578063ad3cb1cc14610430578063be219a1e1461046d578063d74286f51461048c578063f9fba81b146104ab575f5ffd5b80638fd26fc3146103de578063909030d5146103fd5780639f4246021461041b575f5ffd5b80636b7cd20c14610331578063763d74c6146103505780637666ba741461036f5780637f12dc601461038e5780638322fff2146103a35780638456cb59146103ca575f5ffd5b806341d88bd31161011e57806341d88bd31461027e5780634f1ef2861461029e57806352d1902d146102b15780635c975abb146102c55780635ce8700a146102f357806366725af514610312575f5ffd5b80630378021114610165578063076b7a441461018657806308c73259146101a55780632d0335ab146101d65780632d81b95c146102375780633f4ba83a1461026a575b5f5ffd5b348015610170575f5ffd5b5061018461017f36600461400c565b6104de565b005b348015610191575f5ffd5b506101846101a036600461406e565b6106aa565b3480156101b0575f5ffd5b506101b96108b2565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e1575f5ffd5b506102296101f03660046140a1565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d00602052604090205490565b6040519081526020016101cd565b348015610242575f5ffd5b506102297f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206781565b348015610275575f5ffd5b506101846108e0565b348015610289575f5ffd5b506102295f5160206150235f395f51905f5281565b6101846102ac3660046140fe565b610947565b3480156102bc575f5ffd5b50610229610962565b3480156102d0575f5ffd5b505f5160206150035f395f51905f525460ff1660405190151581526020016101cd565b3480156102fe575f5ffd5b5061018461030d3660046141e5565b61097d565b34801561031d575f5ffd5b5061018461032c366004614297565b610adc565b34801561033c575f5ffd5b5061018461034b366004614385565b610c23565b34801561035b575f5ffd5b5061018461036a36600461448f565b611039565b34801561037a575f5ffd5b50610184610389366004614550565b61134b565b348015610399575f5ffd5b5061022961271081565b3480156103ae575f5ffd5b506101b973eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156103d5575f5ffd5b506101846114ce565b3480156103e9575f5ffd5b506101846103f8366004614569565b611533565b348015610408575f5ffd5b50610184610417366004614625565b5050565b348015610426575f5ffd5b506102296103e881565b34801561043b575f5ffd5b50610460604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190614691565b348015610478575f5ffd5b506101846104873660046146a3565b6116f4565b348015610497575f5ffd5b506101846104a63660046146d5565b61194c565b3480156104b6575f5ffd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6104e66108b2565b604051632474521560e21b81525f5160206150235f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa15801561053d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610561919061474c565b61057e5760405163ebba563b60e01b815260040160405180910390fd5b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea0280546001600160401b03858116600160a01b810267ffffffffffffffff60a01b19909316929092179092557fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea038054848416600160401b81026001600160801b0319909216948716948517919091179091557fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea075460405163f940b37f60e01b81526004810193909352602483019390935260448201525f516020614fc35f395f51905f52916001600160a01b03169063f940b37f906064015b5f604051808303815f87803b15801561068e575f5ffd5b505af11580156106a0573d5f5f3e3d5ffd5b5050505050505050565b6106b26108b2565b604051632474521560e21b81525f5160206150235f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610709573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061072d919061474c565b61074a5760405163ebba563b60e01b815260040160405180910390fd5b6001600160a01b0381166107715760405163b4fa3fb360e01b815260040160405180910390fd5b5f516020614fc35f395f51905f526001838181111561079257610792614767565b03610825576007810154600982015460405163de21d2cb60e01b81526001600160a01b039283169263de21d2cb926107d492889290911690879060040161478b565b5f604051808303815f87803b1580156107eb575f5ffd5b505af11580156107fd573d5f5f3e3d5ffd5b5050506009820180546001600160a01b0385166001600160a01b031990911617905550505050565b6007810154600282015460405163de21d2cb60e01b81526001600160a01b039283169263de21d2cb9261086292889290911690879060040161478b565b5f604051808303815f87803b158015610879575f5ffd5b505af115801561088b573d5f5f3e3d5ffd5b505050506002810180546001600160a01b0319166001600160a01b0384161790555b505050565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b6108e86108b2565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b158015610927575f5ffd5b505afa158015610939573d5f5f3e3d5ffd5b50505050610945611a88565b565b61094f611ae7565b61095882611b8b565b6104178282611c08565b5f61096b611cc4565b505f516020614fe35f395f51905f5290565b60405163b7ca418b60e01b81526001600160a01b03808816600483015287917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa1580156109e5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a09919061474c565b610a26576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b038086166004830152889186918316906324d7806c90602401602060405180830381865afa158015610a6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a92919061474c565b610aaf57604051632afafb8760e21b815260040160405180910390fd5b610ac68987610abd8c611d0d565b8b8b8a8a611d4e565b610ad1898989611db0565b505050505050505050565b610ae4611e74565b60405163b7ca418b60e01b81526001600160a01b03808c1660048301528b917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610b4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b70919061474c565b610b8d576040516334d0b49960e01b815260040160405180910390fd5b610c008b8c6001600160a01b03166369615a4c6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610bce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf291906147b6565b8c8c8c8c8c8c8c8c8c611ee1565b610c0e8b8b8b8b8b8b61202c565b50610c17612338565b50505050505050505050565b60405163b7ca418b60e01b81526001600160a01b03808716600483015286917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610c8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610caf919061474c565b610ccc576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b038086166004830152879186918316906324d7806c90602401602060405180830381865afa158015610d14573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d38919061474c565b610d5557604051632afafb8760e21b815260040160405180910390fd5b6001600160a01b0388165f9081525f516020614fc35f395f51905f5260208190526040909120610d8490612362565b6001600160a01b0389165f908152602082905260409020600b015460ff166001811115610db357610db3614767565b886001811115610dc557610dc5614767565b03610de3576040516309e59dbb60e41b815260040160405180910390fd5b610df98988610df18c611d0d565b8b8a8a612393565b6003810154600160401b90046001600160401b03165f03610ed25760078101546001600160a01b038a81165f9081526020849052604090819020600b01549051635cfd745b60e01b81529190921691635cfd745b91610e66918d9160ff909116908d9042906004016147cd565b5f604051808303815f87803b158015610e7d575f5ffd5b505af1158015610e8f573d5f5f3e3d5ffd5b5050506001600160a01b038a165f908152602083905260409020600b0180548a925060ff191660018381811115610ec857610ec8614767565b0217905550610ad1565b5f886001811115610ee557610ee5614767565b03610f85576003810154610f0990600160401b90046001600160401b03164261481b565b6001600160a01b03808b165f90815260208490526040808220600c0184905560078501549051635cfd745b60e01b8152921692635cfd745b92610f53928e926001926004016147cd565b5f604051808303815f87803b158015610f6a575f5ffd5b505af1158015610f7c573d5f5f3e3d5ffd5b50505050610ad1565b6001600160a01b0389165f908152602082905260408120600c810191909155600b01805489919060ff191660018381811115610fc357610fc3614767565b02179055506007810154604051635cfd745b60e01b81526001600160a01b0390911690635cfd745b90611001908c905f9060019042906004016147cd565b5f604051808303815f87803b158015611018575f5ffd5b505af115801561102a573d5f5f3e3d5ffd5b50505050505050505050505050565b6110416108b2565b604051632474521560e21b81527f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206760048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa1580156110ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110cf919061474c565b6110ec5760405163715cb61d60e11b815260040160405180910390fd5b815181515f516020614fc35f395f51905f529190811461111f5760405163512509d360e11b815260040160405180910390fd5b5f5b81811015611316577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b7ca418b86838151811061116a5761116a61482e565b60200260200101516040518263ffffffff1660e01b815260040161119d91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156111b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111dc919061474c565b6111f9576040516334d0b49960e01b815260040160405180910390fd5b83818151811061120b5761120b61482e565b6020026020010151600481111561122457611224614767565b835f015f87848151811061123a5761123a61482e565b6020908102919091018101516001600160a01b031682528101919091526040015f20600d015460ff16600481111561127457611274614767565b0361129a5760405163be307e8960e01b8152600481018290526024015b60405180910390fd5b8381815181106112ac576112ac61482e565b6020026020010151835f015f8784815181106112ca576112ca61482e565b6020908102919091018101516001600160a01b031682528101919091526040015f20600d01805460ff1916600183600481111561130957611309614767565b0217905550600101611121565b50600782015460405163ae1901f560e01b81526001600160a01b039091169063ae1901f59061067790879087906004016148c6565b6113536108b2565b604051632474521560e21b81525f5160206150235f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa1580156113aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ce919061474c565b6113eb5760405163ebba563b60e01b815260040160405180910390fd5b612710816001600160401b031611156114175760405163b4fa3fb360e01b815260040160405180910390fd5b5f5f516020614fc35f395f51905f526007810154600882015460405163ebc8acff60e01b8152600160a01b9091046001600160401b039081166004830152851660248201529192506001600160a01b03169063ebc8acff906044015f604051808303815f87803b158015611489575f5ffd5b505af115801561149b573d5f5f3e3d5ffd5b5050505060080180546001600160401b0392909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b6114d66108b2565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b158015611515575f5ffd5b505afa158015611527573d5f5f3e3d5ffd5b505050506109456123cb565b61153b6108b2565b604051632474521560e21b81525f5160206150235f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611592573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b6919061474c565b6115d35760405163ebba563b60e01b815260040160405180910390fd5b815181515f516020614fc35f395f51905f52919081146116065760405163512509d360e11b815260040160405180910390fd5b5f5b818110156116bf576103e88482815181106116255761162561482e565b6020026020010151111561164c5760405163bdbcac1760e01b815260040160405180910390fd5b83818151811061165e5761165e61482e565b6020026020010151836004015f87848151811061167d5761167d61482e565b6020026020010151600481111561169657611696614767565b60048111156116a7576116a7614767565b815260208101919091526040015f2055600101611608565b506007820154604051637269bb2960e01b81526001600160a01b0390911690637269bb29906106779087908790600401614923565b60405163b7ca418b60e01b81526001600160a01b03808716600483015286917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa15801561175c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611780919061474c565b61179d576040516334d0b49960e01b815260040160405180910390fd5b604051630935e01b60e21b81526001600160a01b038086166004830152879186918316906324d7806c90602401602060405180830381865afa1580156117e5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611809919061474c565b61182657604051632afafb8760e21b815260040160405180910390fd5b6001600160a01b0388165f9081525f516020614fc35f395f51905f5260208190526040909120600f0154880361186f57604051638df9baad60e01b815260040160405180910390fd5b6127108811156118925760405163b4fa3fb360e01b815260040160405180910390fd5b6118a889886118a08c611d0d565b8b8a8a612413565b60078101546001600160a01b038a81165f8181526020859052604090819020600f01549051637051eeeb60e01b815260048101929092526024820152604481018b9052911690637051eeeb906064015f604051808303815f87803b15801561190e575f5ffd5b505af1158015611920573d5f5f3e3d5ffd5b5050506001600160a01b039099165f90815260209190915260409020600f019690965550505050505050565b6119546108b2565b604051632474521560e21b81525f5160206150235f395f51905f5260048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa1580156119ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119cf919061474c565b6119ec5760405163ebba563b60e01b815260040160405180910390fd5b5f516020614fc35f395f51905f52611a277fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea0a8686868661244d565b60078101546040516369cc709f60e11b81526001600160a01b039091169063d398e13e90611a5f908890889088908890600401614983565b5f604051808303815f87803b158015611a76575f5ffd5b505af1158015610ad1573d5f5f3e3d5ffd5b611a9061260e565b5f5160206150035f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611b6d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611b615f516020614fe35f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156109455760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b158015611bee575f5ffd5b505afa158015611c00573d5f5f3e3d5ffd5b505050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611c62575060408051601f3d908101601f19168201909252611c5f918101906147b6565b60015b611c8a57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611291565b5f516020614fe35f395f51905f528114611cba57604051632a87526960e21b815260048101829052602401611291565b6108ad838361263d565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109455760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d006020526040902080546001810190915590565b611da787877fd3273adabd54a98e671ce86bc2efd441e80ce93d7d355ed37888ad2d9db95730888888604051602001611d91929190918252602082015260400190565b6040516020818303038152906040528787612692565b50505050505050565b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea03546001600160a01b0384165f9081525f516020614fc35f395f51905f5260208190526040822090928291611e1191879087906001600160401b03166126f4565b600785015460405163a853e0db60e01b81529294509092506001600160a01b03169063a853e0db90611e4b90899086908690600401614a91565b5f604051808303815f87803b158015611e62575f5ffd5b505af1158015610c17573d5f5f3e3d5ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611eb457604051633ee5aeb560e01b815260040160405180910390fd5b61094560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061292a565b5f611f8b7f23619bc2acb34ce7935b1e16e77a5d9a5b67cc27d5bbbe57f69c730e193f1bf6468e8e8e8e8e8e8e604051602001611f22959493929190614af5565b60408051601f1981840301815290829052611f439594939291602001614b4d565b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b60405163a732422d60e01b81529091506001600160a01b038d169063a732422d90611fc29084908990899089908990600401614ba5565b602060405180830381865afa158015611fdd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612001919061474c565b61201e5760405163274cf40160e01b815260040160405180910390fd5b505050505050505050505050565b6001600160a01b038681165f9081525f516020614fc35f395f51905f52602081905260409091209091831661207457604051638864e6d560e01b815260040160405180910390fd5b60018611156120b8576120b88787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061293192505050565b6120f4828888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612a4692505050565b6120fd88612ad0565b60028201545f9061211e90600160a01b90046001600160401b031642614c60565b905061212d8989898989612bbe565b60405180608001604052808989808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050509082525060408051602089810282810182019093528982529283019290918a918a9182918501908490808284375f920191909152505050908252506001600160a01b0386166020808301919091526001600160601b0384166040909201919091528151805160088601926121e1928492910190613ebb565b5060208281015180516121fa9260018501920190613f1a565b506040828101516060909301516001600160601b0316600160a01b026001600160a01b03938416176002909201919091556007850154905163d0a8fea560e01b815291169063d0a8fea59061225f908c908c908c908c908c908c908a90600401614c7f565b5f604051808303815f87803b158015612276575f5ffd5b505af1158015612288573d5f5f3e3d5ffd5b505050506122bd7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea01546001600160a01b031690565b604051630d3b088560e31b81526001600160a01b038b8116600483015291909116906369d84428906024015f6040518083038186803b1580156122fe575f5ffd5b505afa158015612310573d5f5f3e3d5ffd5b505050506002830154600160a01b90046001600160401b03165f03610ad157610ad189612cba565b6109455f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00611edb565b600c81015415801590612378575080600c015442115b1561239057600b8101805460ff191690555f600c8201555b50565b611c0086867f8f6072ce586dd365229164bcf5b37240bd637e96cc327d5228435df9b531e5cf8787604051602001611d919190614ce4565b6123d36130d1565b5f5160206150035f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611ac9565b611c0086867ff368485550cb71952bbb2db14c6ebcbcf1890198f28ebfe08a08e9958e6357768787604051602001611d9191815260200190565b825f81900361246f5760405163b4fa3fb360e01b815260040160405180910390fd5b80821461248f5760405163512509d360e11b815260040160405180910390fd5b60018111156124d3576124d38585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061293192505050565b5f5b81811015611da7575f8686838181106124f0576124f061482e565b905060200201602081019061250591906140a1565b6001600160a01b03160361252f5760405163738e4d9960e11b815260048101829052602401611291565b5f6125618787848181106125455761254561482e565b905060200201602081019061255a91906140a1565b8990613101565b90508484838181106125755761257561482e565b905060200201602081019061258a9190614cf7565b156125cc57806125c7576125c58787848181106125a9576125a961482e565b90506020020160208101906125be91906140a1565b89906131aa565b505b612605565b8015612605576126038787848181106125e7576125e761482e565b90506020020160208101906125fc91906140a1565b8990613306565b505b506001016124d5565b5f5160206150035f395f51905f525460ff1661094557604051638dfc202b60e01b815260040160405180910390fd5b6126468261343f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561268a576108ad82826134a2565b610417613516565b5f6126af86468a8888604051602001611f43959493929190614b4d565b90506106a08784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508694939250506135359050565b6126fc613f53565b612704613f53565b8484808211156127275760405163e2ed77a160e01b815260040160405180910390fd5b6127308861360e565b6040805161016081018252895480825260018b0154602083015260028b01549282019290925260038a0154606082015260048a0154608082015260058a015460a082015260068a01546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b9091041661012082015260078a01546101408201529088101561280657600489018890556127d98642614d12565b8960060160106101000a8154816001600160401b0302191690836001600160401b03160217905550612826565b8789555f60048a015560068901805467ffffffffffffffff60801b191690555b886001015487101561287057600589018790556128438642614d12565b8960060160186101000a8154816001600160401b0302191690836001600160401b0316021790555061288f565b600189018790555f60058a01556006890180546001600160c01b031690555b60408051610160810182528a54815260018b0154602082015260028b01549181019190915260038a0154606082015260048a0154608082015260058a015460a082015260068a01546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b909104166101208201526007909901546101408a0152989650505050505050565b80825d5050565b80516001811161293f575050565b5f816001600160401b03811115612958576129586140ba565b604051908082528060200260200182016040528015612981578160200160208202803683370190505b5090505f5b82811015612a40575f8482815181106129a1576129a161482e565b602002602001015190505f5f90505b82811015612a0b578381815181106129ca576129ca61482e565b60200260200101516001600160a01b0316826001600160a01b031603612a0357604051630e3e200f60e41b815260040160405180910390fd5b6001016129b0565b5080838381518110612a1f57612a1f61482e565b6001600160a01b039092166020928302919091019091015250600101612986565b50505050565b80515f5b81811015612a4057612a81838281518110612a6757612a6761482e565b602002602001015185600a0161310190919063ffffffff16565b612ac857828181518110612a9757612a9761482e565b6020026020010151604051635414a25b60e01b815260040161129191906001600160a01b0391909116815260200190565b600101612a4a565b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea07546001600160a01b038281165f9081525f516020614fc35f395f51905f52602052604090206008810154919092169190156108ad57600a810154604051632b3b959160e01b81526001600160a01b0384811692632b3b959192612b669288926008880192600989019290911690600401614d31565b5f604051808303815f87803b158015612b7d575f5ffd5b505af1158015612b8f573d5f5f3e3d5ffd5b5050506008820190505f612ba38282613fc6565b612bb0600183015f613fc6565b505f60029190910155505050565b82818114612bdf5760405163512509d360e11b815260040160405180910390fd5b5f5b81811015611da757838382818110612bfb57612bfb61482e565b90506020020135868683818110612c1457612c1461482e565b9050602002016020810190612c2991906140a1565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a0823190602401602060405180830381865afa158015612c6f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9391906147b6565b1015612cb257604051631e9acf1760e31b815260040160405180910390fd5b600101612be1565b6001600160a01b0381165f9081525f516020614fc35f395f51905f5260208190526040909120600a81015442600160a01b9091046001600160601b03161115612d165760405163271c87d960e01b815260040160405180910390fd5b612d7c82826008015f01805480602002602001604051908101604052809291908181526020018280548015612d7257602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612d54575b5050505050612a46565b600a81015460088201546001600160a01b03909116905f816001600160401b03811115612dab57612dab6140ba565b604051908082528060200260200182016040528015612dd4578160200160208202803683370190505b5090505f826001600160401b03811115612df057612df06140ba565b604051908082528060200260200182016040528015612e2357816020015b6060815260200190600190039081612e0e5790505b5090505f5b83811015612f2a5760088601805482908110612e4657612e4661482e565b905f5260205f20015f9054906101000a90046001600160a01b0316838281518110612e7357612e7361482e565b6001600160a01b039092166020928302919091019091015260098601805463a9059cbb60e01b91879184908110612eac57612eac61482e565b5f918252602090912001546040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050828281518110612f1757612f1761482e565b6020908102919091010152600101612e28565b50866001600160a01b031663bcde317c83856001600160401b03811115612f5357612f536140ba565b604051908082528060200260200182016040528015612f7c578160200160208202803683370190505b50846040518463ffffffff1660e01b8152600401612f9c93929190614ddd565b5f604051808303815f87803b158015612fb3575f5ffd5b505af1158015612fc5573d5f5f3e3d5ffd5b50505050612fdd5f516020614fc35f395f51905f5290565b600701546040516371aa1e0f60e01b81526001600160a01b03909116906371aa1e0f9061301a908a9060088a019060098b01908a90600401614d31565b5f604051808303815f87803b158015613031575f5ffd5b505af1158015613043573d5f5f3e3d5ffd5b5050506008860190505f6130578282613fc6565b613064600183015f613fc6565b505f600291909101556001860154604051630d3b088560e31b81526001600160a01b038981166004830152909116906369d84428906024015f6040518083038186803b1580156130b2575f5ffd5b505afa1580156130c4573d5f5f3e3d5ffd5b5050505050505050505050565b5f5160206150035f395f51905f525460ff16156109455760405163d93c066560e01b815260040160405180910390fd5b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be19830161313c5763f5a267f15f526004601cfd5b8261314e5768fbb67fda52d4bfb8bf92505b80546001600160601b0381166131915760019250838160601c03156131a257600182015460601c84146131a257600282015460601c84146131a2575f92506131a2565b81602052835f5260405f2054151592505b505092915050565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016131e55763f5a267f15f526004601cfd5b826131f75768fbb67fda52d4bfb8bf92505b80546001600160601b03811682602052806132b9578160601c80613225578560601b845560019450506132fd565b85810361323257506132fd565b600184015460601c80613253578660601b60018601556001955050506132fd565b8681036132615750506132fd565b600285015460601c80613283578760601b6002870155600196505050506132fd565b878103613292575050506132fd565b5f928352604080842060019055918352818320600290558252902060039055506007908117905b845f5260405f2080546132fb57600191821c8083018255919450816132e7578560601b6003178455506132fd565b8560601b82850155826002018455506132fd565b505b50505092915050565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016133415763f5a267f15f526004601cfd5b826133535768fbb67fda52d4bfb8bf92505b80546001600160601b038116806133cd5760019350848260601c0361338b5760018301805484556002840180549091555f90556132fd565b84600184015460601c036133ac5760028301805460018501555f90556132fd565b84600284015460601c036133c5575f60028401556132fd565b5f93506132fd565b82602052845f5260405f208054806133e65750506132fd565b60018360011c039250826001820314613416578285015460601c8060601b60018303870155805f52508060405f20555b5083546bffffffffffffffffffffffff1916600192831b1782179093555f909255509392505050565b806001600160a01b03163b5f0361347457604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611291565b5f516020614fe35f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516134be9190614e67565b5f60405180830381855af49150503d805f81146134f6576040519150601f19603f3d011682016040523d82523d5f602084013e6134fb565b606091505b509150915061350b85838361375d565b925050505b92915050565b34156109455760405163b398979f60e01b815260040160405180910390fd5b813b156135d357604051630b135d3f60e11b808252906001600160a01b03841690631626ba7e9061356c9087908690600401614e72565b602060405180830381865afa158015613587573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135ab9190614e8a565b6001600160e01b031916146108ad57604051636bda3fcd60e01b815260040160405180910390fd5b816001600160a01b03166135e784836137bc565b6001600160a01b0316146108ad57604051632057875960e21b815260040160405180910390fd5b604080516101608101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a082015260068201546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b9091041661012082015260078201546101408201525f906136a8906137e4565b805183556020810151600184015560408101516002840155606081015160038401556080810151600484015560a0810151600584015560c08101516006909301805460e0830151610100840151610120909401516001600160401b03908116600160c01b026001600160c01b03958216600160801b02959095166fffffffffffffffffffffffffffffffff928216600160401b026001600160801b031990941691909716179190911716939093171790915550565b6060826137725761376d826138f7565b6137b5565b815115801561378957506001600160a01b0384163b155b156137b257604051639996b31560e01b81526001600160a01b0385166004820152602401611291565b50805b9392505050565b5f5f5f5f6137ca8686613920565b9250925092506137da8282613969565b5090949350505050565b6137ec613f53565b6101008201516001600160401b03161580159061381657508161010001516001600160401b031642115b1561382f5760808201805183525f908190526101008301525b6101208201516001600160401b03161580159061385957508161012001516001600160401b031642115b156138755760a08201805160208401525f908190526101208301525b8160c001516001600160401b03164211156138b4575f604083015260c08201516101408301516138a59190613a21565b6001600160401b031660c08301525b8160e001516001600160401b03164211156138f3575f606083015260e08201516101408301516138e49190613a4f565b6001600160401b031660e08301525b5090565b8051156139075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5f5f8351604103613957576020840151604085015160608601515f1a61394988828585613a7d565b955095509550505050613962565b505081515f91506002905b9250925092565b5f82600381111561397c5761397c614767565b03613985575050565b600182600381111561399957613999614767565b036139b75760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156139cb576139cb614767565b036139ec5760405163fce698f760e01b815260048101829052602401611291565b6003826003811115613a0057613a00614767565b03610417576040516335e2f38360e21b815260048101829052602401611291565b5f5b613a366001600160401b03841683613b45565b9250826001600160401b03164211613a23575090919050565b5f5b613a646001600160401b03841683613b92565b9250826001600160401b03164211613a51575090919050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613ab657505f91506003905082613b3b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613b07573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116613b3257505f925060019150829050613b3b565b92505f91508190505b9450945094915050565b5f80613b518385614eb1565b90505f613b616201518083614ee4565b90505f613b6f82600161481b565b613b7c9062015180614f10565b9050613b888582614f27565b9695505050505050565b5f80613b9e8385614eb1565b90505f80613bb7613bb26201518085614f4d565b613c17565b509092509050613bc8600182614f60565b9050600c8160ff161115613be657506001613be38183614f79565b91505b5f613bf383836001613d85565b613c009062015180614f10565b9050613c0c8682614f27565b979650505050505050565b5f80808381613c298262010bd9614eb1565b613c369062253d8c614eb1565b90505f62023ab1613c48836004614f93565b613c529190614ee4565b90506004613c638262023ab1614f93565b613c6e906003614eb1565b613c789190614ee4565b613c829083614f27565b91505f62164b09613c94846001614eb1565b613ca090610fa0614f93565b613caa9190614ee4565b90506004613cba826105b5614f93565b613cc49190614ee4565b613cce9084614f27565b613cd990601f614eb1565b92505f61098f613cea856050614f93565b613cf49190614ee4565b90505f6050613d058361098f614f93565b613d0f9190614ee4565b613d199086614f27565b9050613d26600b83614ee4565b9450613d3385600c614f93565b613d3e836002614eb1565b613d489190614f27565b91508483613d57603187614f27565b613d62906064614f93565b613d6c9190614eb1565b613d769190614eb1565b9a919950975095505050505050565b5f61ffff841660ff8085169084168362253d8c60046064600c613da9600e88614f27565b613db39190614ee4565b613dbf88611324614eb1565b613dc99190614eb1565b613dd39190614ee4565b613dde906003614f93565b613de89190614ee4565b600c80613df6600e88614f27565b613e009190614ee4565b613e0b90600c614f93565b613e16600288614f27565b613e209190614f27565b613e2c9061016f614f93565b613e369190614ee4565b6004600c613e45600e89614f27565b613e4f9190614ee4565b613e5b896112c0614eb1565b613e659190614eb1565b613e71906105b5614f93565b613e7b9190614ee4565b613e87617d4b87614f27565b613e919190614eb1565b613e9b9190614eb1565b613ea59190614f27565b613eaf9190614f27565b98975050505050505050565b828054828255905f5260205f20908101928215613f0e579160200282015b82811115613f0e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613ed9565b506138f3929150613fdd565b828054828255905f5260205f20908101928215613f0e579160200282015b82811115613f0e578251825591602001919060010190613f38565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81525090565b5080545f8255905f5260205f209081019061239091905b5b808211156138f3575f8155600101613fde565b80356001600160401b0381168114614007575f5ffd5b919050565b5f5f5f6060848603121561401e575f5ffd5b61402784613ff1565b925061403560208501613ff1565b915061404360408501613ff1565b90509250925092565b60028110612390575f5ffd5b80356001600160a01b0381168114614007575f5ffd5b5f5f6040838503121561407f575f5ffd5b823561408a8161404c565b915061409860208401614058565b90509250929050565b5f602082840312156140b1575f5ffd5b6137b582614058565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156140f6576140f66140ba565b604052919050565b5f5f6040838503121561410f575f5ffd5b61411883614058565b915060208301356001600160401b03811115614132575f5ffd5b8301601f81018513614142575f5ffd5b80356001600160401b0381111561415b5761415b6140ba565b61416e601f8201601f19166020016140ce565b818152866020838501011115614182575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f8401126141b1575f5ffd5b5081356001600160401b038111156141c7575f5ffd5b6020830191508360208285010111156141de575f5ffd5b9250929050565b5f5f5f5f5f5f60a087890312156141fa575f5ffd5b61420387614058565b9550602087013594506040870135935061421f60608801614058565b925060808701356001600160401b03811115614239575f5ffd5b61424589828a016141a1565b979a9699509497509295939492505050565b5f5f83601f840112614267575f5ffd5b5081356001600160401b0381111561427d575f5ffd5b6020830191508360208260051b85010111156141de575f5ffd5b5f5f5f5f5f5f5f5f5f5f60c08b8d0312156142b0575f5ffd5b6142b98b614058565b995060208b01356001600160401b038111156142d3575f5ffd5b6142df8d828e01614257565b909a5098505060408b01356001600160401b038111156142fd575f5ffd5b6143098d828e01614257565b909850965061431c905060608c01614058565b945060808b01356001600160401b03811115614336575f5ffd5b6143428d828e01614257565b90955093505060a08b01356001600160401b03811115614360575f5ffd5b61436c8d828e01614257565b915080935050809150509295989b9194979a5092959850565b5f5f5f5f5f60808688031215614399575f5ffd5b6143a286614058565b945060208601356143b28161404c565b93506143c060408701614058565b925060608601356001600160401b038111156143da575f5ffd5b6143e6888289016141a1565b969995985093965092949392505050565b5f6001600160401b0382111561440f5761440f6140ba565b5060051b60200190565b5f82601f830112614428575f5ffd5b813561443b614436826143f7565b6140ce565b8082825260208201915060208360051b86010192508583111561445c575f5ffd5b602085015b8381101561448557803560058110614477575f5ffd5b835260209283019201614461565b5095945050505050565b5f5f604083850312156144a0575f5ffd5b82356001600160401b038111156144b5575f5ffd5b8301601f810185136144c5575f5ffd5b80356144d3614436826143f7565b8082825260208201915060208360051b8501019250878311156144f4575f5ffd5b6020840193505b8284101561451d5761450c84614058565b8252602093840193909101906144fb565b945050505060208301356001600160401b0381111561453a575f5ffd5b61454685828601614419565b9150509250929050565b5f60208284031215614560575f5ffd5b6137b582613ff1565b5f5f6040838503121561457a575f5ffd5b82356001600160401b0381111561458f575f5ffd5b61459b85828601614419565b92505060208301356001600160401b038111156145b6575f5ffd5b8301601f810185136145c6575f5ffd5b80356145d4614436826143f7565b8082825260208201915060208360051b8501019250878311156145f5575f5ffd5b6020840193505b828410156146175783358252602093840193909101906145fc565b809450505050509250929050565b5f5f60208385031215614636575f5ffd5b82356001600160401b0381111561464b575f5ffd5b614657858286016141a1565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6137b56020830184614663565b5f5f5f5f5f608086880312156146b7575f5ffd5b6146c086614058565b9450602086013593506143c060408701614058565b5f5f5f5f604085870312156146e8575f5ffd5b84356001600160401b038111156146fd575f5ffd5b61470987828801614257565b90955093505060208501356001600160401b03811115614727575f5ffd5b61473387828801614257565b95989497509550505050565b8015158114612390575f5ffd5b5f6020828403121561475c575f5ffd5b81516137b58161473f565b634e487b7160e01b5f52602160045260245ffd5b6002811061239057612390614767565b606081016147988561477b565b9381526001600160a01b039283166020820152911660409091015290565b5f602082840312156147c6575f5ffd5b5051919050565b6001600160a01b0385168152608081016147e68561477b565b8460208301526147f58461477b565b60408201939093526060015292915050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561351057613510614807565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561487b5781516001600160a01b0316865260209586019590910190600101614854565b5093949350505050565b5f8151808452602084019350602083015f5b8281101561487b578151600581106148b1576148b1614767565b86526020958601959190910190600101614897565b604081525f6148d86040830185614842565b82810360208401526148ea8185614885565b95945050505050565b5f8151808452602084019350602083015f5b8281101561487b578151865260209586019590910190600101614905565b604081525f6149356040830185614885565b82810360208401526148ea81856148f3565b8183526020830192505f815f5b8481101561487b576001600160a01b0361496d83614058565b1686526020958601959190910190600101614954565b604081525f614996604083018688614947565b8281036020808501919091528482528591015f5b858110156149d35782356149bd8161473f565b15158252602092830192909101906001016149aa565b50979650505050505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c0810151614a2f60c08401826001600160401b03169052565b5060e0810151614a4a60e08401826001600160401b03169052565b50610100810151614a676101008401826001600160401b03169052565b50610120810151614a846101208401826001600160401b03169052565b5061014090810151910152565b6001600160a01b03841681526102e08101614aaf60208301856149df565b614abd6101808301846149df565b949350505050565b8183525f6001600160fb1b03831115614adc575f5ffd5b8260051b80836020870137939093016020019392505050565b606081525f614b08606083018789614947565b8281036020840152614b1b818688614ac5565b91505060018060a01b03831660408301529695505050505050565b5f81518060208401855e5f93019283525090919050565b8581528460208201526001600160601b03198460601b1660408201528260548201525f613c0c6074830184614b36565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b858152606060208201525f614bbe606083018688614947565b8281036040840152838152602080820190600586901b830101865f36829003601e19015b88821015614c4f57858403601f190185528235818112614c00575f5ffd5b8a016020810190356001600160401b03811115614c1b575f5ffd5b803603821315614c29575f5ffd5b614c34868284614b7d565b95505050602083019250602085019450600182019150614be2565b50919b9a5050505050505050505050565b6001600160601b03818116838216019081111561351057613510614807565b6001600160a01b038816815260a0602082018190525f90614ca3908301888a614947565b8281036040840152614cb6818789614ac5565b6001600160a01b0395909516606084015250506001600160601b039190911660809091015295945050505050565b60208101614cf18361477b565b91905290565b5f60208284031215614d07575f5ffd5b81356137b58161473f565b6001600160401b03818116838216019081111561351057613510614807565b6001600160a01b03851681526080602080830182905285549183018290525f868152908120909160a0840190835b81811015614d865783546001600160a01b0316835260019384019360209093019201614d5f565b5050838103604085015285548082525f87815260208082209301935090815b81811015614dc3578354855260209094019360019384019301614da5565b5050506001600160a01b03851660608501525090506148ea565b606081525f614def6060830186614842565b8281036020840152614e0181866148f3565b9050828103604084015280845180835260208301915060208160051b840101602087015f5b83811015614e5857601f19868403018552614e42838351614663565b6020958601959093509190910190600101614e26565b50909998505050505050505050565b5f6137b58284614b36565b828152604060208201525f614abd6040830184614663565b5f60208284031215614e9a575f5ffd5b81516001600160e01b0319811681146137b5575f5ffd5b8082018281125f8312801582168215821617156131a2576131a2614807565b634e487b7160e01b5f52601260045260245ffd5b5f82614ef257614ef2614ed0565b600160ff1b82145f1984141615614f0b57614f0b614807565b500590565b808202811582820484141761351057613510614807565b8181035f831280158383131683831282161715614f4657614f46614807565b5092915050565b5f82614f5b57614f5b614ed0565b500490565b60ff818116838216019081111561351057613510614807565b61ffff818116838216019081111561351057613510614807565b8082025f8212600160ff1b84141615614fae57614fae614807565b81810583148215176135105761351061480756fee000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a680e58cc621cb50e17ad287d74249ea09457a375ad70c4ef5243e4112d220d5a164736f6c634300081c000a000000000000000000000000dc515cb479a64552c5a11a57109c314e40a1a778