3 txs
4 calls
constructor
constructor(address _universalRouter, address _weth, address _feeRecipient)
functions
basketHelper
viewfunction basketHelper() view returns (address)
basketHelperPro
viewfunction basketHelperPro() view returns (address)
calculateFee
viewfunction calculateFee(uint256 amount) view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
getPlatformFee
viewfunction getPlatformFee() view returns (uint256)
MAX_ALLOCATION
viewfunction MAX_ALLOCATION() view returns (uint256)
MAX_TOKENS
viewfunction MAX_TOKENS() view returns (uint256)
MIN_ALLOCATION
viewfunction MIN_ALLOCATION() view returns (uint256)
owner
viewfunction owner() view returns (address)
platformFee
viewfunction platformFee() view returns (uint256)
universalRouter
viewfunction universalRouter() view returns (address)
WETH
viewfunction WETH() view returns (address)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
purchaseBasket
payablefunction purchaseBasket(tuple[] tokens, address recipient, uint256 deadline, bytes swapCommands, bytes[] swapInputs) payable
purchaseBasketOptimized
payablefunction purchaseBasketOptimized(tuple[] tokens, uint256 slippageTolerance) payable
purchaseBasketWithToken
nonpayablefunction purchaseBasketWithToken(address inputToken, uint256 inputAmount, tuple[] tokens, address recipient, uint256 deadline, bytes swapCommands, bytes[] swapInputs)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeRecipient
nonpayablefunction setFeeRecipient(address _newRecipient)
setPlatformFee
nonpayablefunction setPlatformFee(uint256 _newFee)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
BasketPurchased
event BasketPurchased(address indexed buyer, address indexed recipient, uint256 totalAmount, uint256 tokenCount, uint256 feeAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlatformFeeUpdated
event PlatformFeeUpdated(uint256 oldFee, uint256 newFee)
TokenSwapped
event TokenSwapped(address indexed token, uint256 amountIn, uint256 amountOut)
errors
AllocationSumMismatch
error AllocationSumMismatch()
DeadlineExceeded
error DeadlineExceeded()
InsufficientBalance
error InsufficientBalance()
InvalidAllocation
error InvalidAllocation()
InvalidFeeRecipient
error InvalidFeeRecipient()
InvalidTokenCount
error InvalidTokenCount()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapFailed
error SwapFailed()
creation bytecode
0x60c060405260326002553480156200001657600080fd5b50604051620039e9380380620039e98339810160408190526200003991620001c6565b33806200006057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006b816200013d565b50600180556001600160a01b0383811660805282811660a052600380546001600160a01b031916918316919091179055604051620000a9906200018d565b604051809103906000f080158015620000c6573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392909216919091179055604051620000f5906200019b565b604051809103906000f08015801562000112573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b03929092169190911790555062000210915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610bc28062001a8583390190565b6113a2806200264783390190565b80516001600160a01b0381168114620001c157600080fd5b919050565b600080600060608486031215620001dc57600080fd5b620001e784620001a9565b9250620001f760208501620001a9565b91506200020760408501620001a9565b90509250925092565b60805160a05161182c62000259600039600081816102d6015261067b0152600081816101a2015281816106ee01528181610aa201528181610ade0152610dd9015261182c6000f3fe6080604052600436106101235760003560e01c806395ccea67116100a0578063e5486bda11610064578063e5486bda1461031e578063e74b981b14610333578063f043164114610353578063f2fde38b14610373578063f47c84c51461031e57600080fd5b806395ccea671461028457806399a5d747146102a4578063ad5c4648146102c4578063af6e865b146102f8578063d726c2e51461030b57600080fd5b80636dadc43c116100e75780636dadc43c146101fc5780636ea8bc101461021c578063702e495814610231578063715018a6146102515780638da5cb5b1461026657600080fd5b806312e8e2c31461012f57806326232a2e14610151578063298f2ac41461017a57806335a9e4df1461019057806346904840146101dc57600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a366004611073565b610393565b005b34801561015d57600080fd5b5061016760025481565b6040519081526020015b60405180910390f35b34801561018657600080fd5b5061016761271081565b34801561019c57600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610171565b3480156101e857600080fd5b506003546101c4906001600160a01b031681565b34801561020857600080fd5b506005546101c4906001600160a01b031681565b34801561022857600080fd5b50600254610167565b34801561023d57600080fd5b506004546101c4906001600160a01b031681565b34801561025d57600080fd5b5061014f610426565b34801561027257600080fd5b506000546001600160a01b03166101c4565b34801561029057600080fd5b5061014f61029f3660046110a8565b61043a565b3480156102b057600080fd5b506101676102bf366004611073565b61051a565b3480156102d057600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b61014f61030636600461111e565b61053d565b61014f6103193660046111f1565b6107bf565b34801561032a57600080fd5b50610167600a81565b34801561033f57600080fd5b5061014f61034e3660046112a8565b610970565b34801561035f57600080fd5b5061014f61036e3660046112ca565b6109c1565b34801561037f57600080fd5b5061014f61038e3660046112a8565b610bb0565b61039b610bee565b6101f48111156103e15760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064015b60405180910390fd5b600280549082905560408051828152602081018490527fd347e206f25a89b917fc9482f1a2d294d749baa4dc9bde7fb495ee11fe491643910160405180910390a15050565b61042e610bee565b6104386000610c1b565b565b610442610bee565b6001600160a01b0382166104f057600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461049d576040519150601f19603f3d011682016040523d82523d6000602084013e6104a2565b606091505b50509050806104eb5760405162461bcd60e51b8152602060048201526015602482015274115512081dda5d1a191c985dd85b0819985a5b1959605a1b60448201526064016103d8565b505050565b6105166105056000546001600160a01b031690565b6001600160a01b0384169083610c6b565b5050565b60006127106002548361052d91906113b4565b61053791906113cb565b92915050565b610545610cca565b600034116105855760405162461bcd60e51b815260206004820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b60448201526064016103d8565b6103e88111156105cb5760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b60448201526064016103d8565b6105d58383610cf4565b6000612710600254346105e891906113b4565b6105f291906113cb565b9050600061060082346113ed565b90508115610644576003546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610642573d6000803e3d6000fd5b505b60055460405163122e1a6960e11b815260009182916001600160a01b039091169063245c34d2906106a3908a908a90889033908c907f000000000000000000000000000000000000000000000000000000000000000090600401611400565b600060405180830381865afa1580156106c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e89190810190611554565b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166324856bc38484846040518463ffffffff1660e01b815260040161073b929190611667565b6000604051808303818588803b15801561075457600080fd5b505af1158015610768573d6000803e3d6000fd5b505060408051348152602081018b90529081018890523393508392507fbe85bc6d74d54aa721b28d456de4f02f5ed032dadb3fe6725f44cbe7e777f848915060600160405180910390a3505050506104eb60018055565b6107c7610cca565b844211156107e85760405163559895a360e01b815260040160405180910390fd5b8615806107f55750600a87115b156108135760405163e778681d60e01b815260040160405180910390fd5b6001600160a01b038616610825573395505b61082f8888610cf4565b60006127106002543461084291906113b4565b61084c91906113cb565b9050600061085a82346113ed565b905081156108fd576003546040516000916001600160a01b03169084908381818185875af1925050503d80600081146108af576040519150601f19603f3d011682016040523d82523d6000602084013e6108b4565b606091505b50509050806108fb5760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b60448201526064016103d8565b505b61090d86868686858f8f8f610dc2565b60408051348152602081018b90529081018390526001600160a01b0389169033907fbe85bc6d74d54aa721b28d456de4f02f5ed032dadb3fe6725f44cbe7e777f8489060600160405180910390a3505061096660018055565b5050505050505050565b610978610bee565b6001600160a01b03811661099f57604051630ed1b8b360e31b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6109c9610cca565b844211156109ea5760405163559895a360e01b815260040160405180910390fd5b8615806109f75750600a87115b15610a155760405163e778681d60e01b815260040160405180910390fd5b6001600160a01b038616610a27573395505b610a318888610cf4565b610a466001600160a01b038b1633308c610ee8565b60006127106002548b610a5991906113b4565b610a6391906113cb565b90506000610a71828c6113ed565b90508115610a9357600354610a93906001600160a01b038e8116911684610c6b565b610ac76001600160a01b038d167f000000000000000000000000000000000000000000000000000000000000000083610f27565b6040516324856bc360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906324856bc390610b19908990899089908990600401611702565b600060405180830381600087803b158015610b3357600080fd5b505af1158015610b47573d6000803e3d6000fd5b5050604080518e8152602081018d90529081018590526001600160a01b038b1692503391507fbe85bc6d74d54aa721b28d456de4f02f5ed032dadb3fe6725f44cbe7e777f8489060600160405180910390a35050610ba460018055565b50505050505050505050565b610bb8610bee565b6001600160a01b038116610be257604051631e4fbdf760e01b8152600060048201526024016103d8565b610beb81610c1b565b50565b6000546001600160a01b031633146104385760405163118cdaa760e01b81523360048201526024016103d8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b038381166024830152604482018390526104eb91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610fb3565b600260015403610ced57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000805b82811015610d9f57600a848483818110610d1457610d146117b4565b905060400201602001351080610d465750612710848483818110610d3a57610d3a6117b4565b90506040020160200135115b15610d64576040516305d7ba1960e11b815260040160405180910390fd5b838382818110610d7657610d766117b4565b9050604002016020013582610d8b91906117ca565b915080610d97816117dd565b915050610cf8565b5061271081146104eb57604051636bb80c9560e11b815260040160405180910390fd5b6040516324856bc360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906324856bc3908690610e16908c908c908c908c90600401611702565b6000604051808303818588803b158015610e2f57600080fd5b505af1158015610e43573d6000803e3d6000fd5b5050505050600047111561096657604051600090339047908381818185875af1925050503d8060008114610e93576040519150601f19603f3d011682016040523d82523d6000602084013e610e98565b606091505b5050905080610edd5760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b60448201526064016103d8565b505050505050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610f219186918216906323b872dd90608401610c98565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610f788482611024565b610f21576040516001600160a01b03848116602483015260006044830152610fad91869182169063095ea7b390606401610c98565b610f2184825b600080602060008451602086016000885af180610fd6576040513d6000823e3d81fd5b50506000513d91508115610fee578060011415610ffb565b6001600160a01b0384163b155b15610f2157604051635274afe760e01b81526001600160a01b03851660048201526024016103d8565b6000806000806020600086516020880160008a5af192503d915060005190508280156110695750811561105a5780600114611069565b6000866001600160a01b03163b115b9695505050505050565b60006020828403121561108557600080fd5b5035919050565b80356001600160a01b03811681146110a357600080fd5b919050565b600080604083850312156110bb57600080fd5b6110c48361108c565b946020939093013593505050565b60008083601f8401126110e457600080fd5b50813567ffffffffffffffff8111156110fc57600080fd5b6020830191508360208260061b850101111561111757600080fd5b9250929050565b60008060006040848603121561113357600080fd5b833567ffffffffffffffff81111561114a57600080fd5b611156868287016110d2565b909790965060209590950135949350505050565b60008083601f84011261117c57600080fd5b50813567ffffffffffffffff81111561119457600080fd5b60208301915083602082850101111561111757600080fd5b60008083601f8401126111be57600080fd5b50813567ffffffffffffffff8111156111d657600080fd5b6020830191508360208260051b850101111561111757600080fd5b60008060008060008060008060a0898b03121561120d57600080fd5b883567ffffffffffffffff8082111561122557600080fd5b6112318c838d016110d2565b909a50985088915061124560208c0161108c565b975060408b0135965060608b013591508082111561126257600080fd5b61126e8c838d0161116a565b909650945060808b013591508082111561128757600080fd5b506112948b828c016111ac565b999c989b5096995094979396929594505050565b6000602082840312156112ba57600080fd5b6112c38261108c565b9392505050565b60008060008060008060008060008060e08b8d0312156112e957600080fd5b6112f28b61108c565b995060208b0135985060408b013567ffffffffffffffff8082111561131657600080fd5b6113228e838f016110d2565b909a50985088915061133660608e0161108c565b975060808d0135965060a08d013591508082111561135357600080fd5b61135f8e838f0161116a565b909650945060c08d013591508082111561137857600080fd5b506113858d828e016111ac565b915080935050809150509295989b9194979a5092959850565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176105375761053761139e565b6000826113e857634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105375761053761139e565b60a0808252810186905260008760c08301825b8981101561144b576001600160a01b0361142c8461108c565b1682526020838101359083015260409283019290910190600101611413565b50602084019790975250506001600160a01b039384166040820152606081019290925290911660809091015292915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114bc576114bc61147d565b604052919050565b60005b838110156114df5781810151838201526020016114c7565b50506000910152565b600082601f8301126114f957600080fd5b815167ffffffffffffffff8111156115135761151361147d565b611526601f8201601f1916602001611493565b81815284602083860101111561153b57600080fd5b61154c8260208301602087016114c4565b949350505050565b6000806040838503121561156757600080fd5b825167ffffffffffffffff8082111561157f57600080fd5b61158b868387016114e8565b93506020915081850151818111156115a257600080fd5b8501601f810187136115b357600080fd5b8051828111156115c5576115c561147d565b8060051b6115d4858201611493565b918252828101850191858101908a8411156115ee57600080fd5b86850192505b8383101561162a5782518681111561160c5760008081fd5b61161a8c89838901016114e8565b83525091860191908601906115f4565b809750505050505050509250929050565b600081518084526116538160208601602086016114c4565b601f01601f19169290920160200192915050565b60408152600061167a604083018561163b565b6020838203818501528185518084528284019150828160051b85010183880160005b838110156116ca57601f198784030185526116b883835161163b565b9486019492509085019060010161169c565b50909998505050505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006117166040830186886116d9565b602083820381850152818583528183019050818660051b8401018760005b888110156117a457858303601f190184528135368b9003601e1901811261175a57600080fd5b8a01858101903567ffffffffffffffff81111561177657600080fd5b80360382131561178557600080fd5b6117908582846116d9565b958701959450505090840190600101611734565b50909a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b808201808211156105375761053761139e565b6000600182016117ef576117ef61139e565b506001019056fea26469706673582212203fce712e4cddf88d138ff1b698cd3d34cd92888ebf38a657cdc13cd55deaaf1064736f6c63430008140033608060405234801561001057600080fd5b50610ba2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806304b1586e1461005c57806346674142146100865780635730861b146100a957806375349404146100bc578063818f8349146100cf575b600080fd5b61006f61006a366004610790565b6100fa565b60405161007d92919061082b565b60405180910390f35b6100996100943660046108e9565b61021d565b604051901515815260200161007d565b61006f6100b736600461092b565b6102e4565b61006f6100ca3660046109a1565b6104cf565b6100e66100dd366004610a06565b610bb892915050565b60405162ffffff909116815260200161007d565b60408051600180825281830190925260609182919060208201818036833701905050604080516001808252818301909252919350816020015b6060815260200190600190039081610133579050509050600060f81b8260008151811061016257610162610a4f565b60200101906001600160f81b031916908160001a9053506040518060e00160405280886001600160a01b03168152602001876001600160a01b03168152602001610bb862ffffff168152602001856001600160a01b031681526020018681526020016101ce878661074a565b815260006020918201526040516101e6929101610a65565b6040516020818303038152906040528160008151811061020857610208610a4f565b60200260200101819052509550959350505050565b600081158061022c5750600a82115b15610239575060006102de565b6000805b838110156102d657600a85858381811061025957610259610a4f565b90506040020160200135108061028b575061271085858381811061027f5761027f610a4f565b90506040020160200135115b1561029b576000925050506102de565b8484828181106102ad576102ad610a4f565b90506040020160200135826102c29190610ad9565b9150806102ce81610aec565b91505061023d565b506127101490505b92915050565b606080858067ffffffffffffffff81111561030157610301610a39565b6040519080825280601f01601f19166020018201604052801561032b576020820181803683370190505b5092508067ffffffffffffffff81111561034757610347610a39565b60405190808252806020026020018201604052801561037a57816020015b60608152602001906001900390816103655790505b50915060005b878110156104c25760006127108a8a8481811061039f5761039f610a4f565b90506040020160200135896103b49190610b05565b6103be9190610b1c565b9050600060f81b8583815181106103d7576103d7610a4f565b60200101906001600160f81b031916908160001a9053506040518060e001604052808c6001600160a01b031681526020018b8b8581811061041a5761041a610a4f565b6104309260206040909202019081019150610b3e565b6001600160a01b03168152602001610bb862ffffff168152602001886001600160a01b0316815260200182815260200161046a838961074a565b81526000602091820152604051610482929101610a65565b6040516020818303038152906040528483815181106104a3576104a3610a4f565b60200260200101819052505080806104ba90610aec565b915050610380565b5050965096945050505050565b60608060006104df876001610ad9565b90508067ffffffffffffffff8111156104fa576104fa610a39565b6040519080825280601f01601f191660200182016040528015610524576020820181803683370190505b5092508067ffffffffffffffff81111561054057610540610a39565b60405190808252806020026020018201604052801561057357816020015b606081526020019060019003908161055e5790505b509150600b60f81b8360008151811061058e5761058e610a4f565b60200101906001600160f81b031916908160001a9053506040805160006020820152908101879052606001604051602081830303815290604052826000815181106105db576105db610a4f565b602002602001018190525060005b8781101561073e5760006127108a8a8481811061060857610608610a4f565b905060400201602001358961061d9190610b05565b6106279190610b1c565b9050600085610637846001610ad9565b8151811061064757610647610a4f565b60200101906001600160f81b031916908160001a9053506040518060e0016040528060006001600160a01b031681526020018b8b8581811061068b5761068b610a4f565b6106a19260206040909202019081019150610b3e565b6001600160a01b03168152602001610bb862ffffff168152602001886001600160a01b031681526020018281526020016106db838961074a565b815260006020918201526040516106f3929101610a65565b60408051601f198184030181529190528461070f846001610ad9565b8151811061071f5761071f610a4f565b602002602001018190525050808061073690610aec565b9150506105e9565b50509550959350505050565b60006127106107598382610b59565b6107639085610b05565b61076d9190610b1c565b9392505050565b80356001600160a01b038116811461078b57600080fd5b919050565b600080600080600060a086880312156107a857600080fd5b6107b186610774565b94506107bf60208701610774565b9350604086013592506107d460608701610774565b949793965091946080013592915050565b6000815180845260005b8181101561080b576020818501810151868301820152016107ef565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600061083e60408301856107e5565b6020838203818501528185518084528284019150828160051b85010183880160005b8381101561088e57601f1987840301855261087c8383516107e5565b94860194925090850190600101610860565b50909998505050505050505050565b60008083601f8401126108af57600080fd5b50813567ffffffffffffffff8111156108c757600080fd5b6020830191508360208260061b85010111156108e257600080fd5b9250929050565b600080602083850312156108fc57600080fd5b823567ffffffffffffffff81111561091357600080fd5b61091f8582860161089d565b90969095509350505050565b60008060008060008060a0878903121561094457600080fd5b61094d87610774565b9550602087013567ffffffffffffffff81111561096957600080fd5b61097589828a0161089d565b9096509450506040870135925061098e60608801610774565b9150608087013590509295509295509295565b6000806000806000608086880312156109b957600080fd5b853567ffffffffffffffff8111156109d057600080fd5b6109dc8882890161089d565b909650945050602086013592506109f560408701610774565b949793965091946060013592915050565b60008060408385031215610a1957600080fd5b610a2283610774565b9150610a3060208401610774565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c092830151169181019190915260e00190565b634e487b7160e01b600052601160045260246000fd5b808201808211156102de576102de610ac3565b600060018201610afe57610afe610ac3565b5060010190565b80820281158282048414176102de576102de610ac3565b600082610b3957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610b5057600080fd5b61076d82610774565b818103818111156102de576102de610ac356fea2646970667358221220fd95ba7afcbd5e44db22676be86eabed8297f437d9877ea3a326a73a92701a2364736f6c634300081400336101006040526101f46080908152610bb860a05261271060c052606460e0526200002e90600090600462000043565b503480156200003c57600080fd5b50620000fa565b600183019183908215620000d15791602002820160005b838211156200009e57835183826101000a81548162ffffff021916908362ffffff16021790555092602001926003016020816002010492830192600103026200005a565b8015620000cf5782816101000a81549062ffffff02191690556003016020816002010492830192600103026200009e565b505b50620000df929150620000e3565b5090565b5b80821115620000df5760008155600101620000e4565b611298806200010a6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638054b3c51161005b5780638054b3c514610122578063c90148ec14610146578063f124cf89146101a8578063f57ab16c146101bb57600080fd5b8063245c34d21461008d57806364d50d76146100b75780636b1b9b20146100da5780636f44dfa414610101575b600080fd5b6100a061009b366004610da9565b6101ce565b6040516100ae929190610e94565b60405180910390f35b6100ca6100c5366004610f06565b610656565b60405190151581526020016100ae565b6100ed6100e8366004610f47565b610672565b60405162ffffff90911681526020016100ae565b61011461010f366004610f60565b6106a1565b6040519081526020016100ae565b610135610130366004610f7d565b61071d565b6040516100ae959493929190610ffa565b610159610154366004610f7d565b6109df565b6040516100ae919081511515815260208083015115159082015260408083015162ffffff16908201526060808301516001600160a01b0316908201526080918201519181019190915260a00190565b6101146101b6366004610f60565b610ca8565b6100ed6101c9366004610f7d565b610d2f565b60608060006101de8860016110b7565b90508067ffffffffffffffff8111156101f9576101f96110ca565b6040519080825280601f01601f191660200182016040528015610223576020820181803683370190505b5092508067ffffffffffffffff81111561023f5761023f6110ca565b60405190808252806020026020018201604052801561027257816020015b606081526020019060019003908161025d5790505b509150600b60f81b8360008151811061028d5761028d6110e0565b60200101906001600160f81b031916908160001a905350604080516001600160a01b0388166020820152908101889052606001604051602081830303815290604052826000815181106102e2576102e26110e0565b602002602001018190525060005b888110156106495760006127108b8b8481811061030f5761030f6110e0565b905060400201602001358a61032491906110f6565b61032e919061110d565b9050600061035e878d8d86818110610348576103486110e0565b6101549260206040909202019081019150610f60565b90508060200151156104ca576000866103788560016110b7565b81518110610388576103886110e0565b60200101906001600160f81b031916908160001a9053506040518060e00160405280886001600160a01b031681526020018d8d868181106103cb576103cb6110e0565b6103e19260206040909202019081019150610f60565b6001600160a01b03168152602001826040015162ffffff1681526020018a6001600160a01b0316815260200183815260200161041d848b610d5c565b8152600060209182015260405161048e92910181516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c092830151169181019190915260e00190565b60408051601f19818403018152919052856104aa8560016110b7565b815181106104ba576104ba6110e0565b6020026020010181905250610634565b600160fb1b866104db8560016110b7565b815181106104eb576104eb6110e0565b60200101906001600160f81b031916908160001a9053506040805160028082526060820183526000926020830190803683370190505090508781600081518110610537576105376110e0565b60200260200101906001600160a01b031690816001600160a01b0316815250508c8c85818110610569576105696110e0565b61057f9260206040909202019081019150610f60565b81600181518110610592576105926110e0565b60200260200101906001600160a01b031690816001600160a01b0316815250506040518060a001604052808b6001600160a01b031681526020018481526020016105dc858c610d5c565b81526020808201849052600060409283015290516105fb92910161112f565b60408051601f19818403018152919052866106178660016110b7565b81518110610627576106276110e0565b6020026020010181905250505b5050808061064190611189565b9150506102f0565b5050965096945050505050565b60008061066385856109df565b60800151909211949350505050565b6000816004811061068257600080fd5b600a9182820401919006600302915054906101000a900462ffffff1681565b6000816001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106fd575060408051601f3d908101601f191682019092526106fa918101906111a2565b60015b61070957506000919050565b6001600160801b031692915050565b919050565b60408051600480825260a0820190925260609182918291600091829160208201608080368337505060408051600480825260a08201909252929750905060208201608080368337505060408051600480825260a0820190925292965090506020820160808036833701905050925060005b600481101561092e5760007333128a8fc17869897dce68ed026d694621f6fdfd631698ee828a8a8486600481106107c7576107c76110e0565b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff166044820152606401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085791906111cb565b90508087838151811061086c5761086c6110e0565b60200260200101906001600160a01b031690816001600160a01b0316815250506000826004811061089f5761089f6110e0565b600a91828204019190066003029054906101000a900462ffffff168683815181106108cc576108cc6110e0565b62ffffff909216602092830291909101909101526001600160a01b0381166108f55760006108fe565b6108fe816106a1565b858381518110610910576109106110e0565b6020908102919091010152508061092681611189565b91505061078e565b5060405163e6a4390560e01b81526001600160a01b03808916600483015287166024820152738909dc15e40173ff4699343b6eb8132c65e18ec69063e6a4390590604401602060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906111cb565b91506001600160a01b0382166109ca5760006109d3565b6109d382610ca8565b90509295509295909350565b6040805160a0808201835260008083526020808401829052838501829052606080850183905260808086018490528651948501875283855291840183905294830182905293820181905292810183905290915b6004811015610b8e5760007333128a8fc17869897dce68ed026d694621f6fdfd631698ee828787848660048110610a6b57610a6b6110e0565b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff166044820152606401602060405180830381865afa158015610ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afb91906111cb565b90506001600160a01b03811615610b7b576000610b17826106a1565b90508360800151811115610b79576001808552602085015260008360048110610b4257610b426110e0565b600a80820492909201549190066003026101000a900462ffffff1660408501526001600160a01b0382166060850152608084018190525b505b5080610b8681611189565b915050610a32565b5060405163e6a4390560e01b81526001600160a01b03808616600483015284166024820152600090738909dc15e40173ff4699343b6eb8132c65e18ec69063e6a4390590604401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1691906111cb565b90506001600160a01b03811615610c77576000610c3282610ca8565b905082608001516002610c4591906110f6565b811115610c75576001835260006020840181905260408401526001600160a01b0382166060840152608083018190525b505b8151610c9e5760018083526020830152610bb8604083015260006060830181905260808301525b5090505b92915050565b6000816001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa925050508015610d04575060408051601f3d908101601f19168201909252610d01918101906111ff565b60015b610d1057506000919050565b610d266001600160701b038084169085166110f6565b95945050505050565b600080610d3c84846109df565b90508060200151610d4e576000610d54565b80604001515b949350505050565b6000612710610d6b838261124f565b610d7590856110f6565b610d7f919061110d565b9392505050565b6001600160a01b0381168114610d9b57600080fd5b50565b803561071881610d86565b60008060008060008060a08789031215610dc257600080fd5b863567ffffffffffffffff80821115610dda57600080fd5b818901915089601f830112610dee57600080fd5b813581811115610dfd57600080fd5b8a60208260061b8501011115610e1257600080fd5b602092830198509650508701359350610e2d60408801610d9e565b925060608701359150610e4260808801610d9e565b90509295509295509295565b6000815180845260005b81811015610e7457602081850181015186830182015201610e58565b506000602082860101526020601f19601f83011685010191505092915050565b604081526000610ea76040830185610e4e565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015610ef757601f19878403018552610ee5838351610e4e565b94860194925090850190600101610ec9565b50909998505050505050505050565b600080600060608486031215610f1b57600080fd5b8335610f2681610d86565b92506020840135610f3681610d86565b929592945050506040919091013590565b600060208284031215610f5957600080fd5b5035919050565b600060208284031215610f7257600080fd5b8135610d7f81610d86565b60008060408385031215610f9057600080fd5b8235610f9b81610d86565b91506020830135610fab81610d86565b809150509250929050565b600081518084526020808501945080840160005b83811015610fef5781516001600160a01b031687529582019590820190600101610fca565b509495945050505050565b60a08152600061100d60a0830188610fb6565b82810360208481019190915287518083528882019282019060005b8181101561104957845162ffffff1683529383019391830191600101611028565b50508481036040860152875180825290820192508188019060005b8181101561108057825185529383019391830191600101611064565b505050506001600160a01b0394909416606083015250608001529392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca257610ca26110a1565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610ca257610ca26110a1565b60008261112a57634e487b7160e01b600052601260045260246000fd5b500490565b6020815260018060a01b03825116602082015260208201516040820152604082015160608201526000606083015160a0608084015261117160c0840182610fb6565b90506080840151151560a08401528091505092915050565b60006001820161119b5761119b6110a1565b5060010190565b6000602082840312156111b457600080fd5b81516001600160801b0381168114610d7f57600080fd5b6000602082840312156111dd57600080fd5b8151610d7f81610d86565b80516001600160701b038116811461071857600080fd5b60008060006060848603121561121457600080fd5b61121d846111e8565b925061122b602085016111e8565b9150604084015163ffffffff8116811461124457600080fd5b809150509250925092565b81810381811115610ca257610ca26110a156fea264697066735822122078a0e74577763519dea79b66fa9f5b28ee15826f38e0f366b30b915a759c9b1f64736f6c634300081400330000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad0000000000000000000000004200000000000000000000000000000000000006000000000000000000000000e33be189b01388d8224f4b1933e085868d7cb6db