0 txs
511 calls
constructor
constructor()
functions
feePercentageBuy
viewfunction feePercentageBuy() view returns (uint256)
feePercentageSell
viewfunction feePercentageSell() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
getAmountsIn
viewfunction getAmountsIn(address account, uint256 amountOut, address[] path) view returns (uint256[] amounts)
getAmountsIn
viewfunction getAmountsIn(uint256 amountOut, address[] path) view returns (uint256[] amounts)
getAmountsOut
viewfunction getAmountsOut(address account, uint256 amountIn, address[] path) view returns (uint256[] amounts)
getAmountsOut
viewfunction getAmountsOut(uint256 amountIn, address[] path) view returns (uint256[] amounts)
getFeeExactTokensForTokens
viewfunction getFeeExactTokensForTokens(address account, uint256 amountIn, address[] path) view returns (uint256 fee)
getFeePercentageBuy
viewfunction getFeePercentageBuy(address) view returns (uint256)
getFeePercentageSell
viewfunction getFeePercentageSell(address) view returns (uint256)
getFeeTokensForExactTokens
viewfunction getFeeTokensForExactTokens(address account, uint256 amountOut, address[] path) view returns (uint256 fee)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
router
viewfunction router() view returns (address)
token
viewfunction token() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
addLiquidity
nonpayablefunction addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline)
initialize
nonpayablefunction initialize(address newOwner, address newRouter, address newToken, address newFeeRecipient)
removeLiquidity
nonpayablefunction removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256, uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
swapETHForExactTokens
payablefunction swapETHForExactTokens(uint256 amountOut, address[] path, address to, uint256 deadline) payable returns (uint256[] amounts)
swapExactETHForTokens
payablefunction swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) payable returns (uint256[] amounts)
swapExactTokensForETH
nonpayablefunction swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
swapExactTokensForTokens
nonpayablefunction swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
swapTokensForExactETH
nonpayablefunction swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
swapTokensForExactTokens
nonpayablefunction swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateConfig
nonpayablefunction updateConfig(address newRouter, address newToken, address newFeeRecipient, uint256 newFeePercentageBuy, uint256 newFeePercentageSell)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AddLiquidity
event AddLiquidity(address indexed account, address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 liquidity, address indexed to)
Initialized
event Initialized(uint64 version)
InitSwapManager
event InitSwapManager(address owner, address router, address token, address feeRecipient, uint256 feePercentageBuy, uint256 feePercentageSell)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RemoveLiquidity
event RemoveLiquidity(address indexed account, address tokenA, address tokenB, uint256 liquidity, uint256 amountA, uint256 amountB, address indexed to)
Swap
event Swap(uint8 indexed swapType, address indexed account, address indexed to, address[] path, uint256 amountIn, uint256 amountOut, uint256 fee)
Updateconfig
event Updateconfig(address indexed router, address indexed token, address indexed feeRecipient, uint256 feePercentageBuy, uint256 feePercentageSell)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161386a62000104600039600081816124320152818161245b01526125d4015261386a6000f3fe6080604052600436106101dc5760003560e01c80637ff36ab511610102578063d06ca61f11610095578063f887ea4011610064578063f887ea4014610558578063f8c8765e14610578578063fb3bdb4114610598578063fc0c546a146105ab57600080fd5b8063d06ca61f146104e3578063e30c397814610503578063e8e3370014610518578063f2fde38b1461053857600080fd5b8063ab999042116100d1578063ab9990421461043a578063ad3cb1cc14610450578063baa2abde1461048e578063bb7b9c76146104c357600080fd5b80637ff36ab5146103d25780638803dbee146103e55780638da5cb5b14610405578063a77f33c91461041a57600080fd5b8063469048401161017a57806352d1902d1161014957806352d1902d146103715780635b6df26d14610386578063715018a6146103a857806379ba5097146103bd57600080fd5b806346904840146102e65780634a25d94a1461031e5780634f1ef2861461033e5780634f8e29431461035157600080fd5b806338ab33b3116101b657806338ab33b31461025e57806338ed17391461028e5780633a19ce63146102ae5780633a4ceedd146102d057600080fd5b806318cbafe5146101e8578063192128b21461021e5780631f00ca741461023e57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5061020861020336600461300d565b6105cb565b6040516102159190613080565b60405180910390f35b34801561022a57600080fd5b506102086102393660046130c4565b6108d8565b34801561024a57600080fd5b50610208610259366004613120565b610a62565b34801561026a57600080fd5b5061028061027936600461316c565b5060035490565b604051908152602001610215565b34801561029a57600080fd5b506102086102a936600461300d565b610a78565b3480156102ba57600080fd5b506102ce6102c9366004613189565b610d14565b005b3480156102dc57600080fd5b5061028060035481565b3480156102f257600080fd5b50600254610306906001600160a01b031681565b6040516001600160a01b039091168152602001610215565b34801561032a57600080fd5b5061020861033936600461300d565b610da6565b6102ce61034c36600461322b565b611013565b34801561035d57600080fd5b5061028061036c3660046130c4565b611032565b34801561037d57600080fd5b5061028061118f565b34801561039257600080fd5b506102806103a136600461316c565b5060045490565b3480156103b457600080fd5b506102ce6111ac565b3480156103c957600080fd5b506102ce6111c0565b6102086103e03660046132d3565b61120d565b3480156103f157600080fd5b5061020861040036600461300d565b61149e565b34801561041157600080fd5b5061030661173a565b34801561042657600080fd5b506102806104353660046130c4565b61176f565b34801561044657600080fd5b5061028060045481565b34801561045c57600080fd5b50610481604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610215919061335e565b34801561049a57600080fd5b506104ae6104a9366004613391565b6118c0565b60408051928352602083019190915201610215565b3480156104cf57600080fd5b506102086104de3660046130c4565b611963565b3480156104ef57600080fd5b506102086104fe366004613120565b611af8565b34801561050f57600080fd5b50610306611b06565b34801561052457600080fd5b506102ce610533366004613403565b611b2f565b34801561054457600080fd5b506102ce61055336600461316c565b611cfd565b34801561056457600080fd5b50600054610306906001600160a01b031681565b34801561058457600080fd5b506102ce61059336600461347f565b611d82565b6102086105a63660046132d3565b611fe1565b3480156105b757600080fd5b50600154610306906001600160a01b031681565b60603360006105ff878783816105e3576105e36134db565b90506020020160208101906105f8919061316c565b838b61223b565b6001546001600160a01b0316878760008161061c5761061c6134db565b9050602002016020810190610631919061316c565b6001600160a01b0316146106d157610649878761226f565b6000546040516318cbafe560e01b81526001600160a01b03909116906318cbafe590610683908c908c908c908c908c908c9060040161353a565b6000604051808303816000875af11580156106a2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ca9190810190613578565b92506107da565b6106dd828a8989611032565b6001549091506000906001600160a01b0316888883816106ff576106ff6134db565b9050602002016020810190610714919061316c565b6001600160a01b0316146107285789610732565b610732828b613634565b6000546040516318cbafe560e01b81529192506001600160a01b0316906318cbafe59061076d9084908d908d908d9030908d9060040161353a565b6000604051808303816000875af115801561078c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b49190810190613578565b93505080156107da576002546001546107da916001600160a01b0391821691168361231a565b6107e48247612379565b610846878760008181106107fa576107fa6134db565b905060200201602081019061080f919061316c565b888861081c600182613634565b81811061082b5761082b6134db565b9050602002016020810190610840919061316c565b876123c6565b846001600160a01b0316826001600160a01b0316600560ff166000805160206138158339815191528a8a88600081518110610883576108836134db565b60200260200101518960018b5161089a9190613634565b815181106108aa576108aa6134db565b6020026020010151886040516108c4959493929190613647565b60405180910390a450509695505050505050565b606060006108e88686868661176f565b6001549091506001600160a01b03168484600081610908576109086134db565b905060200201602081019061091d919061316c565b6001600160a01b0316036109d6576000546040516307c0329d60e21b81526001600160a01b0390911690631f00ca749061095f90889088908890600401613678565b600060405180830381865afa15801561097c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a49190810190613578565b915080826000815181106109ba576109ba6134db565b602002602001018181516109ce9190613692565b905250610a59565b6000546001600160a01b0316631f00ca746109f18388613692565b86866040518463ffffffff1660e01b8152600401610a1193929190613678565b600060405180830381865afa158015610a2e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a569190810190613578565b91505b50949350505050565b6060610a70338585856108d8565b949350505050565b6060336000610a90878783816105e3576105e36134db565b6001546001600160a01b03168787600081610aad57610aad6134db565b9050602002016020810190610ac2919061316c565b6001600160a01b031614158015610b205750600180546001600160a01b03169088908890610af09082613634565b818110610aff57610aff6134db565b9050602002016020810190610b14919061316c565b6001600160a01b031614155b15610bb757610b2f878761226f565b6000546040516338ed173960e01b81526001600160a01b03909116906338ed173990610b69908c908c908c908c908c908c9060040161353a565b6000604051808303816000875af1158015610b88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bb09190810190613578565b9250610cc1565b610bc3828a8989611032565b6001549091506000906001600160a01b031688888381610be557610be56134db565b9050602002016020810190610bfa919061316c565b6001600160a01b031614610c0e5789610c18565b610c18828b613634565b6000546040516338ed173960e01b81529192506001600160a01b0316906338ed173990610c539084908d908d908d9030908d9060040161353a565b6000604051808303816000875af1158015610c72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c9a9190810190613578565b93508115610cbf57600254600154610cbf916001600160a01b0391821691168461231a565b505b610cd7878760008181106107fa576107fa6134db565b846001600160a01b0316826001600160a01b0316600160ff166000805160206138158339815191528a8a88600081518110610883576108836134db565b610d1c6123f5565b600080546001600160a01b03199081166001600160a01b03888116918217909355600180548316888516908117909155600280549093169387169384179092556003859055600484905560408051868152602081018690527f1378eac846818423eb56d2c55f514250d915de435c3709b4c13c3607623506e1910160405180910390a45050505050565b6060336000610dda87878381610dbe57610dbe6134db565b9050602002016020810190610dd3919061316c565b838a61223b565b6001546001600160a01b03168787600081610df757610df76134db565b9050602002016020810190610e0c919061316c565b6001600160a01b031614610eac57610e24878761226f565b600054604051632512eca560e11b81526001600160a01b0390911690634a25d94a90610e5e908c908c908c908c908c908c9060040161353a565b6000604051808303816000875af1158015610e7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea59190810190613578565b9250610fb6565b610eb8828a898961176f565b6001549091506000906001600160a01b031688888381610eda57610eda6134db565b9050602002016020810190610eef919061316c565b6001600160a01b031614610f0c57610f07828b613692565b610f0e565b895b600054604051632512eca560e11b81529192506001600160a01b031690634a25d94a90610f499084908d908d908d9030908d9060040161353a565b6000604051808303816000875af1158015610f68573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f909190810190613578565b9350508015610fb657600254600154610fb6916001600160a01b0391821691168361231a565b610fc08247612379565b610fd6878760008181106107fa576107fa6134db565b846001600160a01b0316826001600160a01b0316600460ff166000805160206138158339815191528a8a88600081518110610883576108836134db565b61101b612427565b611024826124cc565b61102e82826124d4565b5050565b6001546000906001600160a01b031683838381611051576110516134db565b9050602002016020810190611066919061316c565b6001600160a01b03160361108d576110868461108160045490565b612591565b9050610a70565b600180546001600160a01b031690849084906110a99082613634565b8181106110b8576110b86134db565b90506020020160208101906110cd919061316c565b6001600160a01b031603610a70576000805460405163d06ca61f60e01b81526001600160a01b039091169063d06ca61f9061111090889088908890600401613678565b600060405180830381865afa15801561112d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111559190810190613578565b9050610a5681600183516111699190613634565b81518110611179576111796134db565b602002602001015161118a60035490565b6125b1565b60006111996125c9565b506000805160206137f583398151915290565b6111b46123f5565b6111be6000612612565b565b33806111ca611b06565b6001600160a01b0316146112015760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61120a81612612565b50565b60018054606091339134916000916001600160a01b031690899089906112339082613634565b818110611242576112426134db565b9050602002016020810190611257919061316c565b6001600160a01b0316146112f75761126f888861226f565b600054604051637ff36ab560e01b81526001600160a01b0390911690637ff36ab59084906112a9908d908d908d908d908d906004016136a5565b60006040518083038185885af11580156112c7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526112f09190810190613578565b93506113aa565b61130383838a8a611032565b600054604051637ff36ab560e01b81529192506001600160a01b031690637ff36ab590849061133e908d908d908d9030908d906004016136a5565b60006040518083038185885af115801561135c573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526113859190810190613578565b935080156113aa576002546001546113aa916001600160a01b0391821691168361231a565b61140c888860008181106113c0576113c06134db565b90506020020160208101906113d5919061316c565b89896113e2600182613634565b8181106113f1576113f16134db565b9050602002016020810190611406919061316c565b886123c6565b856001600160a01b0316836001600160a01b0316600360ff166000805160206138158339815191528b8b89600081518110611449576114496134db565b60200260200101518a60018c516114609190613634565b81518110611470576114706134db565b60200260200101518860405161148a959493929190613647565b60405180910390a450505095945050505050565b60603360006114b687878381610dbe57610dbe6134db565b6001546001600160a01b031687876000816114d3576114d36134db565b90506020020160208101906114e8919061316c565b6001600160a01b0316141580156115465750600180546001600160a01b031690889088906115169082613634565b818110611525576115256134db565b905060200201602081019061153a919061316c565b6001600160a01b031614155b156115dd57611555878761226f565b600054604051634401edf760e11b81526001600160a01b0390911690638803dbee9061158f908c908c908c908c908c908c9060040161353a565b6000604051808303816000875af11580156115ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115d69190810190613578565b92506116e7565b6115e9828a898961176f565b6001549091506000906001600160a01b03168888838161160b5761160b6134db565b9050602002016020810190611620919061316c565b6001600160a01b03161461163d57611638828b613692565b61163f565b895b600054604051634401edf760e11b81529192506001600160a01b031690638803dbee9061167a9084908d908d908d9030908d9060040161353a565b6000604051808303816000875af1158015611699573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116c19190810190613578565b93505080156116e7576002546001546116e7916001600160a01b0391821691168361231a565b6116fd878760008181106107fa576107fa6134db565b846001600160a01b0316826001600160a01b0316600260ff166000805160206138158339815191528a8a88600081518110610883576108836134db565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6001546000906001600160a01b03168383838161178e5761178e6134db565b90506020020160208101906117a3919061316c565b6001600160a01b03160361185c57600080546040516307c0329d60e21b81526001600160a01b0390911690631f00ca74906117e690889088908890600401613678565b600060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261182b9190810190613578565b905061185481600081518110611843576118436134db565b602002602001015161108160045490565b915050610a70565b600180546001600160a01b031690849084906118789082613634565b818110611887576118876134db565b905060200201602081019061189c919061316c565b6001600160a01b031603610a70576118b78461108160035490565b95945050505050565b600080336118d0818b8b8b61264a565b6000806118e28c8c8c8c8c308c61268e565b915091506118f1878d8d61273a565b604080516001600160a01b038e811682528d811660208301529181018c90526060810184905260808101839052818916918516907ff3602d60d3acd14349d65f95d1d39cd04c3a30f52fe437f1cdcc020e27ebc0339060a00160405180910390a3909b909a5098505050505050505050565b6060600061197386868686611032565b6001549091506001600160a01b03168484600081611993576119936134db565b90506020020160208101906119a8919061316c565b6001600160a01b031603611a3d576000546001600160a01b031663d06ca61f6119d18388613634565b86866040518463ffffffff1660e01b81526004016119f193929190613678565b600060405180830381865afa158015611a0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a369190810190613578565b9150610a59565b60005460405163d06ca61f60e01b81526001600160a01b039091169063d06ca61f90611a7190889088908890600401613678565b600060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab69190810190613578565b9150808260018451611ac89190613634565b81518110611ad857611ad86134db565b60200260200101818151611aec9190613634565b90525050949350505050565b6060610a7033858585611963565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061175f565b336000611b3c8a8a612770565b6001600160a01b031603611b845760405162461bcd60e51b815260206004820152600f60248201526e5a48545f524f555445525f4530303160881b60448201526064016111f8565b611b91818a8a8a8a61285e565b6000611ba38a8a8a8a8a8a308a6128bc565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015611bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1191906136dc565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015611c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7f91906136dc565b9050611c8c8c8c8861296f565b604080516001600160a01b038e811682528d81166020830152848d0382840152838c036060830152608082018690529151888316928716917fdf13c52ee038da0f0ed4620fd52576ab3cf2c3d15c46416aab6a8bff154046c2919081900360a00190a3505050505050505050505050565b611d056123f5565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255611d4961173a565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015611dc85750825b905060008267ffffffffffffffff166001148015611de55750303b155b905081158015611df3575080155b15611e115760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611e3b57845460ff60401b1916600160401b1785555b611e44896129b0565b611e4c6129c1565b611e546129c1565b876000806101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085600260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060646003819055506101f46004819055507f136f20b95e69961527a0c7e42ba1b29c7bf4d174001a422d77cb15c1714ba7b18960008054906101000a90046001600160a01b0316600160009054906101000a90046001600160a01b0316600260009054906101000a90046001600160a01b0316600354600454604051611f88969594939291906001600160a01b0396871681529486166020860152928516604085015293166060830152608082019290925260a081019190915260c00190565b60405180910390a18315611fd657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60018054606091339134916000916001600160a01b031690899089906120079082613634565b818110612016576120166134db565b905060200201602081019061202b919061316c565b6001600160a01b0316146120cb57612043888861226f565b60005460405163fb3bdb4160e01b81526001600160a01b039091169063fb3bdb4190849061207d908d908d908d908d908d906004016136a5565b60006040518083038185885af115801561209b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526120c49190810190613578565b93506121e8565b6120d7838a8a8a61176f565b6001549091506000906001600160a01b0316898983816120f9576120f96134db565b905060200201602081019061210e919061316c565b6001600160a01b03161461212b57612126828b613692565b61212d565b895b60005460405163fb3bdb4160e01b81529192506001600160a01b03169063fb3bdb419085906121689085908e908e9030908e906004016136a5565b60006040518083038185885af1158015612186573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526121af9190810190613578565b945081156121d4576002546001546121d4916001600160a01b0391821691168461231a565b4780156121e5576121e58582612379565b50505b6121fe888860008181106113c0576113c06134db565b856001600160a01b0316836001600160a01b0316600660ff166000805160206138158339815191528b8b89600081518110611449576114496134db565b6122506001600160a01b0384168330846129c9565b60005461226a906001600160a01b03858116911683612a02565b505050565b600061227c600183613634565b905060015b81811015612314576001546001600160a01b03168484838181106122a7576122a76134db565b90506020020160208101906122bc919061316c565b6001600160a01b0316036123045760405162461bcd60e51b815260206004820152600f60248201526e5a48545f524f555445525f4530303360881b60448201526064016111f8565b61230d816136f5565b9050612281565b50505050565b6040516001600160a01b0383811660248301526044820183905261226a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612a8e565b600080600080600085875af190508061226a5760405162461bcd60e51b815260206004820152600f60248201526e2d242a2fa927aaaa22a92fa298181960891b60448201526064016111f8565b6123d08382612af1565b6123da8282612af1565b6000805461226a916001600160a01b03868116921690612a02565b336123fe61173a565b6001600160a01b0316146111be5760405163118cdaa760e01b81523360048201526024016111f8565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806124ae57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124a26000805160206137f5833981519152546001600160a01b031690565b6001600160a01b031614155b156111be5760405163703e46dd60e11b815260040160405180910390fd5b61120a6123f5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561252e575060408051601f3d908101601f1916820190925261252b918101906136dc565b60015b61255657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111f8565b6000805160206137f5833981519152811461258757604051632a87526960e21b8152600481018290526024016111f8565b61226a8383612b7a565b60006127106125a0838561370e565b6125aa9190613725565b9392505050565b60006125bf82612710613692565b6125a0848461370e565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111be5760405163703e46dd60e11b815260040160405180910390fd5b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561102e82612bd0565b60006126568484612770565b905061266d6001600160a01b0382168630856129c9565b600054612687906001600160a01b03838116911684612a02565b5050505050565b60008054604051635d5155ef60e11b81526001600160a01b038a81166004830152898116602483015260448201899052606482018890526084820187905285811660a483015260c482018590528392169063baa2abde9060e40160408051808303816000875af1158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190613747565b909a909950975050505050505050565b60006127468383612770565b60008054919250612765916001600160a01b0380851692911690612a02565b612314838386612c41565b600080546040805163c45a015560e01b8152905183926001600160a01b03169163c45a01559160048083019260209291908290030181865afa1580156127ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127de919061376b565b60405163e6a4390560e01b81526001600160a01b03868116600483015285811660248301529192509082169063e6a4390590604401602060405180830381865afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612854919061376b565b9150505b92915050565b6128736001600160a01b0385168630856129c9565b6128886001600160a01b0384168630846129c9565b6000546128a2906001600160a01b03868116911684612a02565b600054612687906001600160a01b03858116911683612a02565b6000805460405162e8e33760e81b81526001600160a01b038b811660048301528a81166024830152604482018a9052606482018990526084820188905260a4820187905285811660c483015260e482018590529091169063e8e3370090610104016060604051808303816000875af115801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190613788565b9b9a5050505050505050505050565b6000805461298a916001600160a01b03868116921690612a02565b600080546129a5916001600160a01b03858116921690612a02565b61226a838383612c41565b6129b8612c6d565b61120a81612cb6565b6111be612c6d565b6040516001600160a01b0384811660248301528381166044830152606482018390526123149186918216906323b872dd90608401612347565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612a538482612ce8565b612314576040516001600160a01b03848116602483015260006044830152612a8891869182169063095ea7b390606401612347565b61231484825b6000612aa36001600160a01b03841683612d8b565b90508051600014158015612ac8575080806020019051810190612ac691906137b6565b155b1561226a57604051635274afe760e01b81526001600160a01b03841660048201526024016111f8565b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5e91906136dc565b90508015612314576123146001600160a01b038316848361231a565b612b8382612d99565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bc85761226a8282612dfe565b61102e612e6b565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000612c4d8484612770565b9050612c598483612af1565b612c638383612af1565b6123148183612af1565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166111be57604051631afcd79f60e31b815260040160405180910390fd5b612cbe612c6d565b6001600160a01b03811661120157604051631e4fbdf760e01b8152600060048201526024016111f8565b6000806000846001600160a01b031684604051612d0591906137d8565b6000604051808303816000865af19150503d8060008114612d42576040519150601f19603f3d011682016040523d82523d6000602084013e612d47565b606091505b5091509150818015612d71575080511580612d71575080806020019051810190612d7191906137b6565b80156118b75750505050506001600160a01b03163b151590565b60606125aa83836000612e8a565b806001600160a01b03163b600003612dcf57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111f8565b6000805160206137f583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e1b91906137d8565b600060405180830381855af49150503d8060008114612e56576040519150601f19603f3d011682016040523d82523d6000602084013e612e5b565b606091505b50915091506118b7858383612f27565b34156111be5760405163b398979f60e01b815260040160405180910390fd5b606081471015612eaf5760405163cd78605960e01b81523060048201526024016111f8565b600080856001600160a01b03168486604051612ecb91906137d8565b60006040518083038185875af1925050503d8060008114612f08576040519150601f19603f3d011682016040523d82523d6000602084013e612f0d565b606091505b5091509150612f1d868383612f27565b9695505050505050565b606082612f3c57612f3782612f83565b6125aa565b8151158015612f5357506001600160a01b0384163b155b15612f7c57604051639996b31560e01b81526001600160a01b03851660048201526024016111f8565b50806125aa565b805115612f935780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008083601f840112612fbe57600080fd5b50813567ffffffffffffffff811115612fd657600080fd5b6020830191508360208260051b8501011115612ff157600080fd5b9250929050565b6001600160a01b038116811461120a57600080fd5b60008060008060008060a0878903121561302657600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561304b57600080fd5b61305789828a01612fac565b909550935050606087013561306b81612ff8565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156130b85783518352928401929184019160010161309c565b50909695505050505050565b600080600080606085870312156130da57600080fd5b84356130e581612ff8565b935060208501359250604085013567ffffffffffffffff81111561310857600080fd5b61311487828801612fac565b95989497509550505050565b60008060006040848603121561313557600080fd5b83359250602084013567ffffffffffffffff81111561315357600080fd5b61315f86828701612fac565b9497909650939450505050565b60006020828403121561317e57600080fd5b81356125aa81612ff8565b600080600080600060a086880312156131a157600080fd5b85356131ac81612ff8565b945060208601356131bc81612ff8565b935060408601356131cc81612ff8565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613223576132236131e4565b604052919050565b6000806040838503121561323e57600080fd5b823561324981612ff8565b915060208381013567ffffffffffffffff8082111561326757600080fd5b818601915086601f83011261327b57600080fd5b81358181111561328d5761328d6131e4565b61329f601f8201601f191685016131fa565b915080825287848285010111156132b557600080fd5b80848401858401376000848284010152508093505050509250929050565b6000806000806000608086880312156132eb57600080fd5b85359450602086013567ffffffffffffffff81111561330957600080fd5b61331588828901612fac565b909550935050604086013561332981612ff8565b949793965091946060013592915050565b60005b8381101561335557818101518382015260200161333d565b50506000910152565b602081526000825180602084015261337d81604085016020870161333a565b601f01601f19169190910160400192915050565b600080600080600080600060e0888a0312156133ac57600080fd5b87356133b781612ff8565b965060208801356133c781612ff8565b955060408801359450606088013593506080880135925060a08801356133ec81612ff8565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b03121561342057600080fd5b883561342b81612ff8565b9750602089013561343b81612ff8565b965060408901359550606089013594506080890135935060a0890135925060c089013561346781612ff8565b8092505060e089013590509295985092959890939650565b6000806000806080858703121561349557600080fd5b84356134a081612ff8565b935060208501356134b081612ff8565b925060408501356134c081612ff8565b915060608501356134d081612ff8565b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b8183526000602080850194508260005b8581101561352f57813561351481612ff8565b6001600160a01b031687529582019590820190600101613501565b509495945050505050565b86815285602082015260a06040820152600061355a60a0830186886134f1565b6001600160a01b039490941660608301525060800152949350505050565b6000602080838503121561358b57600080fd5b825167ffffffffffffffff808211156135a357600080fd5b818501915085601f8301126135b757600080fd5b8151818111156135c9576135c96131e4565b8060051b91506135da8483016131fa565b81815291830184019184810190888411156135f457600080fd5b938501935b83851015613612578451825293850193908501906135f9565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156128585761285861361e565b60808152600061365b6080830187896134f1565b602083019590955250604081019290925260609091015292915050565b8381526040602082015260006118b76040830184866134f1565b808201808211156128585761285861361e565b8581526080602082015260006136bf6080830186886134f1565b6001600160a01b0394909416604083015250606001529392505050565b6000602082840312156136ee57600080fd5b5051919050565b6000600182016137075761370761361e565b5060010190565b80820281158282048414176128585761285861361e565b60008261374257634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561375a57600080fd5b505080516020909101519092909150565b60006020828403121561377d57600080fd5b81516125aa81612ff8565b60008060006060848603121561379d57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156137c857600080fd5b815180151581146125aa57600080fd5b600082516137ea81846020870161333a565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc42d0c8d67e402558455585b47715783192acf42d2bfc9d5cf1d0fbbd99fbdeada2646970667358221220526599349bc7f9e86b1550675d84a0075efc533f37a4b8e312b51f8b8352daac64736f6c63430008140033