UNPKG

@perp/curie-deployments

Version:

Perpetual Protocol Curie (v2) contract artifacts (ABIs) and deployed addresses

1,178 lines 120 kB
{ "_format": "hh-sol-artifact-1", "contractName": "ClearingHouse", "sourceName": "contracts/ClearingHouse.sol", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegateApproval", "type": "address" } ], "name": "DelegateApprovalChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseToken", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "fundingPayment", "type": "int256" } ], "name": "FundingPaymentSettled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "maker", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseToken", "type": "address" }, { "indexed": true, "internalType": "address", "name": "quoteToken", "type": "address" }, { "indexed": false, "internalType": "int24", "name": "lowerTick", "type": "int24" }, { "indexed": false, "internalType": "int24", "name": "upperTick", "type": "int24" }, { "indexed": false, "internalType": "int256", "name": "base", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "quote", "type": "int256" }, { "indexed": false, "internalType": "int128", "name": "liquidity", "type": "int128" }, { "indexed": false, "internalType": "uint256", "name": "quoteFee", "type": "uint256" } ], "name": "LiquidityChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseToken", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "exchangedPositionSize", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "exchangedPositionNotional", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" }, { "indexed": false, "internalType": "int256", "name": "openNotional", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "realizedPnl", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "sqrtPriceAfterX96", "type": "uint256" } ], "name": "PositionChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseToken", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "closedPositionSize", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "closedPositionNotional", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "openNotional", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "realizedPnl", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "closedPrice", "type": "uint256" } ], "name": "PositionClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "positionNotional", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "positionSize", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "liquidationFee", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "liquidator", "type": "address" } ], "name": "PositionLiquidated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "referralCode", "type": "bytes32" } ], "name": "ReferredPositionChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "TrustedForwarderChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "trustedForwarder", "type": "address" } ], "name": "TrustedForwarderUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" }, { "internalType": "int24", "name": "lowerTick", "type": "int24" }, { "internalType": "int24", "name": "upperTick", "type": "int24" }, { "internalType": "uint256", "name": "minBase", "type": "uint256" }, { "internalType": "uint256", "name": "minQuote", "type": "uint256" }, { "internalType": "bool", "name": "useTakerBalance", "type": "bool" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct IClearingHouse.AddLiquidityParams", "name": "params", "type": "tuple" } ], "name": "addLiquidity", "outputs": [ { "components": [ { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" }, { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "internalType": "struct IClearingHouse.AddLiquidityResponse", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "maker", "type": "address" }, { "internalType": "address", "name": "baseToken", "type": "address" } ], "name": "cancelAllExcessOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "maker", "type": "address" }, { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "bytes32[]", "name": "orderIds", "type": "bytes32[]" } ], "name": "cancelExcessOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "candidate", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, { "internalType": "uint256", "name": "oppositeAmountBound", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bytes32", "name": "referralCode", "type": "bytes32" } ], "internalType": "struct IClearingHouse.ClosePositionParams", "name": "params", "type": "tuple" } ], "name": "closePosition", "outputs": [ { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAccountBalance", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" } ], "name": "getAccountValue", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getClearingHouseConfig", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDelegateApproval", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getExchange", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getInsuranceFund", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOrderBook", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getQuoteToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTrustedForwarder", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUniswapV3Factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVault", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "clearingHouseConfigArg", "type": "address" }, { "internalType": "address", "name": "vaultArg", "type": "address" }, { "internalType": "address", "name": "quoteTokenArg", "type": "address" }, { "internalType": "address", "name": "uniV3FactoryArg", "type": "address" }, { "internalType": "address", "name": "exchangeArg", "type": "address" }, { "internalType": "address", "name": "accountBalanceArg", "type": "address" }, { "internalType": "address", "name": "insuranceFundArg", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "int256", "name": "positionSize", "type": "int256" } ], "name": "liquidate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "address", "name": "baseToken", "type": "address" } ], "name": "liquidate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "bool", "name": "isBaseToQuote", "type": "bool" }, { "internalType": "bool", "name": "isExactInput", "type": "bool" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "oppositeAmountBound", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, { "internalType": "bytes32", "name": "referralCode", "type": "bytes32" } ], "internalType": "struct IClearingHouse.OpenPositionParams", "name": "params", "type": "tuple" } ], "name": "openPosition", "outputs": [ { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "components": [ { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "bool", "name": "isBaseToQuote", "type": "bool" }, { "internalType": "bool", "name": "isExactInput", "type": "bool" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "oppositeAmountBound", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, { "internalType": "bytes32", "name": "referralCode", "type": "bytes32" } ], "internalType": "struct IClearingHouse.OpenPositionParams", "name": "params", "type": "tuple" } ], "name": "openPositionFor", "outputs": [ { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "address", "name": "baseToken", "type": "address" } ], "name": "quitMarket", "outputs": [ { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "baseToken", "type": "address" }, { "internalType": "int24", "name": "lowerTick", "type": "int24" }, { "internalType": "int24", "name": "upperTick", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "minBase", "type": "uint256" }, { "internalType": "uint256", "name": "minQuote", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct IClearingHouse.RemoveLiquidityParams", "name": "params", "type": "tuple" } ], "name": "removeLiquidity", "outputs": [ { "components": [ { "internalType": "uint256", "name": "base", "type": "uint256" }, { "internalType": "uint256", "name": "quote", "type": "uint256" }, { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "internalType": "struct IClearingHouse.RemoveLiquidityResponse", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegateApprovalArg", "type": "address" } ], "name": "setDelegateApproval", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" } ], "name": "settleAllFunding", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Owed", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Owed", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "versionRecipient", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50615b5280620000216000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806386b9d81f11610105578063c35eb28c1161009d578063c35eb28c1461038c578063cc3606dc146103ac578063cde109b6146103bf578063ce1b815f146103df578063d3487997146103e7578063e95c9741146103fa578063eb9b912e1461040d578063f807cd2214610420578063fa461e3314610428576101da565b806386b9d81f1461032e5780638d928af8146103415780638da5cb5b1461034957806392a25daf14610351578063aa2a829414610359578063b081983b14610361578063b248c4ef14610369578063b6b1b6c314610371578063bc5920ba14610384576101da565b8063572b6c0511610178578063572b6c05146102a05780635ae80951146102c05780635c975abb146102e057806365d461bd146102e85780636896fabf146102fb5780636c8381f814610303578063715018a61461030b57806380a98332146103135780638456cb5914610326576101da565b8062aa9a89146101df578062c2473e1461020957806313af40351461022b578063158626f71461024057806315beff131461025557806335876476146102685780633f4ba83a1461027b578063486ff0cd146102835780634a64d67d14610298575b600080fd5b6101f26101ed366004614ec6565b61043b565b604051610200929190615913565b60405180910390f35b61021c610217366004614ba0565b61067a565b60405161020093929190615921565b61023e6102393660046149cd565b610804565b005b61024861095f565b60405161020091906151dd565b61023e6102633660046149cd565b610970565b61023e610276366004614a3d565b610a46565b61023e610e5f565b61028b610ec6565b604051610200919061534d565b610248610ee5565b6102b36102ae3660046149cd565b610ef5565b60405161020091906152bb565b6102d36102ce3660046149cd565b610f0c565b60405161020091906152c6565b6102b3610fb0565b61023e6102f6366004614b60565b610fb9565b610248611065565b610248611075565b61023e611084565b61023e610321366004614ad2565b611125565b61023e611208565b61023e61033c366004614a05565b61126d565b610248611319565b610248611329565b610248611338565b610248611348565b610248611358565b610248611368565b6101f261037f366004614fc1565b611378565b61023e611460565b61039f61039a366004614e4a565b61154c565b60405161020091906157da565b61023e6103ba366004614a05565b611935565b6103d26103cd366004614fdd565b6119e1565b6040516102009190615895565b610248611ce3565b61023e6103f5366004614d62565b611cf2565b6101f2610408366004614a05565b611e54565b61023e61041b3660046149cd565b61209b565b6102486121bb565b61023e610436366004614d62565b6121cb565b600080610446610fb0565b1561048b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156104d1576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b60026001556060830135806104e4612355565b111561050b5760405162461bcd60e51b815260040161050290615648565b60405180910390fd5b61052061051b60208601866149cd565b612359565b600061052a6123e9565b90506105428161053d60208801886149cd565b6123f8565b50600061055b8261055660208901896149cd565b612557565b905060006105688261258a565b6040805160e081019091526001600160a01b03851681529091506000808413916105ee9060208082019061059e908d018d6149cd565b6001600160a01b03168152602001841515815260200184151581526020016001151581526020018581526020018b60200160208101906105de91906149cd565b6001600160a01b031690526125b3565b90506106526040518060a00160405280841515815260200184151581526020018360000151815260200183602001518152602001836101200151610636578b6040013561064b565b61014084015161064b9060408e01359061295b565b9052612970565b61065f8960800135612a43565b80516020909101516001805590999098509650505050505050565b6000806000610687610fb0565b156106cc576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610712576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b600260015560a084015180610725612355565b11156107435760405162461bcd60e51b815260040161050290615648565b610138546001600160a01b031663a08012a38761075e6123e9565b6040518363ffffffff1660e01b815260040161077b9291906151f1565b60206040518083038186803b15801561079357600080fd5b505afa1580156107a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cb9190614d12565b6107e75760405162461bcd60e51b8152600401610502906155ae565b6107f18686612a77565b6001805591989097509095509350505050565b61080c6123e9565b6001600160a01b031661081d611329565b6001600160a01b031614610861576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166108a5576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b03828116911614156108f1576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b038281169116141561093d576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b610137546001600160a01b03165b90565b6109786123e9565b6001600160a01b0316610989611329565b6001600160a01b0316146109cd576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6109df816001600160a01b0316612b89565b6109fb5760405162461bcd60e51b8152600401610502906156ec565b61013880546001600160a01b0319166001600160a01b0383169081179091556040517fc2a094a533bc4ad86b9c50f1641576f0e8ee311d765abfd05a8b2383c750689190600090a250565b600054610100900460ff1680610a5f5750610a5f612b8f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615a5c602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610afc876040518060400160405280600781526020016643485f56414e4360c81b815250612ba0565b610b25866040518060400160405280600781526020016643485f51414e4360c81b815250612ba0565b856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5e57600080fd5b505afa158015610b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9691906151bc565b60ff16601214610bb85760405162461bcd60e51b8152600401610502906153c1565b610be1856040518060400160405280600781526020016643485f55414e4360c81b815250612ba0565b610c0a886040518060400160405280600781526020016643485f43434e4360c81b815250612ba0565b610c33836040518060400160405280600781526020016643485f41424e4360c81b815250612ba0565b610c5b846040518060400160405280600681526020016543485f454e4360d01b815250612ba0565b610c85826040518060400160405280600881526020016743485f4946414e4360c01b815250612ba0565b6000846001600160a01b031663b248c4ef6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc057600080fd5b505afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf891906149e9565b9050610d23816040518060400160405280600781526020016643485f4f424e4360c81b815250612ba0565b610d2b612bd6565b610d33612c7f565b61013280546001600160a01b03199081166001600160a01b038c811691909117909255610133805482168b84161790819055610130805483168b8516179055610131805483168a85161790556101348054831689851617905561013580548316858516179055610136805483168885161790556101378054909216868416179091556040805163313ce56760e01b81529051919092169163313ce567916004808301926020929190829003018186803b158015610def57600080fd5b505afa158015610e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2791906151bc565b61013160146101000a81548160ff021916908360ff160217905550508015610e55576000805461ff00191690555b5050505050505050565b610e676123e9565b6001600160a01b0316610e78611329565b6001600160a01b031614610ebc576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ec4612d1c565b565b6040805180820190915260058152640322e302e360dc1b602082015290565b610130546001600160a01b031690565b60fd546001600160a01b038281169116145b919050565b6101315461013354604051635ae8095160e01b8152600092610faa92600160a01b90910460ff16916001600160a01b0390911690635ae8095190610f549087906004016151dd565b60206040518083038186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190614d4a565b90612dbc565b92915050565b60995460ff1690565b610fc1610fb0565b15611006576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561104c576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b600260015561105c838383612dd2565b50506001805550565b610136546001600160a01b031690565b6066546001600160a01b031690565b61108c6123e9565b6001600160a01b031661109d611329565b6001600160a01b0316146110e1576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b031690600080516020615a8a833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b61112d610fb0565b15611172576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156111b8576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b60026001819055506111fe84848484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506130f392505050565b5050600180555050565b6112106123e9565b6001600160a01b0316611221611329565b6001600160a01b031614611265576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ec461319e565b611275610fb0565b156112ba576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611300576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b600260015561131182826000612dd2565b505060018055565b610133546001600160a01b031690565b6065546001600160a01b031690565b610138546001600160a01b031690565b610132546001600160a01b031690565b610131546001600160a01b031690565b610135546001600160a01b031690565b600080611383610fb0565b156113c8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561140e576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b600260015560a083015180611421612355565b111561143f5760405162461bcd60e51b815260040161050290615648565b61145061144a6123e9565b85612a77565b5060018055909590945092505050565b6066546001600160a01b03166114a5576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6114ad6123e9565b6066546001600160a01b039081169116146114f8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b039283169290911690600080516020615a8a83398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b6115546147ab565b61155c610fb0565b156115a1576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156115e7576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b6002600155610100820135806115fb612355565b11156116195760405162461bcd60e51b815260040161050290615648565b61162961051b60208501856149cd565b610134546001600160a01b031663ff81801161164860208601866149cd565b6040518263ffffffff1660e01b815260040161166491906151dd565b60206040518083038186803b15801561167c57600080fd5b505afa158015611690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b49190614d12565b156116d15760405162461bcd60e51b8152600401610502906153a0565b6116e2610100840160e08501614cf6565b156116ff5760405162461bcd60e51b815260040161050290615529565b60006117096123e9565b90506117218161171c60208701876149cd565b613221565b60006117348261053d60208801886149cd565b610135546040805160e081019091526001600160a01b0385811682529293506000929091169063e8ab2fb390602080820190611772908b018b6149cd565b6001600160a01b0316815260200189602001358152602001896040013581526020018960600160208101906117a79190614d2e565b60020b81526020016117bf60a08b0160808c01614d2e565b60020b8152602001858152506040518263ffffffff1660e01b81526004016117e7919061576c565b608060405180830381600087803b15801561180157600080fd5b505af1158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190614e62565b905061185781600001518760a0013583602001518960c00135613282565b61186d8361186883604001516132ae565b6132fa565b6118768361332d565b6118ec8361188760208901896149cd565b610130546001600160a01b03166118a460808b0160608c01614d2e565b6118b460a08c0160808d01614d2e565b86516118bf906132ae565b6118cc88602001516132ae565b6118e289606001516001600160801b03166133a0565b89604001516133e3565b604051806080016040528082600001518152602001826020015181526020018260400151815260200182606001516001600160801b031681525094505050505060018055919050565b61193d610fb0565b15611982576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156119c8576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b600260015561131182826119dc828261344d565b6130f3565b6119e96147d3565b6119f1610fb0565b15611a36576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611a7c576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b600260015560c082013580611a8f612355565b1115611aad5760405162461bcd60e51b815260040161050290615648565b611aba60208401846149cd565b6001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b158015611af257600080fd5b505afa158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a9190614d12565b15611b475760405162461bcd60e51b81526004016105029061572d565b6000611b516123e9565b9050611b648161053d60208701876149cd565b506000611bf86040518060a00160405280846001600160a01b03168152602001876000016020810190611b9791906149cd565b6001600160a01b03168152602001876020016020810190611bb89190614d2e565b60020b8152602001611bd06060890160408a01614d2e565b60020b8152602001611be86080890160608a01615184565b6001600160801b031690526134d5565b9050611c168160000151866080013583602001518860a00135613282565b611c3d82611c2760208801886149cd565b8360600151846080015185604001516000613560565b611cb782611c4e60208801886149cd565b610130546001600160a01b0316611c6b60408a0160208b01614d2e565b611c7b60608b0160408c01614d2e565b8651611c8690613658565b611c938860200151613658565b6118e28d6060016020810190611ca99190615184565b6001600160801b031661366c565b604080516060810182528251815260208084015190820152918101519082015260018055949350505050565b60fd546001600160a01b031690565b610135546001600160a01b03163314611d1d5760405162461bcd60e51b815260040161050290615609565b6000611d2b82840184614f6a565b90508415611dbd57600081602001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa91906149e9565b9050611dbb81836020015188613680565b505b8315611e4d57600081602001516001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0257600080fd5b505afa158015611e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3a91906149e9565b9050611e4b81836020015187613680565b505b5050505050565b60008060026001541415611e9d576040805162461bcd60e51b815260206004820152601f60248201526000805160206159f4833981519152604482015290519081900360640190fd5b6002600181905550826001600160a01b031663c2b6b58c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ede57600080fd5b505afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614d12565b611f325760405162461bcd60e51b81526004016105029061574c565b611f3c84846123f8565b506000611f49858561344d565b805190915015611f5e57611f5e85858361371c565b6000611f6a868661395a565b905080611f7f5760008093509350505061208e565b61013654604051635f9d05ad60e01b81526000918291829182916001600160a01b0390911690635f9d05ad90611fbb908d908d906004016151f1565b608060405180830381600087803b158015611fd557600080fd5b505af1158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d9190614db2565b9350935093509350886001600160a01b03168a6001600160a01b03167f90195cdfd4796e4ab1175fced26945fa837ef5989e372fcd306856d8ad0ff23b8787878787604051612060959493929190615302565b60405180910390a36120718a6139de565b61207a8561258a565b6120838561258a565b975097505050505050505b6001805590939092509050565b610133546001600160a01b03166120b06123e9565b6001600160a01b031614806120dd5750806001600160a01b03166120d26123e9565b6001600160a01b0316145b6120f95760405162461bcd60e51b815260040161050290615463565b610136546040516357ba739b60e11b81526000916001600160a01b03169063af74e7369061212b9085906004016151dd565b60006040518083038186803b15801561214357600080fd5b505afa158015612157573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261217f9190810190614bd6565b805190915060005b818110156121b5576121ac8484838151811061219f57fe5b60200260200101516123f8565b50600101612187565b50505050565b610134546001600160a01b031690565b610134546001600160a01b031633146121f65760405162461bcd60e51b815260040161050290615403565b6000841380156122065750600083125b8061221c575060008412801561221c5750600083135b6122385760405162461bcd60e51b8152600401610502906154e8565b600061224682840184615056565b60408101519091506000808088136122cf57826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561229157600080fd5b505afa1580156122a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c991906149e9565b87612342565b826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561230857600080fd5b505afa15801561231c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234091906149e9565b885b91509150610e5582856040015183613680565b4290565b806001600160a01b03166347535d7b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561239257600080fd5b505afa1580156123a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ca9190614d12565b6123e65760405162461bcd60e51b815260040161050290615443565b50565b60006123f3613a3d565b905090565b6124006147f4565b61013454604051631e81ac3360e01b81526000916001600160a01b031690631e81ac339061243490879087906004016151f1565b606060405180830381600087803b15801561244e57600080fd5b505af1158015612462573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124869190614de7565b9250905080156124e95761249d8461186883613a6d565b826001600160a01b0316846001600160a01b03167f733330d4aad1a878654bf888817b79bc6478013399be29fa3b8845c81305249e836040516124e091906152c6565b60405180910390a35b610136548251604051632e4586c360e01b81526001600160a01b0390921691632e4586c39161251e918891889160040161520b565b600060405180830381600087803b15801561253857600080fd5b505af115801561254c573d6000803e3d6000fd5b505050505092915050565b600080612564848461395a565b9050806125835760405162461bcd60e51b81526004016105029061570d565b9392505050565b6000808212156125aa576125a56125a083613a6d565b613a99565b610faa565b610faa82613a99565b6125bb61480e565b610136548251602084015160405163165c4e2960e31b81526000936001600160a01b03169263b2e27148926125f2926004016151f1565b60206040518083038186803b15801561260a57600080fd5b505afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126429190614d4a565b610134546040805160e08101825286516001600160a01b0390811682526020808901518216908301528783015115158284015260608089015115159083015260808089015115159083015260a0808901519083015260c08089015182169083015291516310c5328760e21b81529394506000939190921691634314ca1c916126cd91906004016158b6565b61016060405180830381600087803b1580156126e857600080fd5b505af11580156126fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272091906150df565b6101375460a0820151919250612745916001600160a01b0390911690611868906132ae565b61277e84600001518560200151836040015161277261276786608001516132ae565b606087015190613af0565b8560c001516000613b55565b811561290657610136548451602086015160405163165c4e2960e31b81526000936001600160a01b03169263b2e27148926127bb926004016151f1565b60206040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280b9190614d4a565b905060006128198483613bca565b6040870151909150151560008512148015908190612835575081155b156128f35760006128d0886000015161013260009054906101000a90046001600160a01b03166001600160a01b031663a85494026040518163ffffffff1660e01b815260040160206040518083038186803b15801561289357600080fd5b505afa1580156128a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cb91906151a0565b613be8565b12156128ee5760405162461bcd60e51b8152600401610502906156a9565b6128fe565b86516128fe9061332d565b505050612911565b83516129119061332d565b600061292585600001518660200151613c1c565b905061295385600001518660200151846040015185606001518660800151868860c001518960e00151613c50565b509392505050565b6000612583838362ffffff16620f4240613caf565b608081015161297e576123e6565b8051156129e9578060200151156129bc578060800151816060015110156129b75760405162461bcd60e51b815260040161050290615688565b6129e4565b8060800151816040015111156129e45760405162461bcd60e51b815260040161050290615422565b6123e6565b806020015115612a1b578060800151816040015110156129e45760405162461bcd60e51b815260040161050290615667565b8060800151816060015111156123e65760405162461bcd60e51b8152600401610502906154a5565b80156123e65760405181907f09a07769667a46c2b89124a4d731c76fb5203061073aec16319ba9c6a79a324890600090a250565b6000806000612a898460000151612359565b612a97858560000151613221565b612aa58585600001516123f8565b506000612b196040518060e00160405280886001600160a01b0316815260200187600001516001600160a01b03168152602001876020015115158152602001876040015115158152602001600015158152602001876060015181526020018760c001516001600160a01b03168152506125b3565b9050612b626040518060a0016040528087602001511515815260200187604001511515815260200183600001518152602001836020015181526020018760800151815250612970565b612b6f8560e00151612a43565b805160208201516080909201519097919650945092505050565b3b151590565b6000612b9a30612b89565b15905090565b612bb2826001600160a01b0316612b89565b8190612bd15760405162461bcd60e51b8152600401610502919061534d565b505050565b600054610100900460ff1680612bef5750612bef612b8f565b80612bfd575060005460ff16155b612c385760405162461bcd60e51b815260040180806020018281038252602e815260200180615a5c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c63576000805460ff1961ff0019909116610100171660011790555b612c6b613d5e565b80156123e6576000805461ff001916905550565b600054610100900460ff1680612c985750612c98612b8f565b80612ca6575060005460ff16155b612ce15760405162461bcd60e51b815260040180806020018281038252602e815260200180615a5c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d0c576000805460ff1961ff0019909116610100171660011790555b612d14613e03565b612c6b613ef2565b612d24610fb0565b612d6c576040805162461bcd60e51b8152602060