7 txs
18 calls
constructor
constructor(address _initialOwner, address _cowSwapRelayer)
functions
cowSwapRelayer
viewfunction cowSwapRelayer() view returns (address)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
getBuyAmount
viewfunction getBuyAmount(address sellToken) view returns (uint256 unroundedBuyAmount, uint256 roundedBuyAmount)
getSellAmount
viewfunction getSellAmount(address sellToken) view returns (uint256)
getTradeableOrderWithSignature
viewfunction getTradeableOrderWithSignature(address orderOwner, tuple params, bytes, bytes32[]) view returns (tuple order, bytes signature)
isPaused
viewfunction isPaused() view returns (bool)
isValidSignature
viewfunction isValidSignature(bytes32, bytes signature) view returns (bytes4)
orderConfig
viewfunction orderConfig(address sellToken) view returns (tuple config)
owner
viewfunction owner() view returns (address)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
acceptOwner
nonpayablefunction acceptOwner()
createConditionalOrder
nonpayablefunction createConditionalOrder(address sellToken)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
removeOrderConfig
nonpayablefunction removeOrderConfig(address sellToken)
revokeOwnership
nonpayablefunction revokeOwnership()
setCowApproval
nonpayablefunction setCowApproval(address sellToken, uint256 amount)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setOrderConfig
nonpayablefunction setOrderConfig(address sellToken, tuple config)
setPaused
nonpayablefunction setPaused(bool paused)
updateAmountsAndAdjustmentBps
nonpayablefunction updateAmountsAndAdjustmentBps(address sellToken, uint96 minSellAmount, uint96 maxSellAmount, uint96 minBuyAmount, int16 limitPriceAdjustmentBps)
events
ConditionalOrderCreated
event ConditionalOrderCreated(address indexed owner, (address handler, bytes32 salt, bytes staticInput) params)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
OrderConfigRemoved
event OrderConfigRemoved(address indexed sellToken)
OrderConfigSet
event OrderConfigSet(address indexed sellToken)
PausedSet
event PausedSet(bool paused)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
ExpectedNonZero
error ExpectedNonZero()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidParam
error InvalidParam()
InvalidSellToken
error InvalidSellToken(address sellToken)
IsPaused
error IsPaused()
OrderDoesNotMatchTradeableOrder
error OrderDoesNotMatchTradeableOrder()
OrderNotValid
error OrderNotValid(string reason)
PollTryAtBlock
error PollTryAtBlock(uint256 blockNumber, string message)
PollTryAtEpoch
error PollTryAtEpoch(uint256 timestamp, string message)
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
Slippage
error Slippage(uint256 minAmountExpected, uint256 actualAmount)
UnderMinSellAmount
error UnderMinSellAmount()
creation bytecode
0x60a06040523480156200001157600080fd5b5060405162003ceb38038062003ceb8339810160408190526200003491620000ed565b81620000408162000054565b506001600160a01b03166080525062000125565b6000546001600160a01b0316156200007f57604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116620000ae57604051634726455360e11b81526000600482015260240160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b0381168114620000e857600080fd5b919050565b600080604083850312156200010157600080fd5b6200010c83620000d0565b91506200011c60208401620000d0565b90509250929050565b608051613ba362000148600039600081816101a901526115780152613ba36000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063617e7c29116100d8578063b187bd261161008c578063c24277e311610066578063c24277e314610556578063daeccc7914610569578063ebbc49651461059757600080fd5b8063b187bd261461050b578063b1f8100d14610530578063bfccf0ec1461054357600080fd5b806375778108116100bd57806375778108146102fa5780638da5cb5b146104e5578063a7229fd9146104f857600080fd5b8063617e7c29146102d457806370023f6a146102e757600080fd5b806326e0a1961161012f5780633daaf325116101145780633daaf325146102865780633f0b495a146102995780635f4dfa03146102ac57600080fd5b806326e0a1961461025d5780632b9689581461027e57600080fd5b806310e65c641161016057806310e65c64146101e35780631626ba7e1461020457806316c38b3c1461024857600080fd5b806301ffc9a71461017c5780630cbfe7dc146101a4575b600080fd5b61018f61018a366004612ba8565b61059f565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019b565b6101f66101f1366004612bdb565b6106d0565b60405190815260200161019b565b610217610212366004612c82565b6107b7565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161019b565b61025b610256366004612d2f565b610a18565b005b61027061026b366004612d98565b610b00565b60405161019b929190612f81565b61025b610fb4565b61025b610294366004612bdb565b6110cf565b61025b6102a7366004612fcc565b611215565b6102bf6102ba366004612bdb565b6114ba565b6040805192835260208301919091520161019b565b61025b6102e236600461303d565b611505565b61025b6102f5366004612bdb565b6115a1565b6104d8610308366004612bdb565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152506001600160a01b0390811660009081526003602081815260409283902083516101a0810185528154808716825274010000000000000000000000000000000000000000908190046bffffffffffffffffffffffff90811694830194909452600180840154808616978401979097526c010000000000000000000000008704851660608401527801000000000000000000000000000000000000000000000000870460ff90811615156080850152790100000000000000000000000000000000000000000000000000880416151560a08401527a0100000000000000000000000000000000000000000000000000008704900b60c08301527c010000000000000000000000000000000000000000000000000000000090950462ffffff1660e08201526002820154808716610100830152859004909216610120830152918201549384166101408201529190920461ffff1661016082015260049091015461018082015290565b60405161019b9190613069565b6000546101cb906001600160a01b031681565b61025b610506366004613190565b6116ad565b60025461018f9074010000000000000000000000000000000000000000900460ff1681565b61025b61053e366004612bdb565b611777565b61025b6105513660046131d1565b61189f565b61025b610564366004613259565b611a7d565b61018f61057736600461329c565b600160209081526000928352604080842090915290825290205460ff1681565b61025b611fc8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f40b8787600000000000000000000000000000000000000000000000000000000148061063257507fffffffff0000000000000000000000000000000000000000000000000000000082167f26e0a19600000000000000000000000000000000000000000000000000000000145b8061067e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b806106ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1626ba7e00000000000000000000000000000000000000000000000000000000145b92915050565b600081816106dd8261207c565b60018101546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506107af916c0100000000000000000000000082046bffffffffffffffffffffffff1691790100000000000000000000000000000000000000000000000000900460ff16906001600160a01b038616906370a0823190602401602060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906132d1565b6120e0565b949350505050565b60025460009074010000000000000000000000000000000000000000900460ff161561080f576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828060200190518101906108259190613314565b90506000610836826000015161207c565b600181015460608401519192506c0100000000000000000000000090046bffffffffffffffffffffffff169060009082116108715781610877565b83606001515b60018401549091506bffffffffffffffffffffffff168110156108c6576040517fa690a25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108d785600001518386612106565b600386015490925074010000000000000000000000000000000000000000900461ffff16905060008161090e57866080015161091f565b608087015161091f908360006122f2565b90508083111561096a576040517f2746152a00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044015b60405180910390fd5b6000610980886000015186898b6080015161231a565b905089805190602001208160405160200161099b91906133d2565b60405160208183030381529060405280519060200120146109e8576040517f98c850a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f1626ba7e000000000000000000000000000000000000000000000000000000009a9950505050505050505050565b610a46336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b610a7c576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f40db37ff5c0bdc2c427fbb2078c8f24afea940abac0e3c23bb4ea3bf2da2b21290610af590831515815260200190565b60405180910390a150565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915260025460609074010000000000000000000000000000000000000000900460ff1615610bfc57610b9361012c42613410565b604080517f7e33463700000000000000000000000000000000000000000000000000000000815260048101929092526024820152600660448201527f50617573656400000000000000000000000000000000000000000000000000006064820152608401610961565b6001600160a01b0388163014610c6e576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f72646572206f776e6572206d7573742062652073656c6600000000000000006044820152606401610961565b6000610c7d6020890189612bdb565b6001600160a01b031614610ced576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f68616e646c6572206d75737420626520756e73657400000000000000000000006044820152606401610961565b602087013515610d59576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f73616c74206d75737420626520756e73657400000000000000000000000000006044820152606401610961565b6000610d686040890189613423565b810190610d759190612bdb565b6001600160a01b03808216600090815260036020526040902080549293509116610dfb576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f73656c6c546f6b656e206e6f7420636f6e6669677572656400000000000000006044820152606401610961565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f91906132d1565b60018301549091506bffffffffffffffffffffffff16811015610f1157610ea861012c42613410565b604080517f7e33463700000000000000000000000000000000000000000000000000000000815260048101929092526024820152600a60448201527f4d696e42616c616e6365000000000000000000000000000000000000000000006064820152608401610961565b6001820154600090610f62906c0100000000000000000000000081046bffffffffffffffffffffffff1690790100000000000000000000000000000000000000000000000000900460ff16846120e0565b90506000610f71858386612106565b915050610f808583868461231a565b965086604051602001610f9391906133d2565b60405160208183030381529060405295505050505050965096945050505050565b610fe2336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611018576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b031661dead1461106d576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610961565b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6110fd336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611133576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025474010000000000000000000000000000000000000000900460ff1615611188576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111918161207c565b50604080516001600160a01b0383166020808301919091528251808303909101815260a0820183526000828401818152606084018290526080909301829052925130939283929185917f2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361916112069190613488565b60405180910390a25050505050565b611243336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611279576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836bffffffffffffffffffffffff166000036112c1576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826bffffffffffffffffffffffff16846bffffffffffffffffffffffff161115611317576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816bffffffffffffffffffffffff1660000361135f576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061136a8661207c565b60028101549091506001600160a01b03166113bc578160010b6000146113bc576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101805482546bffffffffffffffffffffffff86811674010000000000000000000000000000000000000000026001600160a01b0392831617855561ffff86167a010000000000000000000000000000000000000000000000000000027fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff8983166c01000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909516928b1692909217939093171691909117909155604051908716907f620697ccb4f53d5acb95d022fff93232f3be2e80bcdc342dd974fc516c4c271c90600090a2505050505050565b60008082816114c88261207c565b60018101549091506114fa9083906c0100000000000000000000000090046bffffffffffffffffffffffff1683612106565b935093505050915091565b611533336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611569576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61159d6001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836124f9565b5050565b6115cf336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611605576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526003602081905260408083208381556001810180547fff000000000000000000000000000000000000000000000000000000000000001690556002810184905591820180547fffffffffffffffffffff000000000000000000000000000000000000000000001690556004909101829055517f77112f16adb9ba38b96415abef057fc90ed118ff5cd9ccd3640ebd3d36db56309190a250565b6116db336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611711576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f90968360405161175691815260200190565b60405180910390a36117726001600160a01b0384168383612635565b505050565b6117a5336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b6117db576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611826576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610961565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6118cd336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611903576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831661194e576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610961565b604080518082019091526000808252602082015260005b82811015611a765783838281811061197f5761197f6134c0565b90506040020180360381019061199591906134ef565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905501611965565b5050505050565b611aab336000357fffffffff0000000000000000000000000000000000000000000000000000000016612491565b611ae1576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611b2c576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610961565b6000611b3b6020830183612bdb565b6001600160a01b031603611b9457611b566020820182612bdb565b6040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610961565b611ba16020820182612bdb565b6001600160a01b0316826001600160a01b031603611bc657611b566020820182612bdb565b611bd6606082016040830161354c565b6bffffffffffffffffffffffff16600003611c1d576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c2d608082016060830161354c565b6bffffffffffffffffffffffff16611c4b606083016040840161354c565b6bffffffffffffffffffffffff161115611c91576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ca1604082016020830161354c565b6bffffffffffffffffffffffff16600003611ce8576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611cfc61012083016101008401612bdb565b6001600160a01b031614611dfa57611d1c61012082016101008301612bdb565b6001600160a01b0316639502128083611d386020850185612bdb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf9190613569565b611df5576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e44565b611e0a60e0820160c08301613586565b60010b15611e44576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e5861016083016101408401612bdb565b6001600160a01b031603611e7857611b5661016082016101408301612bdb565b612710611e8d610180830161016084016135b3565b61ffff161115611ec9576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eda610100820160e083016135e1565b62ffffff16600003611f18576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a80611f2d610100830160e084016135e1565b62ffffff161115611f6a576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526003602052604090208190611f8e828261364c565b50506040516001600160a01b038316907f620697ccb4f53d5acb95d022fff93232f3be2e80bcdc342dd974fc516c4c271c90600090a25050565b6002546001600160a01b0316331461200c576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6001600160a01b03808216600090815260036020526040902080549091166120db576040517fe39ca5270000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610961565b919050565b6000826120ed57836120fc565b8382106120fa57836120fc565b815b90505b9392505050565b600281015460009081906001600160a01b031680156122265760028401546040517f7349615f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637349615f90612171908990899060009081906004016139f9565b602060405180830381865afa15801561218e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b291906132d1565b6001808601549194507a010000000000000000000000000000000000000000000000000000909104900b60008113156121fc576121f58461ffff831660006122f2565b9350612224565b60008160010b12156122245761222161221482613a37565b859061ffff16600061267e565b93505b505b83547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683811161225b578361225d565b805b60028601549094507401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168061229657846122ab565b806122a18187613aa4565b6122ab9190613ab8565b9350836000036122e7576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050935093915050565b60008061230184612710613410565b905061231185826127108661269e565b95945050505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915260408051610180810182526001600160a01b038781168252855481166020830152600386015416918101919091526060810185905260808101839052600184015460a08201906123ef907c0100000000000000000000000000000000000000000000000000000000900462ffffff1661274f565b63ffffffff16815260048501546020820152600060408201527ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775606082015260018501547801000000000000000000000000000000000000000000000000900460ff16151560808201527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960a0820181905260c0909101529050949350505050565b600080546001600160a01b03848116911614806120ff57506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff169392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526125788482612771565b61262f576040516001600160a01b0384166024820152600060448201526126259085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612814565b61262f8482612814565b50505050565b6040516001600160a01b0383166024820152604481018290526117729084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016125c1565b6000612710838103908410612694576000612311565b6123118582612710865b60006126ab858585612916565b905060018260018111156126c1576126c1613993565b036107af5782806126d4576126d4613a75565b848609156107af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561270c576001016107af565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610961565b6000818061275d8142613acf565b6127679190613af2565b6106ca9190613b1a565b6000806000846001600160a01b03168460405161278e9190613b3e565b6000604051808303816000865af19150503d80600081146127cb576040519150601f19603f3d011682016040523d82523d6000602084013e6127d0565b606091505b50915091508180156127fa5750805115806127fa5750808060200190518101906127fa9190613569565b80156123115750505050506001600160a01b03163b151590565b6000612869826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612a219092919063ffffffff16565b905080516000148061288a57508080602001905181019061288a9190613569565b611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610961565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8587098587029250828110838203039150508060000361296e5783828161296457612964613a75565b04925050506120ff565b8381106129b8576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610961565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606120fc848460008585600080866001600160a01b03168587604051612a489190613b3e565b60006040518083038185875af1925050503d8060008114612a85576040519150601f19603f3d011682016040523d82523d6000602084013e612a8a565b606091505b5091509150612a9b87838387612aa6565b979650505050505050565b60608315612b2f578251600003612b28576001600160a01b0385163b612b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610961565b50816107af565b6107af8383815115612b445781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109619190613b5a565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146120db57600080fd5b600060208284031215612bba57600080fd5b6120ff82612b78565b6001600160a01b0381168114612bd857600080fd5b50565b600060208284031215612bed57600080fd5b81356120ff81612bc3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715612c4b57612c4b612bf8565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612c7a57612c7a612bf8565b604052919050565b60008060408385031215612c9557600080fd5b8235915060208084013567ffffffffffffffff80821115612cb557600080fd5b818601915086601f830112612cc957600080fd5b813581811115612cdb57612cdb612bf8565b612ced84601f19601f84011601612c51565b91508082528784828501011115612d0357600080fd5b80848401858401376000848284010152508093505050509250929050565b8015158114612bd857600080fd5b600060208284031215612d4157600080fd5b81356120ff81612d21565b60008083601f840112612d5e57600080fd5b50813567ffffffffffffffff811115612d7657600080fd5b6020830191508360208260051b8501011115612d9157600080fd5b9250929050565b60008060008060008060808789031215612db157600080fd5b8635612dbc81612bc3565b9550602087013567ffffffffffffffff80821115612dd957600080fd5b908801906060828b031215612ded57600080fd5b90955060408801359080821115612e0357600080fd5b818901915089601f830112612e1757600080fd5b813581811115612e2657600080fd5b8a6020828501011115612e3857600080fd5b602083019650809550506060890135915080821115612e5657600080fd5b50612e6389828a01612d4c565b979a9699509497509295939492505050565b80516001600160a01b031682526020810151612e9c60208401826001600160a01b03169052565b506040810151612eb760408401826001600160a01b03169052565b50606081015160608301526080810151608083015260a0810151612ee360a084018263ffffffff169052565b5060c081015160c083015260e081015160e083015261010080820151818401525061012080820151612f188285018215159052565b5050610140818101519083015261016090810151910152565b60005b83811015612f4c578181015183820152602001612f34565b50506000910152565b60008151808452612f6d816020860160208601612f31565b601f01601f19169290920160200192915050565b60006101a0612f908386612e75565b8061018084015261231181840185612f55565b6bffffffffffffffffffffffff81168114612bd857600080fd5b8060010b8114612bd857600080fd5b600080600080600060a08688031215612fe457600080fd5b8535612fef81612bc3565b94506020860135612fff81612fa3565b9350604086013561300f81612fa3565b9250606086013561301f81612fa3565b9150608086013561302f81612fbd565b809150509295509295909350565b6000806040838503121561305057600080fd5b823561305b81612bc3565b946020939093013593505050565b81516001600160a01b031681526101a08101602083015161309a60208401826bffffffffffffffffffffffff169052565b5060408301516130ba60408401826bffffffffffffffffffffffff169052565b5060608301516130da60608401826bffffffffffffffffffffffff169052565b5060808301516130ee608084018215159052565b5060a083015161310260a084018215159052565b5060c083015161311760c084018260010b9052565b5060e083015161312e60e084018262ffffff169052565b50610100838101516001600160a01b0390811691840191909152610120808501516bffffffffffffffffffffffff169084015261014080850151909116908301526101608084015161ffff169083015261018092830151929091019190915290565b6000806000606084860312156131a557600080fd5b83356131b081612bc3565b925060208401356131c081612bc3565b929592945050506040919091013590565b6000806000604084860312156131e657600080fd5b83356131f181612bc3565b9250602084013567ffffffffffffffff8082111561320e57600080fd5b818601915086601f83011261322257600080fd5b81358181111561323157600080fd5b8760208260061b850101111561324657600080fd5b6020830194508093505050509250925092565b6000808284036101c081121561326e57600080fd5b833561327981612bc3565b92506101a0601f198201121561328e57600080fd5b506020830190509250929050565b600080604083850312156132af57600080fd5b82356132ba81612bc3565b91506132c860208401612b78565b90509250929050565b6000602082840312156132e357600080fd5b5051919050565b80516120db81612bc3565b805163ffffffff811681146120db57600080fd5b80516120db81612d21565b6000610180828403121561332757600080fd5b61332f612c27565b613338836132ea565b8152613346602084016132ea565b6020820152613357604084016132ea565b6040820152606083015160608201526080830151608082015261337c60a084016132f5565b60a082015260c083015160c082015260e083015160e08201526101008084015181830152506101206133af818501613309565b908201526101408381015190820152610160928301519281019290925250919050565b61018081016106ca8284612e75565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106ca576106ca6133e1565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261345857600080fd5b83018035915067ffffffffffffffff82111561347357600080fd5b602001915036819003821315612d9157600080fd5b602081526001600160a01b03825116602082015260208201516040820152600060408301516060808401526107af6080840182612f55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040828403121561350157600080fd5b6040516040810181811067ffffffffffffffff8211171561352457613524612bf8565b60405261353083612b78565b8152602083013561354081612d21565b60208201529392505050565b60006020828403121561355e57600080fd5b81356120ff81612fa3565b60006020828403121561357b57600080fd5b81516120ff81612d21565b60006020828403121561359857600080fd5b81356120ff81612fbd565b61ffff81168114612bd857600080fd5b6000602082840312156135c557600080fd5b81356120ff816135a3565b62ffffff81168114612bd857600080fd5b6000602082840312156135f357600080fd5b81356120ff816135d0565b600081356106ca81612bc3565b600081356106ca81612fa3565b600081356106ca81612d21565b600081356106ca81612fbd565b600081356106ca816135d0565b600081356106ca816135a3565b61368d613658836135fe565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0391909116178255565b6136d461369c6020840161360b565b82546001600160a01b031660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016178255565b600181016137216136e76040850161360b565b82547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178255565b6137796137306060850161360b565b82547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff1660609190911b77ffffffffffffffffffffffff00000000000000000000000016178255565b6137d661378860808501613618565b8280547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1691151560c01b78ff00000000000000000000000000000000000000000000000016919091179055565b6138346137e560a08501613618565b8280547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff1691151560c81b79ff0000000000000000000000000000000000000000000000000016919091179055565b61389361384360c08501613625565b8280548260d01b7bffff0000000000000000000000000000000000000000000000000000167fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff8216178255505050565b6138f26138a260e08501613632565b82547fff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09190911b7effffff0000000000000000000000000000000000000000000000000000000016178255565b506002810161390761365861010085016135fe565b61391761369c610120850161360b565b506003810161392c61365861014085016135fe565b61398361393c610160850161363f565b82547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1660a09190911b75ffff000000000000000000000000000000000000000016178255565b5061018082013560048201555050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110612bd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001600160a01b03851681526020810184905260808101613a19846139c2565b836040830152613a28836139c2565b82606083015295945050505050565b60008160010b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80008103613a6c57613a6c6133e1565b60000392915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613ab357613ab3613a75565b500490565b80820281158282048414176106ca576106ca6133e1565b600063ffffffff80841680613ae657613ae6613a75565b92169190910492915050565b63ffffffff818116838216028082169190828114613b1257613b126133e1565b505092915050565b63ffffffff818116838216019080821115613b3757613b376133e1565b5092915050565b60008251613b50818460208701612f31565b9190910192915050565b6020815260006120ff6020830184612f5556fea2646970667358221220cd6544f1afef8e9c442c6c7e4e01c2f6bd1e8f45ddbdf5d5e41a8a46c516226664736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d80000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110