UNPKG

test-contracts-sovryn

Version:

Smart contracts for the Sovryn protocol and external integrations.

1,711 lines 132 kB
{ "_format": "hh-sol-artifact-1", "contractName": "MockLoanTokenLogic", "sourceName": "contracts/mockup/MockLoanTokenLogic.sol", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "burner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "assetAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "address", "name": "loanToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "loanAmount", "type": "uint256" } ], "name": "FlashBorrow", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "assetAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "Mint", "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": "addresses", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "limits", "type": "uint256[]" } ], "name": "SetTransactionLimits", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "payable": false, "stateMutability": "nonpayable", "type": "fallback" }, { "constant": true, "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "assetBorrow", "type": "uint256" }, { "internalType": "uint256", "name": "assetSupply", "type": "uint256" } ], "name": "_supplyInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "assetBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "avgBorrowInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "baseRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "loanId", "type": "bytes32" }, { "internalType": "uint256", "name": "withdrawAmount", "type": "uint256" }, { "internalType": "uint256", "name": "initialLoanDuration", "type": "uint256" }, { "internalType": "uint256", "name": "collateralTokenSent", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" }, { "internalType": "address", "name": "borrower", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "borrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": true, "inputs": [], "name": "borrowInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "burnAmount", "type": "uint256" }, { "internalType": "bool", "name": "useLM", "type": "bool" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "redeemed", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "burnAmount", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "loanAmountPaid", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "string", "name": "funcId", "type": "string" } ], "name": "checkPause", "outputs": [ { "internalType": "bool", "name": "isPaused", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "leverageAmount", "type": "uint256" }, { "internalType": "uint256", "name": "loanTokenSent", "type": "uint256" }, { "internalType": "uint256", "name": "collateralTokenSent", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "minReturn", "type": "uint256" } ], "name": "checkPriceDivergence", "outputs": [], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "checkpointPrice", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "checkpointSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" }, { "internalType": "bool[]", "name": "isTorqueLoans", "type": "bool[]" } ], "name": "disableLoanParams", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "earlyAccessToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "depositAmount", "type": "uint256" }, { "internalType": "uint256", "name": "initialLoanDuration", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" } ], "name": "getBorrowAmountForDeposit", "outputs": [ { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" }, { "internalType": "uint256", "name": "initialLoanDuration", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" } ], "name": "getDepositAmountForBorrow", "outputs": [ { "internalType": "uint256", "name": "depositAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "leverageAmount", "type": "uint256" }, { "internalType": "uint256", "name": "loanTokenSent", "type": "uint256" }, { "internalType": "uint256", "name": "collateralTokenSent", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" } ], "name": "getEstimatedMarginDetails", "outputs": [ { "internalType": "uint256", "name": "principal", "type": "uint256" }, { "internalType": "uint256", "name": "collateral", "type": "uint256" }, { "internalType": "uint256", "name": "interestRate", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "leverageAmount", "type": "uint256" } ], "name": "getMaxEscrowAmount", "outputs": [ { "internalType": "uint256", "name": "maxEscrowAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "initialPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "kinkLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "liquidityMiningAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "loanParamsIds", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "loanTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "lowUtilBaseRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "lowUtilRateMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "loanId", "type": "bytes32" }, { "internalType": "uint256", "name": "leverageAmount", "type": "uint256" }, { "internalType": "uint256", "name": "loanTokenSent", "type": "uint256" }, { "internalType": "uint256", "name": "collateralTokenSent", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" }, { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "minReturn", "type": "uint256" }, { "internalType": "bytes", "name": "loanDataBytes", "type": "bytes" } ], "name": "marginTrade", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bytes32", "name": "loanId", "type": "bytes32" }, { "internalType": "uint256", "name": "leverageAmount", "type": "uint256" }, { "internalType": "uint256", "name": "loanTokenSent", "type": "uint256" }, { "internalType": "uint256", "name": "collateralTokenSent", "type": "uint256" }, { "internalType": "address", "name": "collateralTokenAddress", "type": "address" }, { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "minReturn", "type": "uint256" }, { "internalType": "address", "name": "affiliateReferrer", "type": "address" }, { "internalType": "bytes", "name": "loanDataBytes", "type": "bytes" } ], "name": "marginTradeAffiliate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": true, "inputs": [], "name": "marketLiquidity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "maxScaleRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "depositAmount", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "mintAmount", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "depositAmount", "type": "uint256" }, { "internalType": "bool", "name": "useLM", "type": "bool" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "minted", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "borrowAmount", "type": "uint256" } ], "name": "nextBorrowInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "supplyAmount", "type": "uint256" } ], "name": "nextSupplyInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "pauser", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "profitOf", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "rateMultiplier", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "setAdmin", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "referrer", "type": "address" } ], "name": "setAffiliatesReferrer", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_baseRate", "type": "uint256" }, { "internalType": "uint256", "name": "_rateMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "_lowUtilBaseRate", "type": "uint256" }, { "internalType": "uint256", "name": "_lowUtilRateMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "_targetLevel", "type": "uint256" }, { "internalType": "uint256", "name": "_kinkLevel", "type": "uint256" }, { "internalType": "uint256", "name": "_maxScaleRate", "type": "uint256" } ], "name": "setDemandCurve", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "LMAddress", "type": "address" } ], "name": "setLiquidityMiningAddress", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_pauser", "type": "address" } ], "name": "setPauser", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "setUserNotFirstTradeFlag", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "loanToken", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "minInitialMargin", "type": "uint256" }, { "internalType": "uint256", "name": "maintenanceMargin", "type": "uint256" }, { "internalType": "uint256", "name": "maxLoanTerm", "type": "uint256" } ], "internalType": "struct LoanParamsStruct.LoanParams[]", "name": "loanParamsList", "type": "tuple[]" }, { "internalType": "bool", "name": "areTorqueLoans", "type": "bool" } ], "name": "setupLoanParams", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "sovrynContractAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "supplyInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "targetLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "target_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "string", "name": "funcId", "type": "string" }, { "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "toggleFunctionPause", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "tokenPrice", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalAssetBorrow", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalAssetSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "assetSupply", "type": "uint256" } ], "name": "totalSupplyInterestRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "transactionLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "wrbtcTokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x6080604052600160009081556200001e6001600160e01b036200007216565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000076565b3390565b615c7a80620000866000396000f3fe6080604052600436106103ef5760003560e01c80637ff9b59611610208578063cb926cb311610118578063e41b07e3116100ab578063f06a9c6b1161007a578063f06a9c6b14610aee578063f2fde38b14610b0e578063f6b69f9914610b2e578063f851a44014610b41578063ffa1ad7414610b56576103ef565b8063e41b07e314610a79578063e697d2ee14610a99578063eebc508114610ab9578063ef2b0b3914610ad9576103ef565b8063d8f06c83116100e7578063d8f06c83146109f9578063d97206a414610a19578063dd62ed3e14610a39578063e3cded6114610a59576103ef565b8063cb926cb314610984578063d1a1beb4146109a4578063d65a5021146109c4578063d759dbeb146109e4576103ef565b80639bda3a981161019b578063b9fe1a8f1161016a578063b9fe1a8f146108fa578063ba0e43bf1461091a578063be1942171461092f578063c9ddf4481461094f578063ca37e6661461096f576103ef565b80639bda3a98146108905780639dc29fac146108a55780639fd0506d146108c5578063a9059cbb146108da576103ef565b80638ee6c4e6116101d75780638ee6c4e61461083c5780638f32d59b146108515780638fb807c51461086657806395d89b411461087b576103ef565b80637ff9b596146107dd578063829b38f4146107f25780638325a1c0146108125780638da5cb5b14610827576103ef565b8063313ce56711610303578063631a3ef8116102965780637288b344116102655780637288b3441461075e57806376fd4fdf1461077e578063797bf3851461079e5780637b7933b4146107b35780637e37c08c146107c8576103ef565b8063631a3ef8146106cf5780636b40cd40146106ef578063704b6c021461071e57806370a082311461073e576103ef565b806344a4a003116102d257806344a4a0031461067057806354198ce91461068557806356e07d70146106a5578063612ef80b146106ba576103ef565b8063313ce567146105f95780633291c11a1461061b578063330691ac1461063b57806340c10f1914610650576103ef565b806318498b1d1161038657806323b872dd1161035557806323b872dd1461057057806328a02f19146105905780632d88af4a146105b15780632ea295fa146105d15780632f6b600d146105e4576103ef565b806318498b1d1461050f5780631d0806ae146105315780631f68f20a1461054657806320f6d07c1461055b576103ef565b8063095ea7b3116103c2578063095ea7b31461049857806309ec6b6b146104c557806312416898146104da57806318160ddd146104fa576103ef565b806304797930146103fe57806306947a3a1461043457806306b3efd61461045657806306fdde0314610476575b3480156103fb57600080fd5b50005b34801561040a57600080fd5b5061041e610419366004614b9d565b610b6b565b60405161042b9190615814565b60405180910390f35b34801561044057600080fd5b50610449610d14565b60405161042b919061568b565b34801561046257600080fd5b5061041e610471366004614619565b610d23565b34801561048257600080fd5b5061048b610e0f565b60405161042b9190615893565b3480156104a457600080fd5b506104b86104b33660046146dc565b610e9a565b60405161042b9190615806565b3480156104d157600080fd5b5061041e610f05565b3480156104e657600080fd5b5061041e6104f5366004614b12565b610f1a565b34801561050657600080fd5b5061041e610f45565b34801561051b57600080fd5b5061052f61052a366004614c41565b610f4b565b005b34801561053d57600080fd5b5061041e610f8e565b34801561055257600080fd5b5061041e610f94565b34801561056757600080fd5b5061041e610f9a565b34801561057c57600080fd5b506104b861058b36600461468f565b611029565b6105a361059e366004614a1a565b6110f2565b60405161042b929190615a94565b3480156105bd57600080fd5b5061052f6105cc366004614619565b611317565b6105a36105df366004614873565b61135d565b3480156105f057600080fd5b5061044961163d565b34801561060557600080fd5b5061060e61164c565b60405161042b9190615abd565b34801561062757600080fd5b5061041e610636366004614b12565b611655565b34801561064757600080fd5b5061041e611667565b34801561065c57600080fd5b5061041e61066b3660046146dc565b61166d565b34801561067c57600080fd5b5061041e6116ae565b34801561069157600080fd5b5061041e6106a0366004614619565b6116c0565b3480156106b157600080fd5b5061041e611761565b3480156106c657600080fd5b5061041e611767565b3480156106db57600080fd5b5061041e6106ea366004614b9d565b611798565b3480156106fb57600080fd5b5061070f61070a366004614be0565b611938565b60405161042b93929190615aa2565b34801561072a57600080fd5b5061052f610739366004614619565b611a49565b34801561074a57600080fd5b5061041e610759366004614619565b611a8f565b34801561076a57600080fd5b5061041e610779366004614b4e565b611aaa565b34801561078a57600080fd5b5061041e61079936600461470c565b611b8d565b3480156107aa57600080fd5b50610449611c38565b3480156107bf57600080fd5b5061041e611c4c565b3480156107d457600080fd5b5061041e611c52565b3480156107e957600080fd5b5061041e611c58565b3480156107fe57600080fd5b5061041e61080d366004614b12565b611c96565b34801561081e57600080fd5b5061041e611d16565b34801561083357600080fd5b50610449611d22565b34801561084857600080fd5b50610449611d31565b34801561085d57600080fd5b506104b8611d40565b34801561087257600080fd5b5061041e611d66565b34801561088757600080fd5b5061048b611d96565b34801561089c57600080fd5b50610449611df1565b3480156108b157600080fd5b5061041e6108c03660046146dc565b611e00565b3480156108d157600080fd5b50610449611e74565b3480156108e657600080fd5b506104b86108f53660046146dc565b611e83565b34801561090657600080fd5b5061041e610915366004614b12565b611e93565b34801561092657600080fd5b5061041e611e9e565b34801561093b57600080fd5b506104b861094a366004614aa9565b611ea4565b34801561095b57600080fd5b5061052f61096a366004614655565b611f26565b34801561097b57600080fd5b50610449611f86565b34801561099057600080fd5b5061052f61099f366004614619565b611f95565b3480156109b057600080fd5b5061041e6109bf36600461470c565b611fdb565b3480156109d057600080fd5b5061041e6109df366004614b12565b612025565b3480156109f057600080fd5b5061041e612038565b348015610a0557600080fd5b5061052f610a143660046147f1565b61203e565b348015610a2557600080fd5b5061052f610a34366004614d3d565b61220d565b348015610a4557600080fd5b5061041e610a54366004614655565b612314565b348015610a6557600080fd5b5061052f610a74366004614add565b61233f565b348015610a8557600080fd5b5061041e610a94366004614619565b6123e4565b348015610aa557600080fd5b5061052f610ab436600461474f565b6123f6565b348015610ac557600080fd5b5061041e610ad4366004614619565b6125a7565b348015610ae557600080fd5b5061041e6125c2565b348015610afa57600080fd5b5061052f610b09366004614619565b6125c8565b348015610b1a57600080fd5b5061052f610b29366004614619565b612626565b6105a3610b3c36600461493a565b612656565b348015610b4d57600080fd5b50610449612726565b348015610b6257600080fd5b5061041e612735565b60008315610d0d576001600160a01b038216610b90576017546001600160a01b031691505b600060106000846001604051602001610baa929190615617565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b81529294506001600160a01b039182169363e762319f936101009091049092169187918a91869163ca74a5d991610c1b918a9101615814565b60206040518083038186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c6b9190810190614b30565b60016040518663ffffffff1660e01b8152600401610c8d959493929190615705565b60206040518083038186803b158015610ca557600080fd5b505afa158015610cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cdd9190810190614b30565b9150610cf182610ceb611d66565b8661273a565b9350610cff91506127b39050565b821115610d0b57600091505b505b9392505050565b6016546001600160a01b031681565b601c5460009081906001600160a01b031615610dbe57601c54604051636822955360e11b81526001600160a01b039091169063d0452aa690610d6b90309087906004016156a7565b60206040518083038186803b158015610d8357600080fd5b505afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dbb9190810190614b30565b90505b610e06670de0b6b3a7640000610dfa610dd5611c58565b610dee85610de289611a8f565b9063ffffffff6127e916565b9063ffffffff61280e16565b9063ffffffff61284816565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610e925780601f10610e6757610100808354040283529160200191610e92565b820191906000526020600020905b815481529060010190602001808311610e7557829003601f168201915b505050505081565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ef3908690615814565b60405180910390a35060015b92915050565b6000610f146104f5600061288a565b90505b90565b600080610f25610f9a565b90508015610f3f57610f378184611aaa565b915050610e0a565b50919050565b60155490565b6000610f5986868686611938565b5091505081811015610f865760405162461bcd60e51b8152600401610f7d906158a4565b60405180910390fd5b505050505050565b600e5481565b60055481565b6016546004805460405163250f447f60e11b81526000936001600160a01b0390811693634a1e88fe93610fd993309361010090920490911691016156a7565b60206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f149190810190614b30565b60165460405163115dd4b160e01b81526000916110ea918691869186916001600160a01b03169063115dd4b190611064903390600401615699565b60206040518083038186803b15801561107c57600080fd5b505afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110b49190810190614855565b6110e1576001600160a01b03881660009081526014602090815260408083203384529091529020546110e5565b6000195b6128c4565b949350505050565b6000806001600054146111175760405162461bcd60e51b8152600401610f7d90615a44565b6002600055611124612a97565b6111318989898988610f4b565b6001600160a01b03861661114e576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156111815760405162461bcd60e51b8152600401610f7d90615954565b8915806111965750336001600160a01b038616145b6111b25760405162461bcd60e51b8152600401610f7d90615a64565b6001600160a01b038616600090815260126020526040902054156111f5576001600160a01b0386166000908152601260205260409020548711156111f557600080fd5b60045461010090046001600160a01b0316600090815260126020526040902054156112465760045461010090046001600160a01b031660009081526012602052604090205488111561124657600080fd5b600061125387898b612b17565b9050806112725760405162461bcd60e51b8152600401610f7d90615984565b61127a614319565b611282614337565b3082526001600160a01b038816602080840182905260408401919091528101839052606081018b9052608081018a90526112ba612d44565b6112cb8c8260016020020151612dea565b825260208201526112ec6f4b3b4ca85a86c47a098a2240000000008d612848565b9b506112fe8d60008e8c86868c612e39565b6001600055909e909d509b505050505050505050505050565b61131f611d40565b61133b5760405162461bcd60e51b8152600401610f7d906159e4565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000806001600054146113825760405162461bcd60e51b8152600401610f7d90615a44565b6002600055886113a45760405162461bcd60e51b8152600401610f7d90615a74565b6113ac612a97565b6001600160a01b038616600090815260126020526040902054156113ef576001600160a01b0386166000908152601260205260409020548711156113ef57600080fd5b3415806113fb57508634145b801561140f57508615158061140f57508915155b801561143657506001600160a01b03861615158061142c57503415155b8061143657508915155b801561145257508915806114525750336001600160a01b038616145b61146e5760405162461bcd60e51b8152600401610f7d90615914565b6001600160a01b03861661148b576017546001600160a01b031695505b6004546001600160a01b038781166101009092041614156114be5760405162461bcd60e51b8152600401610f7d906158b4565b6114c6612d44565b6114ce614319565b6114d6614337565b3082526001600160a01b03878116602080850191909152908716604084015281018b905261150e8b611508600061288a565b8c61273a565b8360006020020184600260200201856001602002019290925291905252888160046020020181815250506116258c8c601660009054906101000a90046001600160a01b03166001600160a01b031663ca74a5d9601060008e6001604051602001611579929190615617565b6040516020818303038152906040528051906020012060001c8152602001908152602001600020546040518263ffffffff1660e01b81526004016115bd9190615814565b60206040518083038186803b1580156115d557600080fd5b505afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061160d9190810190614b30565b8b868660405180602001604052806000815250612e39565b6001600055909d909c509a5050505050505050505050565b6017546001600160a01b031681565b60045460ff1681565b60106020526000908152604090205481565b60065481565b60006001600054146116915760405162461bcd60e51b8152600401610f7d90615a44565b60026000556116a08383613098565b90505b600160005592915050565b6000610f146116bb610f9a565b6131a4565b600080827f37aa2b7d583612f016e4a4de4292cb015139b3d7762663d06a53964912ea2fb660001b6040516020016116f992919061563d565b604051602081830303815290604052805190602001209050610e068160136000866001600160a01b03166001600160a01b0316815260200190815260200160002054611743611c58565b6001600160a01b0387166000908152601160205260409020546131dc565b600a5481565b600080611774600061288a565b90506000611780610f9a565b9050808211156117935790039050610f17565b505090565b60008315610d0d5760006117ae85610ceb611d66565b925050506117ba6127b3565b8111610d0b576001600160a01b0383166117dd576017546001600160a01b031692505b6000601060008560016040516020016117f7929190615617565b60408051601f19818403018152918152815160209283012083529082019290925281016000205460165460048054935163ca74a5d960e01b815292945061192f93600a936001600160a01b03938416936325decac09361010090930416918a918991869163ca74a5d99161186d918c9101615814565b60206040518083038186803b15801561188557600080fd5b505afa158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118bd9190810190614b30565b60016040518663ffffffff1660e01b81526004016118df959493929190615705565b60206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610de29190810190614b30565b92505050