7 txs
118 calls
constructor
constructor(address _initialOwner, address _cowSwapRelayer, address _cowSettlement)
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 tradeableOrderDigest, 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
0x60c06040523480156200001157600080fd5b5060405162003e5c38038062003e5c833981016040819052620000349162000166565b826200004081620000cd565b50816001600160a01b03166080816001600160a01b031681525050806001600160a01b031663f698da256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200009a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c09190620001b0565b60a05250620001ca915050565b6000546001600160a01b031615620000f857604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200012757604051634726455360e11b81526000600482015260240160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200016157600080fd5b919050565b6000806000606084860312156200017c57600080fd5b620001878462000149565b9250620001976020850162000149565b9150620001a76040850162000149565b90509250925092565b600060208284031215620001c357600080fd5b5051919050565b60805160a051613c65620001f7600039600061087e0152600081816101a9015261163a0152613c656000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063617e7c29116100d8578063b187bd261161008c578063c24277e311610066578063c24277e314610556578063daeccc7914610569578063ebbc49651461059757600080fd5b8063b187bd261461050b578063b1f8100d14610530578063bfccf0ec1461054357600080fd5b806375778108116100bd57806375778108146102fa5780638da5cb5b146104e5578063a7229fd9146104f857600080fd5b8063617e7c29146102d457806370023f6a146102e757600080fd5b806326e0a1961161012f5780633daaf325116101145780633daaf325146102865780633f0b495a146102995780635f4dfa03146102ac57600080fd5b806326e0a1961461025d5780632b9689581461027e57600080fd5b806310e65c641161016057806310e65c64146101e35780631626ba7e1461020457806316c38b3c1461024857600080fd5b806301ffc9a71461017c5780630cbfe7dc146101a4575b600080fd5b61018f61018a366004612c6a565b61059f565b60405190151581526020015b60405180910390f35b6101cb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019b565b6101f66101f1366004612c9d565b6106d0565b60405190815260200161019b565b610217610212366004612d44565b6107b7565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161019b565b61025b610256366004612df1565b610ada565b005b61027061026b366004612e5a565b610bc2565b60405161019b929190613043565b61025b611076565b61025b610294366004612c9d565b611191565b61025b6102a736600461308e565b6112d7565b6102bf6102ba366004612c9d565b61157c565b6040805192835260208301919091520161019b565b61025b6102e23660046130ff565b6115c7565b61025b6102f5366004612c9d565b611663565b6104d8610308366004612c9d565b604080516101a081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101829052610180810191909152506001600160a01b0390811660009081526003602081815260409283902083516101a0810185528154808716825274010000000000000000000000000000000000000000908190046bffffffffffffffffffffffff90811694830194909452600180840154808616978401979097526c010000000000000000000000008704851660608401527801000000000000000000000000000000000000000000000000870460ff90811615156080850152790100000000000000000000000000000000000000000000000000880416151560a08401527a0100000000000000000000000000000000000000000000000000008704900b60c08301527c010000000000000000000000000000000000000000000000000000000090950462ffffff1660e08201526002820154808716610100830152859004909216610120830152918201549384166101408201529190920461ffff1661016082015260049091015461018082015290565b60405161019b919061312b565b6000546101cb906001600160a01b031681565b61025b610506366004613252565b61176f565b60025461018f9074010000000000000000000000000000000000000000900460ff1681565b61025b61053e366004612c9d565b611839565b61025b610551366004613293565b611961565b61025b61056436600461331b565b611b3f565b61018f61057736600461335e565b600160209081526000928352604080842090915290825290205460ff1681565b61025b61208a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f40b8787600000000000000000000000000000000000000000000000000000000148061063257507fffffffff0000000000000000000000000000000000000000000000000000000082167f26e0a19600000000000000000000000000000000000000000000000000000000145b8061067e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b806106ca57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1626ba7e00000000000000000000000000000000000000000000000000000000145b92915050565b600081816106dd8261213e565b60018101546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506107af916c0100000000000000000000000082046bffffffffffffffffffffffff1691790100000000000000000000000000000000000000000000000000900460ff16906001600160a01b038616906370a0823190602401602060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190613393565b6121a2565b949350505050565b60025460009074010000000000000000000000000000000000000000900460ff161561080f576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008280602001905181019061082591906133d6565b601f19810180517fd5a25ba2e97094ad7d83dc28a6572da797d6b3e7fc6663bd93efb789fc17e48982526101a0822091526040517f190100000000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600282015260228101919091526042902090915084146108e9576040517f98c850a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108f8826000015161213e565b600181015460608401519192506c0100000000000000000000000090046bffffffffffffffffffffffff169060009082116109335781610939565b83606001515b60018401549091506bffffffffffffffffffffffff16811015610988576040517fa690a25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610999856000015183866121c8565b600386015490925074010000000000000000000000000000000000000000900461ffff1690506000816109d05786608001516109e1565b60808701516109e1908360006123b4565b905080831115610a2c576040517f2746152a00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044015b60405180910390fd5b6000610a42886000015186898b608001516123dc565b9050898051906020012081604051602001610a5d9190613494565b6040516020818303038152906040528051906020012014610aaa576040517f98c850a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507f1626ba7e000000000000000000000000000000000000000000000000000000009a9950505050505050505050565b610b08336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b610b3e576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f40db37ff5c0bdc2c427fbb2078c8f24afea940abac0e3c23bb4ea3bf2da2b21290610bb790831515815260200190565b60405180910390a150565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915260025460609074010000000000000000000000000000000000000000900460ff1615610cbe57610c5561012c426134d2565b604080517f7e33463700000000000000000000000000000000000000000000000000000000815260048101929092526024820152600660448201527f50617573656400000000000000000000000000000000000000000000000000006064820152608401610a23565b6001600160a01b0388163014610d30576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f72646572206f776e6572206d7573742062652073656c6600000000000000006044820152606401610a23565b6000610d3f6020890189612c9d565b6001600160a01b031614610daf576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f68616e646c6572206d75737420626520756e73657400000000000000000000006044820152606401610a23565b602087013515610e1b576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f73616c74206d75737420626520756e73657400000000000000000000000000006044820152606401610a23565b6000610e2a60408901896134e5565b810190610e379190612c9d565b6001600160a01b03808216600090815260036020526040902080549293509116610ebd576040517fc8fc272500000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f73656c6c546f6b656e206e6f7420636f6e6669677572656400000000000000006044820152606401610a23565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f419190613393565b60018301549091506bffffffffffffffffffffffff16811015610fd357610f6a61012c426134d2565b604080517f7e33463700000000000000000000000000000000000000000000000000000000815260048101929092526024820152600a60448201527f4d696e42616c616e6365000000000000000000000000000000000000000000006064820152608401610a23565b6001820154600090611024906c0100000000000000000000000081046bffffffffffffffffffffffff1690790100000000000000000000000000000000000000000000000000900460ff16846121a2565b905060006110338583866121c8565b915050611042858386846123dc565b9650866040516020016110559190613494565b60405160208183030381529060405295505050505050965096945050505050565b6110a4336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b6110da576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b031661dead1461112f576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a23565b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6111bf336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b6111f5576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025474010000000000000000000000000000000000000000900460ff161561124a576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112538161213e565b50604080516001600160a01b0383166020808301919091528251808303909101815260a0820183526000828401818152606084018290526080909301829052925130939283929185917f2cceac5555b0ca45a3744ced542f54b56ad2eb45e521962372eef212a2cbf361916112c8919061354a565b60405180910390a25050505050565b611305336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b61133b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836bffffffffffffffffffffffff16600003611383576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826bffffffffffffffffffffffff16846bffffffffffffffffffffffff1611156113d9576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816bffffffffffffffffffffffff16600003611421576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061142c8661213e565b60028101549091506001600160a01b031661147e578160010b60001461147e576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101805482546bffffffffffffffffffffffff86811674010000000000000000000000000000000000000000026001600160a01b0392831617855561ffff86167a010000000000000000000000000000000000000000000000000000027fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff8983166c01000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909516928b1692909217939093171691909117909155604051908716907f620697ccb4f53d5acb95d022fff93232f3be2e80bcdc342dd974fc516c4c271c90600090a2505050505050565b600080828161158a8261213e565b60018101549091506115bc9083906c0100000000000000000000000090046bffffffffffffffffffffffff16836121c8565b935093505050915091565b6115f5336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b61162b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165f6001600160a01b0383167f0000000000000000000000000000000000000000000000000000000000000000836125bb565b5050565b611691336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b6116c7576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660008181526003602081905260408083208381556001810180547fff000000000000000000000000000000000000000000000000000000000000001690556002810184905591820180547fffffffffffffffffffff000000000000000000000000000000000000000000001690556004909101829055517f77112f16adb9ba38b96415abef057fc90ed118ff5cd9ccd3640ebd3d36db56309190a250565b61179d336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b6117d3576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f90968360405161181891815260200190565b60405180910390a36118346001600160a01b03841683836126f7565b505050565b611867336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b61189d576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166118e8576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a23565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61198f336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b6119c5576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611a10576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610a23565b604080518082019091526000808252602082015260005b82811015611b3857838382818110611a4157611a41613582565b905060400201803603810190611a5791906135b1565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905501611a27565b5050505050565b611b6d336000357fffffffff0000000000000000000000000000000000000000000000000000000016612553565b611ba3576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216611bee576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a23565b6000611bfd6020830183612c9d565b6001600160a01b031603611c5657611c186020820182612c9d565b6040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a23565b611c636020820182612c9d565b6001600160a01b0316826001600160a01b031603611c8857611c186020820182612c9d565b611c98606082016040830161360e565b6bffffffffffffffffffffffff16600003611cdf576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cef608082016060830161360e565b6bffffffffffffffffffffffff16611d0d606083016040840161360e565b6bffffffffffffffffffffffff161115611d53576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d63604082016020830161360e565b6bffffffffffffffffffffffff16600003611daa576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611dbe61012083016101008401612c9d565b6001600160a01b031614611ebc57611dde61012082016101008301612c9d565b6001600160a01b0316639502128083611dfa6020850185612c9d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e81919061362b565b611eb7576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f06565b611ecc60e0820160c08301613648565b60010b15611f06576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f1a61016083016101408401612c9d565b6001600160a01b031603611f3a57611c1861016082016101408301612c9d565b612710611f4f61018083016101608401613675565b61ffff161115611f8b576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9c610100820160e083016136a3565b62ffffff16600003611fda576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a80611fef610100830160e084016136a3565b62ffffff16111561202c576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526003602052604090208190612050828261370e565b50506040516001600160a01b038316907f620697ccb4f53d5acb95d022fff93232f3be2e80bcdc342dd974fc516c4c271c90600090a25050565b6002546001600160a01b031633146120ce576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6001600160a01b038082166000908152600360205260409020805490911661219d576040517fe39ca5270000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a23565b919050565b6000826121af57836121be565b8382106121bc57836121be565b815b90505b9392505050565b600281015460009081906001600160a01b031680156122e85760028401546040517f7349615f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637349615f9061223390899089906000908190600401613abb565b602060405180830381865afa158015612250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122749190613393565b6001808601549194507a010000000000000000000000000000000000000000000000000000909104900b60008113156122be576122b78461ffff831660006123b4565b93506122e6565b60008160010b12156122e6576122e36122d682613af9565b859061ffff166000612740565b93505b505b83547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683811161231d578361231f565b805b60028601549094507401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1680612358578461236d565b806123638187613b66565b61236d9190613b7a565b9350836000036123a9576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050935093915050565b6000806123c3846127106134d2565b90506123d3858261271086612760565b95945050505050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915260408051610180810182526001600160a01b038781168252855481166020830152600386015416918101919091526060810185905260808101839052600184015460a08201906124b1907c0100000000000000000000000000000000000000000000000000000000900462ffffff16612811565b63ffffffff16815260048501546020820152600060408201527ff3b277728b3fee749481eb3e0b3b48980dbbab78658fc419025cb16eee346775606082015260018501547801000000000000000000000000000000000000000000000000900460ff16151560808201527f5a28e9363bb942b639270062aa6bb295f434bcdfc42c97267bf003f272060dc960a0820181905260c0909101529050949350505050565b600080546001600160a01b03848116911614806121c157506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff169392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261263a8482612833565b6126f1576040516001600160a01b0384166024820152600060448201526126e79085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526128d6565b6126f184826128d6565b50505050565b6040516001600160a01b0383166024820152604481018290526118349084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612683565b60006127108381039084106127565760006123d3565b6123d38582612710865b600061276d8585856129d8565b9050600182600181111561278357612783613a55565b036107af57828061279657612796613b37565b848609156107af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156127ce576001016107af565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610a23565b6000818061281f8142613b91565b6128299190613bb4565b6106ca9190613bdc565b6000806000846001600160a01b0316846040516128509190613c00565b6000604051808303816000865af19150503d806000811461288d576040519150601f19603f3d011682016040523d82523d6000602084013e612892565b606091505b50915091508180156128bc5750805115806128bc5750808060200190518101906128bc919061362b565b80156123d35750505050506001600160a01b03163b151590565b600061292b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ae39092919063ffffffff16565b905080516000148061294c57508080602001905181019061294c919061362b565b611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a23565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870985870292508281108382030391505080600003612a3057838281612a2657612a26613b37565b04925050506121c1565b838110612a7a576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610a23565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60606121be848460008585600080866001600160a01b03168587604051612b0a9190613c00565b60006040518083038185875af1925050503d8060008114612b47576040519150601f19603f3d011682016040523d82523d6000602084013e612b4c565b606091505b5091509150612b5d87838387612b68565b979650505050505050565b60608315612bf1578251600003612bea576001600160a01b0385163b612bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a23565b50816107af565b6107af8383815115612c065781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a239190613c1c565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461219d57600080fd5b600060208284031215612c7c57600080fd5b6121c182612c3a565b6001600160a01b0381168114612c9a57600080fd5b50565b600060208284031215612caf57600080fd5b81356121c181612c85565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715612d0d57612d0d612cba565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612d3c57612d3c612cba565b604052919050565b60008060408385031215612d5757600080fd5b8235915060208084013567ffffffffffffffff80821115612d7757600080fd5b818601915086601f830112612d8b57600080fd5b813581811115612d9d57612d9d612cba565b612daf84601f19601f84011601612d13565b91508082528784828501011115612dc557600080fd5b80848401858401376000848284010152508093505050509250929050565b8015158114612c9a57600080fd5b600060208284031215612e0357600080fd5b81356121c181612de3565b60008083601f840112612e2057600080fd5b50813567ffffffffffffffff811115612e3857600080fd5b6020830191508360208260051b8501011115612e5357600080fd5b9250929050565b60008060008060008060808789031215612e7357600080fd5b8635612e7e81612c85565b9550602087013567ffffffffffffffff80821115612e9b57600080fd5b908801906060828b031215612eaf57600080fd5b90955060408801359080821115612ec557600080fd5b818901915089601f830112612ed957600080fd5b813581811115612ee857600080fd5b8a6020828501011115612efa57600080fd5b602083019650809550506060890135915080821115612f1857600080fd5b50612f2589828a01612e0e565b979a9699509497509295939492505050565b80516001600160a01b031682526020810151612f5e60208401826001600160a01b03169052565b506040810151612f7960408401826001600160a01b03169052565b50606081015160608301526080810151608083015260a0810151612fa560a084018263ffffffff169052565b5060c081015160c083015260e081015160e083015261010080820151818401525061012080820151612fda8285018215159052565b5050610140818101519083015261016090810151910152565b60005b8381101561300e578181015183820152602001612ff6565b50506000910152565b6000815180845261302f816020860160208601612ff3565b601f01601f19169290920160200192915050565b60006101a06130528386612f37565b806101808401526123d381840185613017565b6bffffffffffffffffffffffff81168114612c9a57600080fd5b8060010b8114612c9a57600080fd5b600080600080600060a086880312156130a657600080fd5b85356130b181612c85565b945060208601356130c181613065565b935060408601356130d181613065565b925060608601356130e181613065565b915060808601356130f18161307f565b809150509295509295909350565b6000806040838503121561311257600080fd5b823561311d81612c85565b946020939093013593505050565b81516001600160a01b031681526101a08101602083015161315c60208401826bffffffffffffffffffffffff169052565b50604083015161317c60408401826bffffffffffffffffffffffff169052565b50606083015161319c60608401826bffffffffffffffffffffffff169052565b5060808301516131b0608084018215159052565b5060a08301516131c460a084018215159052565b5060c08301516131d960c084018260010b9052565b5060e08301516131f060e084018262ffffff169052565b50610100838101516001600160a01b0390811691840191909152610120808501516bffffffffffffffffffffffff169084015261014080850151909116908301526101608084015161ffff169083015261018092830151929091019190915290565b60008060006060848603121561326757600080fd5b833561327281612c85565b9250602084013561328281612c85565b929592945050506040919091013590565b6000806000604084860312156132a857600080fd5b83356132b381612c85565b9250602084013567ffffffffffffffff808211156132d057600080fd5b818601915086601f8301126132e457600080fd5b8135818111156132f357600080fd5b8760208260061b850101111561330857600080fd5b6020830194508093505050509250925092565b6000808284036101c081121561333057600080fd5b833561333b81612c85565b92506101a0601f198201121561335057600080fd5b506020830190509250929050565b6000806040838503121561337157600080fd5b823561337c81612c85565b915061338a60208401612c3a565b90509250929050565b6000602082840312156133a557600080fd5b5051919050565b805161219d81612c85565b805163ffffffff8116811461219d57600080fd5b805161219d81612de3565b600061018082840312156133e957600080fd5b6133f1612ce9565b6133fa836133ac565b8152613408602084016133ac565b6020820152613419604084016133ac565b6040820152606083015160608201526080830151608082015261343e60a084016133b7565b60a082015260c083015160c082015260e083015160e08201526101008084015181830152506101206134718185016133cb565b908201526101408381015190820152610160928301519281019290925250919050565b61018081016106ca8284612f37565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106ca576106ca6134a3565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261351a57600080fd5b83018035915067ffffffffffffffff82111561353557600080fd5b602001915036819003821315612e5357600080fd5b602081526001600160a01b03825116602082015260208201516040820152600060408301516060808401526107af6080840182613017565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082840312156135c357600080fd5b6040516040810181811067ffffffffffffffff821117156135e6576135e6612cba565b6040526135f283612c3a565b8152602083013561360281612de3565b60208201529392505050565b60006020828403121561362057600080fd5b81356121c181613065565b60006020828403121561363d57600080fd5b81516121c181612de3565b60006020828403121561365a57600080fd5b81356121c18161307f565b61ffff81168114612c9a57600080fd5b60006020828403121561368757600080fd5b81356121c181613665565b62ffffff81168114612c9a57600080fd5b6000602082840312156136b557600080fd5b81356121c181613692565b600081356106ca81612c85565b600081356106ca81613065565b600081356106ca81612de3565b600081356106ca8161307f565b600081356106ca81613692565b600081356106ca81613665565b61374f61371a836136c0565b82547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0391909116178255565b61379661375e602084016136cd565b82546001600160a01b031660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016178255565b600181016137e36137a9604085016136cd565b82547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff91909116178255565b61383b6137f2606085016136cd565b82547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff1660609190911b77ffffffffffffffffffffffff00000000000000000000000016178255565b61389861384a608085016136da565b8280547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1691151560c01b78ff00000000000000000000000000000000000000000000000016919091179055565b6138f66138a760a085016136da565b8280547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff1691151560c81b79ff0000000000000000000000000000000000000000000000000016919091179055565b61395561390560c085016136e7565b8280548260d01b7bffff0000000000000000000000000000000000000000000000000000167fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff8216178255505050565b6139b461396460e085016136f4565b82547fff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09190911b7effffff0000000000000000000000000000000000000000000000000000000016178255565b50600281016139c961371a61010085016136c0565b6139d961375e61012085016136cd565b50600381016139ee61371a61014085016136c0565b613a456139fe6101608501613701565b82547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1660a09190911b75ffff000000000000000000000000000000000000000016178255565b5061018082013560048201555050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110612c9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001600160a01b03851681526020810184905260808101613adb84613a84565b836040830152613aea83613a84565b82606083015295945050505050565b60008160010b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80008103613b2e57613b2e6134a3565b60000392915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613b7557613b75613b37565b500490565b80820281158282048414176106ca576106ca6134a3565b600063ffffffff80841680613ba857613ba8613b37565b92169190910492915050565b63ffffffff818116838216028082169190828114613bd457613bd46134a3565b505092915050565b63ffffffff818116838216019080821115613bf957613bf96134a3565b5092915050565b60008251613c12818460208701612ff3565b9190910192915050565b6020815260006121c1602083018461301756fea26469706673582212202d945170c738dcc1bb398cfa69927b3ed17e9d9ecf697695b3119eeacb15844564736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d80000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe01100000000000000000000000009008d19f58aabd9ed0d60971565aa8510560ab41