0 txs
3.1k calls
constructor
constructor()
functions
accountExecutedLiquidityOrders
viewfunction accountExecutedLiquidityOrders(address, uint256) view returns (uint256 orderId, uint256 amount, uint256 minOut, uint256 actualAmountOut, uint256 executionFee, address account, uint48 createdTimestamp, uint48 executedTimestamp, address token, bool isAdd, bool isNativeOut, uint8 status)
getActiveLiquidityOrders
viewfunction getActiveLiquidityOrders(uint256 _limit, uint256 _offset) view returns (tuple[] _liquidityOrders)
getExecutedLiquidityOrders
viewfunction getExecutedLiquidityOrders(address _account, uint256 _limit, uint256 _offset) view returns (tuple[] _liquidityOrders)
getLiquidityOrderLength
viewfunction getLiquidityOrderLength() view returns (uint256)
getLiquidityOrders
viewfunction getLiquidityOrders() view returns (tuple[] _liquidityOrders)
hlpStaking
viewfunction hlpStaking() view returns (address)
liquidityOrders
viewfunction liquidityOrders(uint256) view returns (uint256 orderId, uint256 amount, uint256 minOut, uint256 actualAmountOut, uint256 executionFee, address account, uint48 createdTimestamp, uint48 executedTimestamp, address token, bool isAdd, bool isNativeOut, uint8 status)
liquidityService
viewfunction liquidityService() view returns (address)
maxExecutionChunk
viewfunction maxExecutionChunk() view returns (uint256)
minExecutionOrderFee
viewfunction minExecutionOrderFee() view returns (uint256)
nextExecutionOrderIndex
viewfunction nextExecutionOrderIndex() view returns (uint256)
orderExecutors
viewfunction orderExecutors(address) view returns (bool)
owner
viewfunction owner() view returns (address)
pyth
viewfunction pyth() view returns (address)
cancelLiquidityOrder
nonpayablefunction cancelLiquidityOrder(uint256 _orderIndex)
createAddLiquidityOrder
payablefunction createAddLiquidityOrder(address _tokenIn, uint256 _amountIn, uint256 _minOut, uint256 _executionFee, bool _shouldWrap, bool _isNotAutoStake) payable returns (uint256 _orderId)
createAddLiquidityOrder
payablefunction createAddLiquidityOrder(address _tokenIn, uint256 _amountIn, uint256 _minOut, uint256 _executionFee, bool _shouldWrap) payable returns (uint256 _orderId)
createRemoveLiquidityOrder
payablefunction createRemoveLiquidityOrder(address _tokenOut, uint256 _amountIn, uint256 _minOut, uint256 _executionFee, bool _isNativeOut) payable returns (uint256 _orderId)
executeLiquidity
nonpayablefunction executeLiquidity(tuple _order) returns (uint256 _amountOut)
executeOrder
nonpayablefunction executeOrder(uint256 _endIndex, address _feeReceiver, bytes32[] _priceData, bytes32[] _publishTimeData, uint256 _minPublishTime, bytes32 _encodedVaas)
initialize
nonpayablefunction initialize(address _liquidityService, address _pyth, uint256 _minExecutionOrderFee, uint256 _maxExecutionChunk)
renounceOwnership
nonpayablefunction renounceOwnership()
setHlpStaking
nonpayablefunction setHlpStaking(address _hlpStaking)
setLiquidityService
nonpayablefunction setLiquidityService(address _newLiquidityService)
setMaxExecutionChunk
nonpayablefunction setMaxExecutionChunk(uint256 _maxExecutionChunk)
setMinExecutionFee
nonpayablefunction setMinExecutionFee(uint256 _newMinExecutionFee)
setOrderExecutor
nonpayablefunction setOrderExecutor(address _executor, bool _isAllow)
setPyth
nonpayablefunction setPyth(address _pyth)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Initialized
event Initialized(uint8 version)
LogCancelLiquidityOrder
event LogCancelLiquidityOrder(address indexed account, uint256 indexed orderId, address indexed token, uint256 amount, uint256 minOut, bool isAdd)
LogCreateAddLiquidityOrder
event LogCreateAddLiquidityOrder(address indexed account, uint256 indexed orderId, address indexed tokenIn, uint256 amountIn, uint256 minOut, uint256 executionFee, uint48 createdTimestamp)
LogCreateRemoveLiquidityOrder
event LogCreateRemoveLiquidityOrder(address indexed account, uint256 indexed orderId, address indexed tokenOut, uint256 amountIn, uint256 minOut, uint256 executionFee, bool isNativeOut, uint48 createdTimestamp)
LogExecuteLiquidityOrder
event LogExecuteLiquidityOrder(address indexed account, uint256 indexed orderId, address indexed token, uint256 amount, uint256 minOut, bool isAdd, uint256 actualOut)
LogRefund
event LogRefund(address indexed account, uint256 indexed orderId, address indexed token, uint256 amount, bool isNativeOut)
LogSetHlpStaking
event LogSetHlpStaking(address oldHlpStaking, address newHlpStaking)
LogSetLiquidityService
event LogSetLiquidityService(address oldValue, address newValue)
LogSetMaxExecutionChunk
event LogSetMaxExecutionChunk(uint256 oldValue, uint256 newValue)
LogSetMinExecutionFee
event LogSetMinExecutionFee(uint256 oldValue, uint256 newValue)
LogSetOrderExecutor
event LogSetOrderExecutor(address executor, bool isAllow)
LogSetPyth
event LogSetPyth(address oldPyth, address newPyth)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
ILiquidityHandler_InCorrectValueTransfer
error ILiquidityHandler_InCorrectValueTransfer()
ILiquidityHandler_InsufficientExecutionFee
error ILiquidityHandler_InsufficientExecutionFee()
ILiquidityHandler_InsufficientRefund
error ILiquidityHandler_InsufficientRefund()
ILiquidityHandler_InvalidAddress
error ILiquidityHandler_InvalidAddress()
ILiquidityHandler_InvalidSender
error ILiquidityHandler_InvalidSender()
ILiquidityHandler_NoOrder
error ILiquidityHandler_NoOrder()
ILiquidityHandler_NotExecutionState
error ILiquidityHandler_NotExecutionState()
ILiquidityHandler_NotOrderOwner
error ILiquidityHandler_NotOrderOwner()
ILiquidityHandler_NotWhitelisted
error ILiquidityHandler_NotWhitelisted()
ILiquidityHandler_NotWNativeToken
error ILiquidityHandler_NotWNativeToken()
ILiquidityHandler_Unauthorized
error ILiquidityHandler_Unauthorized()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61419f80620000f46000396000f3fe6080604052600436106101565760003560e01c8063042a4083146101625780630f108862146101845780631aff5927146101c95780632b4dbd61146101f65780633200240a14610216578063361fcf93146102375780633973e6f81461024d5780633e420f1414610262578063715018a6146102825780637b1fa509146102975780638da5cb5b146102b7578063aeff599a146102cc578063b608e560146102ec578063bfa947561461030c578063c927682914610339578063d68d5ddc14610359578063d7a2360a1461036c578063d7c1c48814610382578063dc9282fe146103ba578063dd8b3767146103cd578063deb930a9146103e3578063e6320a4314610403578063eb990c5914610423578063ee22fd6f14610443578063f2fde38b14610463578063f355e97b14610483578063f98d06f0146104a3578063fc2cee62146104c3578063ff4c8bb4146104e357600080fd5b3661015d57005b600080fd5b34801561016e57600080fd5b5061018261017d366004613867565b6104f8565b005b34801561019057600080fd5b506101b461019f3660046138a0565b609d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101d557600080fd5b506097546101e9906001600160a01b031681565b6040516101c091906138ca565b34801561020257600080fd5b50609f546101e9906001600160a01b031681565b6102296102243660046138de565b610575565b6040519081526020016101c0565b34801561024357600080fd5b5061022960995481565b34801561025957600080fd5b50609c54610229565b34801561026e57600080fd5b5061018261027d3660046138a0565b61066c565b34801561028e57600080fd5b50610182610850565b3480156102a357600080fd5b506101826102b23660046138a0565b610864565b3480156102c357600080fd5b506101e9610968565b3480156102d857600080fd5b506101826102e7366004613934565b610977565b3480156102f857600080fd5b5061022961030736600461394d565b610be5565b34801561031857600080fd5b5061032c610327366004613966565b611074565b6040516101c09190613a88565b34801561034557600080fd5b50610182610354366004613b22565b61127e565b610229610367366004613bbc565b611866565b34801561037857600080fd5b50610229609a5481565b34801561038e57600080fd5b506103a261039d366004613934565b61195d565b6040516101c09c9b9a99989796959493929190613c23565b6102296103c83660046138de565b6119f1565b3480156103d957600080fd5b50610229609b5481565b3480156103ef57600080fd5b506103a26103fe366004613ca6565b611f86565b34801561040f57600080fd5b5061032c61041e366004613cd2565b612027565b34801561042f57600080fd5b5061018261043e366004613cf4565b612226565b34801561044f57600080fd5b5061018261045e3660046138a0565b61244e565b34801561046f57600080fd5b5061018261047e3660046138a0565b61254d565b34801561048f57600080fd5b5061018261049e366004613934565b6125c3565b3480156104af57600080fd5b506098546101e9906001600160a01b031681565b3480156104cf57600080fd5b506101826104de366004613934565b61261e565b3480156104ef57600080fd5b5061032c612679565b6105006127ab565b610508612804565b6001600160a01b0382166000818152609d6020908152604091829020805460ff19168515159081179091558251938452908301527f0fa0f88ea14998d9edad4236887127c5ba602446e256db317319795bc4a5258f910160405180910390a16105716001606555565b5050565b600061057f6127ab565b6097546040805163221d8bc360e11b8152905188926001600160a01b03169163443b17869160048083019260209291908290030181865afa1580156105c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ec9190613d3a565b6001600160a01b031663b782ce50826040518263ffffffff1660e01b815260040161061791906138ca565b60006040518083038186803b15801561062f57600080fd5b505afa158015610643573d6000803e3d6000fd5b505050506106568787878787600061286a565b9150506106636001606555565b95945050505050565b610674612804565b6001600160a01b03811661069b57604051638abd2e3b60e01b815260040160405180910390fd5b609f546040517fb93ca3c6bb87db62141b15d7ba7db9b019e1213395706c5d51ca706ba95dcca7916106da916001600160a01b03909116908490613d57565b60405180910390a1609f80546001600160a01b0319166001600160a01b0383169081179091556040805163993746b360e01b8152905163993746b3916004808201926020929091908290030181865afa15801561073b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075f9190613d71565b50609f546097546040805163221d8bc360e11b8152905161084d936001600160a01b03908116936000199391169163443b1786916004808201926020929091908290030181865afa1580156107b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dc9190613d3a565b6001600160a01b0316633a5684746040518163ffffffff1660e01b8152600401602060405180830381865afa158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d9190613d3a565b6001600160a01b03169190612ca2565b50565b610858612804565b6108626000612de1565b565b61086c6127ab565b610874612804565b6001600160a01b03811661089b57604051638abd2e3b60e01b815260040160405180910390fd5b6097546040517f1490cc5c2ec69bbb9edd606ba9498c49200ab092a20bc893800ac8c49b586c74916108da916001600160a01b03909116908490613d57565b60405180910390a1609780546001600160a01b0319166001600160a01b03831690811790915560408051623fa6b560e21b8152905162fe9ad4916004808201926020929091908290030181865afa158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d9190613d3a565b5061084d6001606555565b6033546001600160a01b031690565b61097f6127ab565b609c5481101580610991575060995481105b156109af5760405163cdc96f4f60e01b815260040160405180910390fd5b6000609c82815481106109c4576109c4613d8a565b6000918252602091829020604080516101808101825260079093029091018054835260018101549383019390935260028084015491830191909152600383015460608301526004830154608083015260058301546001600160a01b0380821660a085015265ffffffffffff600160a01b808404821660c0870152600160d01b9093041660e0850152600685015490811661010085015260ff91810482161515610120850152600160a81b810482161515610140850152929392610160850192600160b01b90910490911690811115610a9e57610a9e61399b565b6002811115610aaf57610aaf61399b565b815250509050609c8281548110610ac857610ac8613d8a565b60009182526020909120600790910201600501546001600160a01b03163314610b0457604051636c34374360e01b815260040160405180910390fd5b609c8281548110610b1757610b17613d8a565b60009182526020822060079091020181815560018101829055600281018290556003810182905560048101829055600581019190915560060180546001600160b81b0319169055610b6781612e33565b610b75816080015133612ff8565b61010081015181516020808401516040808601516101208701518251938452938301529115158183015290516001600160a01b039093169233917f6911fd3f36b399dd87b87022c3169605ae9ec09fb2f77ee8280e1d51a6e42f43919081900360600190a45061084d6001606555565b6000333014610c0757604051635fc850cb60e11b815260040160405180910390fd5b610c1961014083016101208401613da0565b15610f5e57609f546001600160a01b03161515600060a081610c4060c087018784016138a0565b6001600160a01b03908116825260208083019390935260409182016000908120883582528452829020546097548351623fa6b560e21b8152935160ff9092169550610cf99492169262fe9ad49260048083019391928290030181865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190613d3a565b6020860135610ce9610120880161010089016138a0565b6001600160a01b03169190613325565b6097546001600160a01b0316634b2fc7bb610d1a60c0870160a088016138a0565b610d2c610120880161010089016138a0565b876020013588604001358680610d40575087155b610d4a5730610d5a565b610d5a60c08b0160a08c016138a0565b60405160e087901b6001600160e01b03191681526001600160a01b039586166004820152938516602485015260448401929092526064830152909116608482015260a4016020604051808303816000875af1158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de19190613d71565b9250818015610dee575080155b15610f5757609f60009054906101000a90046001600160a01b03166001600160a01b031663309cd0eb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190613dbd565b15610ee557609f546001600160a01b031663218c4da8610e9060c0870160a088016138a0565b856040518363ffffffff1660e01b8152600401610eae929190613dda565b600060405180830381600087803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b50505050610f57565b609f546001600160a01b03166347e7ef24610f0660c0870160a088016138a0565b856040518363ffffffff1660e01b8152600401610f24929190613dda565b600060405180830381600087803b158015610f3e57600080fd5b505af1158015610f52573d6000803e3d6000fd5b505050505b5050919050565b6097546001600160a01b0316633ee7f9d3610f7f60c0850160a086016138a0565b610f91610120860161010087016138a0565b604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526020860135604483015285013560648201526084016020604051808303816000875af1158015610ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110179190613d71565b905061102b61016083016101408401613da0565b1561104e576110498161104460c0850160a086016138a0565b612ff8565b919050565b61104961106160c0840160a085016138a0565b82610ce9610120860161010087016138a0565b6001600160a01b0383166000908152609e602052604081205460609190818482116110a05760006110aa565b6110aa8583613e09565b90508581116110b957806110bb565b855b9250826000036110cd57505050611277565b5050806001600160401b038111156110e7576110e7613e1c565b60405190808252806020026020018201604052801561112057816020015b61110d6137e2565b8152602001906001900390816111055790505b50915060005b81811015611274576001600160a01b0386166000908152609e602052604090206111508286613e32565b8154811061116057611160613d8a565b6000918252602091829020604080516101808101825260079093029091018054835260018101549383019390935260028084015491830191909152600383015460608301526004830154608083015260058301546001600160a01b0380821660a085015265ffffffffffff600160a01b808404821660c0870152600160d01b9093041660e0850152600685015490811661010085015260ff91810482161515610120850152600160a81b810482161515610140850152929392610160850192600160b01b9091049091169081111561123a5761123a61399b565b600281111561124b5761124b61399b565b8152505083828151811061126157611261613d8a565b6020908102919091010152600101611126565b50505b9392505050565b6112866127ab565b336000908152609d602052604090205460ff166112b6576040516314e3b78d60e21b815260040160405180910390fd5b609954609c548082036112dc5760405163cdc96f4f60e01b815260040160405180910390fd5b60006112e9600183613e09565b9050808b11156112f757809a505b6001609b546113069190613e09565b611310848d613e09565b1115611333576001609b54846113269190613e32565b6113309190613e09565b9a505b609854604051633969cd1760e21b81526001600160a01b039091169063e5a7345c9061136d908c908c908c908c908c908c90600401613e77565b600060405180830381600087803b15801561138757600080fd5b505af115801561139b573d6000803e3d6000fd5b505050506113a76137e2565b600080855b8e811161183357609c81815481106113c6576113c6613d8a565b6000918252602091829020604080516101808101825260079093029091018054835260018101549383019390935260028084015491830191909152600383015460608301526004830154608083015260058301546001600160a01b0380821660a085015265ffffffffffff600160a01b808404821660c0870152600160d01b9093041660e0850152600685015490811661010085015260ff91810482161515610120850152600160a81b810482161515610140850152929392610160850192600160b01b909104909116908111156114a0576114a061399b565b60028111156114b1576114b161399b565b90525060208101519094501561182b5760808401516040516305b0472b60e51b8152909250309063b608e560906114ec908790600401613eb4565b6020604051808303816000875af1925050508015611527575060408051601f3d908101601f1916820190925261152491810190613d71565b60015b6115db57611533613ec3565b806308c379a0036115625750611547613f0b565b8061155257506115a1565b61155c8582613344565b5061166d565b634e487b71036115a157611574613f94565b9061157f57506115a1565b61155c8560405180606001604052806031815260200161413960319139613344565b3d8080156115cb576040519150601f19603f3d011682016040523d82523d6000602084013e6115d0565b606091505b5061155c8582613344565b8461010001516001600160a01b031685600001518660a001516001600160a01b03167ffa711156bb61fbc5825fcd4eb7ac15b3a65ef33b447806317f6da0e5729d9bfe886020015189604001518a6101200151876040516116579493929190938452602084019290925215156040830152606082015260800190565b60405180910390a4600161016086015260608501525b65ffffffffffff421660e08501526116858284613e32565b60a0850180516001600160a01b039081166000908152609e60209081526040808320805460018181018355918552938390208b51600790950201938455918a0151918301919091558801516002808301919091556060890151600383015560808901516004830155925160058201805460c08b015160e08c015165ffffffffffff908116600160d01b026001600160d01b0391909216600160a01b9081026001600160d01b03199094169588169590951792909217919091161790556101008901516006830180546101208c01516101408d01511515600160a81b0260ff60a81b199115159095026001600160a81b0319909216939096169290921791909117938416821781556101608a0151959850899592949293909260ff60b01b1990921661ffff60a81b199091161790600160b01b9084908111156117c9576117c961399b565b02179055505050609c81815481106117e3576117e3613d8a565b60009182526020822060079091020181815560018101829055600281018290556003810182905560048101829055600581019190915560060180546001600160b81b03191690555b6001016113ac565b5061183f8e6001613e32565b60995561184c828e612ff8565b50505050505061185c6001606555565b5050505050505050565b60006118706127ab565b6097546040805163221d8bc360e11b8152905189926001600160a01b03169163443b17869160048083019260209291908290030181865afa1580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd9190613d3a565b6001600160a01b031663b782ce50826040518263ffffffff1660e01b815260040161190891906138ca565b60006040518083038186803b15801561192057600080fd5b505afa158015611934573d6000803e3d6000fd5b5050505061194688888888888861286a565b9150506119536001606555565b9695505050505050565b609c818154811061196d57600080fd5b60009182526020909120600790910201805460018201546002830154600384015460048501546005860154600690960154949650929491939092916001600160a01b038082169265ffffffffffff600160a01b808504821694600160d01b90049091169282169160ff918104821691600160a81b8204811691600160b01b9004168c565b60006119fb6127ab565b6097546040805163221d8bc360e11b8152905188926001600160a01b03169163443b17869160048083019260209291908290030181865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a689190613d3a565b6001600160a01b031663b782ce50826040518263ffffffff1660e01b8152600401611a9391906138ca565b60006040518083038186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b5050609754604051632b4aa92760e01b8152600481018a90526001600160a01b039091169250632b4aa927915060240160006040518083038186803b158015611b0757600080fd5b505afa158015611b1b573d6000803e3d6000fd5b50505050609a54841015611b425760405163bb8e6e4b60e01b815260040160405180910390fd5b833414611b625760405163a2b8f78d60e01b815260040160405180910390fd5b828015611c585750609760009054906101000a90046001600160a01b03166001600160a01b031663443b17866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be19190613d3a565b6001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c429190613d3a565b6001600160a01b0316876001600160a01b031614155b15611c7657604051631003d64760e11b815260040160405180910390fd5b611c7e61335a565b611d6d333088609760009054906101000a90046001600160a01b03166001600160a01b031663443b17866040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb9190613d3a565b6001600160a01b0316633a5684746040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5c9190613d3a565b6001600160a01b0316929190613480565b609c80546040805161018081018252828152602081018a9052908101889052600060608201819052608082018890523360a083015265ffffffffffff421660c083015260e082018190526001600160a01b038b166101008301526101208201819052861515610140830152919450906101608201528154600181810184556000938452602093849020835160079093020191825592820151928101929092556040810151600280840191909155606082015160038401556080820151600484015560a082015160058401805460c085015160e086015165ffffffffffff908116600160d01b026001600160d01b0391909216600160a01b9081026001600160d01b03199094166001600160a01b03968716179390931716179091556101008401516006860180546101208701516101408801511515600160a81b0260ff60a81b199115159095026001600160a81b03199092169390951692909217919091179283168217815561016085015194959493909260ff60b01b1990921661ffff60a81b199092169190911790600160b01b908490811115611f0e57611f0e61399b565b0217905550506040805188815260208101889052908101869052841515606082015265ffffffffffff421660808201526001600160a01b0389169150839033907fd4b0d3313138f01ad96d170c472583225ddc4f94c4634f76fdf6cc96519f1c849060a00160405180910390a4506106636001606555565b609e6020528160005260406000208181548110611fa257600080fd5b60009182526020909120600790910201805460018201546002830154600384015460048501546005860154600690960154949750929550909390926001600160a01b038083169265ffffffffffff600160a01b808304821694600160d01b9093049091169282169160ff918104821691600160a81b8204811691600160b01b9004168c565b609954609c54606091600091829161203e91613e09565b9050600084821161205057600061205a565b61205a8583613e09565b9050858111612069578061206b565b855b92508260000361207d57505050612220565b5050806001600160401b0381111561209757612097613e1c565b6040519080825280602002602001820160405280156120d057816020015b6120bd6137e2565b8152602001906001900390816120b55790505b50915060005b8181101561221d57609c81856099546120ef9190613e32565b6120f99190613e32565b8154811061210957612109613d8a565b6000918252602091829020604080516101808101825260079093029091018054835260018101549383019390935260028084015491830191909152600383015460608301526004830154608083015260058301546001600160a01b0380821660a085015265ffffffffffff600160a01b808404821660c0870152600160d01b9093041660e0850152600685015490811661010085015260ff91810482161515610120850152600160a81b810482161515610140850152929392610160850192600160b01b909104909116908111156121e3576121e361399b565b60028111156121f4576121f461399b565b8152505083828151811061220a5761220a613d8a565b60209081029190910101526001016120d6565b50505b92915050565b600054610100900460ff16158080156122465750600054600160ff909116105b806122675750612255306134be565b158015612267575060005460ff166001145b6122cf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156122f2576000805461ff0019166101001790555b6122fa6134cd565b6123026134fc565b609780546001600160a01b038088166001600160a01b031992831681179093556098805491881691909216179055609a849055609b83905560408051631386c01b60e21b81529051634e1b006c916004808201926020929091908290030181865afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123999190613d3a565b50836001600160a01b031663e47e1c0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156123d8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124009190810190613fb4565b508015612447576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6124566127ab565b61245e612804565b6001600160a01b03811661248557604051638abd2e3b60e01b815260040160405180910390fd5b6098546040517f63994d6471b1b5b89403db00ddddc3b3dcafb0f8f2b8e0540a22093c4a3154d5916124c4916001600160a01b03909116908490613d57565b60405180910390a1609880546001600160a01b0319166001600160a01b0383169081179091556040805163e47e1c0b60e01b8152905163e47e1c0b916004808201926000929091908290030181865afa158015612525573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261095d9190810190613fb4565b612555612804565b6001600160a01b0381166125ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016122c6565b61084d81612de1565b6125cb6127ab565b6125d3612804565b609b5460408051918252602082018390527f13357af241b39f0dc567c5d59f6ca837de17e2bb4a68b938bfd5ad298329bc70910160405180910390a1609b81905561084d6001606555565b6126266127ab565b61262e612804565b609a5460408051918252602082018390527f58242c0b8ca9f907fac497175f9b977e74b86fc0c2962a50f3bc68fdee8a4db3910160405180910390a1609a81905561084d6001606555565b6060609c805480602002602001604051908101604052809291908181526020016000905b828210156127a25760008481526020908190206040805161018081018252600786029092018054835260018101549383019390935260028084015491830191909152600383015460608301526004830154608083015260058301546001600160a01b0380821660a085015265ffffffffffff600160a01b808404821660c0870152600160d01b9093041660e0850152600685015490811661010085015260ff91810482161515610120850152600160a81b810482161515610140850152929392610160850192600160b01b9091049091169081111561277e5761277e61399b565b600281111561278f5761278f61399b565b815250508152602001906001019061269d565b50505050905090565b6002606554036127fd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016122c6565b6002606555565b3361280d610968565b6001600160a01b0316146108625760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016122c6565b6001606555565b609754604051632b4aa92760e01b8152600481018790526000916001600160a01b031690632b4aa9279060240160006040518083038186803b1580156128af57600080fd5b505afa1580156128c3573d6000803e3d6000fd5b50505050609a548410156128ea5760405163bb8e6e4b60e01b815260040160405180910390fd5b8280156129e05750609760009054906101000a90046001600160a01b03166001600160a01b031663443b17866040518163ffffffff1660e01b8152600401602060405180830381865afa158015612945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129699190613d3a565b6001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ca9190613d3a565b6001600160a01b0316876001600160a01b031614155b156129fe57604051631003d64760e11b815260040160405180910390fd5b8215612a3257612a0e8487613e32565b3414612a2d5760405163a2b8f78d60e01b815260040160405180910390fd5b612a67565b833414612a525760405163a2b8f78d60e01b815260040160405180910390fd5b612a676001600160a01b038816333089613480565b612a6f61335a565b50609c8054604080516101808101825282815260208101899052908101879052600060608201819052608082018790523360a083015265ffffffffffff421660c083015260e082018190526001600160a01b038a1661010083015260016101208301528515156101408301529192916101608201528154600181810184556000938452602093849020835160079093020191825592820151928101929092556040810151600280840191909155606082015160038401556080820151600484015560a082015160058401805460c085015160e086015165ffffffffffff908116600160d01b026001600160d01b0391909216600160a01b9081026001600160d01b03199094166001600160a01b03968716179390931716179091556101008401516006860180546101208701516101408801511515600160a81b0260ff60a81b199115159095026001600160a81b03199092169390951692909217919091179283168217815561016085015194959493909260ff60b01b1990921661ffff60a81b199092169190911790600160b01b908490811115612c1057612c1061399b565b02179055505033600081815260a060209081526040808320868452825291829020805460ff191687151517905581518a815290810189905290810187905265ffffffffffff421660608201526001600160a01b038a1692508391907f8b32b562f0b7dd6072f7eac71dee2158e3a4ed9cf7be6346a594a575833a12ec9060800160405180910390a49695505050505050565b801580612d1b5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90612cd89030908690600401613d57565b602060405180830381865afa158015612cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d199190613d71565b155b612d865760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016122c6565b612ddc8363095ea7b360e01b8484604051602401612da5929190613dda565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261352b565b505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60208101516000819003612e45575050565b60a082015161012083015115612ed35782610140015115612e6f57612e6a8282612ff8565b612e89565b610100830151612e89906001600160a01b03168284613325565b61010083015183516101408501516040805186815291151560208301526001600160a01b0393841693851691600080516020614119833981519152910160405180910390a4505050565b6097546040805163221d8bc360e11b815290516000926001600160a01b03169163443b17869160048083019260209291908290030181865afa158015612f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f419190613d3a565b6001600160a01b0316633a5684746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa29190613d3a565b9050612fb86001600160a01b0382168385613325565b835160408051858152600060208201526001600160a01b03808516939290861691600080516020614119833981519152910160405180910390a450505050565b609760009054906101000a90046001600160a01b03166001600160a01b031663443b17866040518163ffffffff1660e01b8152600401602060405180830381865afa15801561304b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306f9190613d3a565b6001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d09190613d3a565b6001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b81526004016130fd91815260200190565b600060405180830381600087803b15801561311757600080fd5b505af115801561312b573d6000803e3d6000fd5b505050506000816001600160a01b0316836108fc90604051600060405180830381858888f193505050503d8060008114613181576040519150601f19603f3d011682016040523d82523d6000602084013e613186565b606091505b5050905080612ddc576097546040805163221d8bc360e11b815290516000926001600160a01b03169163443b17869160048083019260209291908290030181865afa1580156131d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fd9190613d3a565b6001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561323a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325e9190613d3a565b9050806001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561329b57600080fd5b505af11580156132af573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038516935063a9059cbb92506132e2915086908890600401613dda565b6020604051808303816000875af1158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124479190613dbd565b612ddc8363a9059cbb60e01b8484604051602401612da5929190613dda565b61334d82612e33565b5060026101609190910152565b609760009054906101000a90046001600160a01b03166001600160a01b031663443b17866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d19190613d3a565b6001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561340e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134329190613d3a565b6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561346c57600080fd5b505af1158015612447573d6000803e3d6000fd5b6040516001600160a01b03808516602483015283166044820152606481018290526134b89085906323b872dd60e01b90608401612da5565b50505050565b6001600160a01b03163b151590565b600054610100900460ff166134f45760405162461bcd60e51b81526004016122c69061405a565b6108626135fd565b600054610100900460ff166135235760405162461bcd60e51b81526004016122c69061405a565b61086261362d565b6000613580826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136549092919063ffffffff16565b805190915015612ddc578080602001905181019061359e9190613dbd565b612ddc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016122c6565b600054610100900460ff166136245760405162461bcd60e51b81526004016122c69061405a565b61086233612de1565b600054610100900460ff166128635760405162461bcd60e51b81526004016122c69061405a565b6060613663848460008561366b565b949350505050565b6060824710156136cc5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016122c6565b600080866001600160a01b031685876040516136e891906140c9565b60006040518083038185875af1925050503d8060008114613725576040519150601f19603f3d011682016040523d82523d6000602084013e61372a565b606091505b509150915061373b87838387613746565b979650505050505050565b606083156137b35782516000036137ac57613760856134be565b6137ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016122c6565b5081613663565b61366383838151156137c85781518083602001fd5b8060405162461bcd60e51b81526004016122c691906140e5565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290529061016082015290565b6001600160a01b038116811461084d57600080fd5b801515811461084d57600080fd5b6000806040838503121561387a57600080fd5b823561388581613844565b9150602083013561389581613859565b809150509250929050565b6000602082840312156138b257600080fd5b813561127781613844565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b600080600080600060a086880312156138f657600080fd5b853561390181613844565b9450602086013593506040860135925060608601359150608086013561392681613859565b809150509295509295909350565b60006020828403121561394657600080fd5b5035919050565b6000610180828403121561396057600080fd5b50919050565b60008060006060848603121561397b57600080fd5b833561398681613844565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b600381106139cf57634e487b7160e01b600052602160045260246000fd5b9052565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a0810151613a1160a08401826138bd565b5060c0810151613a2b60c084018265ffffffffffff169052565b5060e0810151613a4560e084018265ffffffffffff169052565b5061010080820151613a59828501826138bd565b50506101208181015115159083015261014080820151151590830152610160808201516134b8828501826139b1565b6020808252825182820181905260009190848201906040850190845b81811015613acb57613ab78385516139d3565b928401926101809290920191600101613aa4565b50909695505050505050565b60008083601f840112613ae957600080fd5b5081356001600160401b03811115613b0057600080fd5b6020830191508360208260051b8501011115613b1b57600080fd5b9250929050565b60008060008060008060008060c0898b031215613b3e57600080fd5b883597506020890135613b5081613844565b965060408901356001600160401b0380821115613b6c57600080fd5b613b788c838d01613ad7565b909850965060608b0135915080821115613b9157600080fd5b50613b9e8b828c01613ad7565b999c989b5096999598969760808701359660a0013595509350505050565b60008060008060008060c08789031215613bd557600080fd5b8635613be081613844565b95506020870135945060408701359350606087013592506080870135613c0581613859565b915060a0870135613c1581613859565b809150509295509295509295565b8c8152602081018c9052604081018b9052606081018a9052608081018990526001600160a01b0388811660a083015265ffffffffffff88811660c0840152871660e083015285166101008201528315156101208201528215156101408201526101808101613c956101608301846139b1565b9d9c50505050505050505050505050565b60008060408385031215613cb957600080fd5b8235613cc481613844565b946020939093013593505050565b60008060408385031215613ce557600080fd5b50508035926020909101359150565b60008060008060808587031215613d0a57600080fd5b8435613d1581613844565b93506020850135613d2581613844565b93969395505050506040820135916060013590565b600060208284031215613d4c57600080fd5b815161127781613844565b6001600160a01b0392831681529116602082015260400190565b600060208284031215613d8357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613db257600080fd5b813561127781613859565b600060208284031215613dcf57600080fd5b815161127781613859565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561222057612220613df3565b634e487b7160e01b600052604160045260246000fd5b8082018082111561222057612220613df3565b81835260006001600160fb1b03831115613e5e57600080fd5b8260051b80836020870137939093016020019392505050565b608081526000613e8b60808301888a613e45565b8281036020840152613e9e818789613e45565b6040840195909552505060600152949350505050565b610180810161222082846139d3565b600060033d1115613edc5760046000803e5060005160e01c5b90565b601f8201601f191681016001600160401b0381118282101715613f0457613f04613e1c565b6040525050565b600060443d1015613f195790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715613f4857505050505090565b8285019150815181811115613f605750505050505090565b843d8701016020828501011115613f7a5750505050505090565b613f8960208286010187613edf565b509095945050505050565b60008060233d1115613fb0576020600460003e50506000516001905b9091565b60006020808385031215613fc757600080fd5b82516001600160401b0380821115613fde57600080fd5b818501915085601f830112613ff257600080fd5b81518181111561400457614004613e1c565b8060051b915060405161401985840182613edf565b8181529183018401918481018884111561403257600080fd5b938501935b8385101561404e5784518152938501938501614037565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b838110156140c05781810151838201526020016140a8565b50506000910152565b600082516140db8184602087016140a5565b9190910192915050565b60208152600082518060208401526141048160408501602087016140a5565b601f01601f1916919091016040019291505056fe0d56ad568a5c8f967057d419ce761d7ea1d5d522804f3038ef27f8b7dd6d25b050616e6963206f63637572726564207768696c6520657865637574696e6720746865207769746864726177206f72646572a26469706673582212209c4e3443f67c847499459ebda63611bfa64d6951fab43200fc66ecd8469ac87564736f6c63430008120033