@muffinfi/muffin-contracts
Version:
Smart contracts of Muffin Protocol
1,536 lines • 133 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Manager",
"sourceName": "contracts/periphery/Manager.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_hub",
"type": "address"
},
{
"internalType": "address",
"name": "_WETH9",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "DeadlinePassed",
"type": "error"
},
{
"inputs": [],
"name": "FailedTransferETH",
"type": "error"
},
{
"inputs": [],
"name": "FailedTransferFrom",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "domainSeperator",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PERMIT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "WETH9",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount0Desired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1Desired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount0Min",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1Min",
"type": "uint256"
},
{
"internalType": "bool",
"name": "useAccount",
"type": "bool"
}
],
"internalType": "struct IPositionManager.AddLiquidityParams",
"name": "params",
"type": "tuple"
}
],
"name": "addLiquidity",
"outputs": [
{
"internalType": "uint96",
"name": "liquidityD8",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"internalType": "address",
"name": "token1",
"type": "address"
},
{
"internalType": "uint24",
"name": "sqrtGamma",
"type": "uint24"
},
{
"internalType": "bool",
"name": "useAccount",
"type": "bool"
},
{
"internalType": "uint8",
"name": "expectedTierId",
"type": "uint8"
}
],
"name": "addTier",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"internalType": "address",
"name": "token1",
"type": "address"
},
{
"internalType": "uint24",
"name": "sqrtGamma",
"type": "uint24"
},
{
"internalType": "uint128",
"name": "sqrtPrice",
"type": "uint128"
},
{
"internalType": "bool",
"name": "useAccount",
"type": "bool"
}
],
"name": "createPool",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "deposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "recipientAccRefId",
"type": "uint256"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "depositToExternal",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountOutMinimum",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "fromAccount",
"type": "bool"
},
{
"internalType": "bool",
"name": "toAccount",
"type": "bool"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "exactIn",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "tierChoices",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountOutMinimum",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "fromAccount",
"type": "bool"
},
{
"internalType": "bool",
"name": "toAccount",
"type": "bool"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "exactInSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "path",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountInMaximum",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "fromAccount",
"type": "bool"
},
{
"internalType": "bool",
"name": "toAccount",
"type": "bool"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "exactOut",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "tierChoices",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountInMaximum",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "fromAccount",
"type": "bool"
},
{
"internalType": "bool",
"name": "toAccount",
"type": "bool"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "exactOutSingle",
"outputs": [
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getPosition",
"outputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"internalType": "address",
"name": "token1",
"type": "address"
},
{
"internalType": "uint8",
"name": "tierId",
"type": "uint8"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"components": [
{
"internalType": "uint96",
"name": "liquidityD8",
"type": "uint96"
},
{
"internalType": "uint80",
"name": "feeGrowthInside0Last",
"type": "uint80"
},
{
"internalType": "uint80",
"name": "feeGrowthInside1Last",
"type": "uint80"
},
{
"internalType": "uint8",
"name": "limitOrderType",
"type": "uint8"
},
{
"internalType": "uint32",
"name": "settlementSnapshotId",
"type": "uint32"
}
],
"internalType": "struct Positions.Position",
"name": "position",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "hub",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "latestTokenId",
"outputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"internalType": "address",
"name": "token1",
"type": "address"
},
{
"internalType": "uint8",
"name": "tierId",
"type": "uint8"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
},
{
"internalType": "uint256",
"name": "amount0Desired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1Desired",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount0Min",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1Min",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "bool",
"name": "useAccount",
"type": "bool"
}
],
"internalType": "struct IPositionManager.MintParams",
"name": "params",
"type": "tuple"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint96",
"name": "liquidityD8",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "muffinDepositCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"internalType": "address",
"name": "token1",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "muffinMintCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "muffinSwapCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "multicall",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "pairIdsByPoolId",
"outputs": [
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint40",
"name": "",
"type": "uint40"
}
],
"name": "pairs",
"outputs": [
{
"internalType": "address",
"name": "token0",
"type": "address"
},
{
"internalType": "address",
"name": "token1",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "positionsByTokenId",
"outputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint40",
"name": "pairId",
"type": "uint40"
},
{
"internalType": "uint8",
"name": "tierId",
"type": "uint8"
},
{
"internalType": "int24",
"name": "tickLower",
"type": "int24"
},
{
"internalType": "int24",
"name": "tickUpper",
"type": "int24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "refundETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint96",
"name": "liquidityD8",
"type": "uint96"
},
{
"internalType": "uint256",
"name": "amount0Min",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1Min",
"type": "uint256"
},
{
"internalType": "address",
"name": "withdrawTo",
"type": "address"
},
{
"internalType": "bool",
"name": "collectAllFees",
"type": "bool"
},
{
"internalType": "bool",
"name": "settled",
"type": "bool"
}
],
"internalType": "struct IPositionManager.RemoveLiquidityParams",
"name": "params",
"type": "tuple"
}
],
"name": "removeLiquidity",
"outputs": [
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "feeAmount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "feeAmount1",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "selfPermit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "expiry",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "selfPermitAllowed",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "limitOrderType",
"type": "uint8"
}
],
"name": "setLimitOrderType",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "descriptor",
"type": "address"
}
],
"name": "setTokenDescriptor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "setter",
"type": "address"
}
],
"name": "setTokenDescriptorSetter",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenDescriptor",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenDescriptorSetter",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountMinimum",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "unwrapWETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60e0604052600a805464ffffffffff191660011790553480156200002257600080fd5b5060405162006313380380620063138339810160408190526200004591620001bb565b604080518082018252600f81526e26bab33334b7102837b9b4ba34b7b760891b60208083019182528351808501909452600a8452694d554646494e2d504f5360b01b908401526001600160a01b0380861660a0528416608052815191929183918391620000b591600091620000f8565b508051620000cb906001906020840190620000f8565b5050825160209093019290922060c0525050600680546001600160a01b0319163317905550620002309050565b8280546200010690620001f3565b90600052602060002090601f0160209004810192826200012a576000855562000175565b82601f106200014557805160ff191683800117855562000175565b8280016001018555821562000175579182015b828111156200017557825182559160200191906001019062000158565b506200018392915062000187565b5090565b5b8082111562000183576000815560010162000188565b80516001600160a01b0381168114620001b657600080fd5b919050565b60008060408385031215620001cf57600080fd5b620001da836200019e565b9150620001ea602084016200019e565b90509250929050565b600181811c908216806200020857607f821691505b602082108114156200022a57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c051615fe86200032b600039600081816105930152611cab01526000818161061e0152818161106a015281816112360152818161139d015281816114ea015281816117d50152818161188201528181611a3c01528181611b4401528181612308015281816124f60152818161269901528181612ae10152818161302d0152818161305e0152818161339d015281816134b90152818161358501528181613ec501528181613f6c015281816140200152818161412b0152614514015260008181610348015281816106a5015281816131210152818161321b01528181613de001528181613e260152613ef40152615fe86000f3fe6080604052600436106103385760003560e01c806370a08231116101b0578063b88d4fde116100ec578063e16d9ce511610095578063f0db800c1161006f578063f0db800c14610b97578063f1371dd514610bf8578063f3995c6714610c18578063f5a9817514610c2b57600080fd5b8063e16d9ce514610a75578063e985e9c514610a88578063eb02c30114610ad157600080fd5b8063ce3fa4dd116100c6578063ce3fa4dd14610a12578063d9899ff014610a4f578063d9caed1214610a6257600080fd5b8063b88d4fde146108ff578063c2814b0c1461091f578063c87b56dd146109f257600080fd5b806395d89b4111610159578063ac9650d811610133578063ac9650d81461088c578063ae4bf64b146108ac578063b6dc7ea3146108cc578063b80f55c9146108ec57600080fd5b806395d89b4114610844578063a22cb46514610859578063a73970cf1461087957600080fd5b80638137cdbf1161018a5780638137cdbf146108005780638340f549146108135780638c0e83491461082657600080fd5b806370a082311461078d5780637ac2ff7b146107ad5780637c2d10fd146107c057600080fd5b806330adf81f1161027f5780634aa4a4fc116102285780635a9d7a68116102025780635a9d7a681461071a5780635dd582041461073a5780636352211e1461074d578063641229d91461076d57600080fd5b80634aa4a4fc146106935780634f594557146106c75780635325261c146106e757600080fd5b80633d705707116102595780633d7057071461064057806342842e0e146106605780634659a4941461068057600080fd5b806330adf81f146105235780633644e51514610557578063365a86fc1461060c57600080fd5b806318160ddd116102e15780632809a659116102bb5780632809a659146104b35780632e85d3ae146104c65780632f8bc1ec146104d957600080fd5b806318160ddd1461046b57806323b872dd146104805780632513f7f2146104a057600080fd5b8063095ea7b311610312578063095ea7b31461040857806312210e8a14610428578063141a468c1461043057600080fd5b806301ffc9a71461037957806306fdde03146103ae578063081812fc146103d057600080fd5b3661037457336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037257600080fd5b005b600080fd5b34801561038557600080fd5b50610399610394366004614eb8565b610c3e565b60405190151581526020015b60405180910390f35b3480156103ba57600080fd5b506103c3610d23565b6040516103a59190614f2d565b3480156103dc57600080fd5b506103f06103eb366004614f40565b610db5565b6040516001600160a01b0390911681526020016103a5565b34801561041457600080fd5b50610372610423366004614f6e565b610e60565b610372610f92565b34801561043c57600080fd5b5061045d61044b366004614f40565b60076020526000908152604090205481565b6040519081526020016103a5565b34801561047757600080fd5b5061045d610fa4565b34801561048c57600080fd5b5061037261049b366004614f9a565b610fe1565b6103726104ae36600461500f565b611068565b61045d6104c1366004615080565b611228565b61045d6104d4366004615080565b61138f565b3480156104e557600080fd5b5061050d6104f4366004614f40565b600c6020526000908152604090205464ffffffffff1681565b60405164ffffffffff90911681526020016103a5565b34801561052f57600080fd5b5061045d7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b34801561056357600080fd5b5061045d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b34801561061857600080fd5b506103f07f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5061037261065b366004615161565b6114df565b34801561066c57600080fd5b5061037261067b366004614f9a565b61154f565b61037261068e3660046151ec565b61156a565b34801561069f57600080fd5b506103f07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106d357600080fd5b506103726106e2366004615248565b611618565b6106fa6106f5366004615265565b61165e565b6040805194855260208501939093529183015260608201526080016103a5565b34801561072657600080fd5b506005546103f0906001600160a01b031681565b610372610748366004615277565b6119f7565b34801561075957600080fd5b506103f0610768366004614f40565b611aae565b34801561077957600080fd5b506103726107883660046152bf565b611b39565b34801561079957600080fd5b5061045d6107a8366004615248565b611b90565b6103726107bb3660046151ec565b611c2a565b6107d36107ce36600461531b565b61208e565b604080519485526bffffffffffffffffffffffff90931660208501529183015260608201526080016103a5565b61037261080e36600461532e565b612306565b610372610821366004614f9a565b6124f4565b34801561083257600080fd5b506008546001600160801b031661045d565b34801561085057600080fd5b506103c3612599565b34801561086557600080fd5b50610372610874366004615391565b6125a8565b61045d6108873660046153ca565b61268b565b61089f61089a3660046154a8565b612853565b6040516103a591906154ea565b3480156108b857600080fd5b506006546103f0906001600160a01b031681565b3480156108d857600080fd5b506103726108e7366004615248565b612971565b6103726108fa3660046154a8565b6129b7565b34801561090b57600080fd5b5061037261091a3660046155d9565b612be1565b34801561092b57600080fd5b506109ae61093a366004614f40565b6009602052600090815260409020546001600160a01b0381169064ffffffffff740100000000000000000000000000000000000000008204169060ff79010000000000000000000000000000000000000000000000000082041690600160d01b8104600290810b91600160e81b9004900b85565b604080516001600160a01b03909616865264ffffffffff909416602086015260ff90921692840192909252600291820b6060840152900b608082015260a0016103a5565b3480156109fe57600080fd5b506103c3610a0d366004614f40565b612c69565b610a25610a20366004615688565b612d85565b604080516bffffffffffffffffffffffff90941684526020840192909252908201526060016103a5565b610372610a5d36600461569a565b612f36565b610372610a70366004614f9a565b61305c565b610372610a833660046156bf565b6130f0565b348015610a9457600080fd5b50610399610aa33660046156e4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b348015610add57600080fd5b50610af1610aec366004614f40565b613289565b604080516001600160a01b039889168152968816602080890191909152979095168686015260ff938416606080880191909152600293840b6080808901919091529290930b60a087015280516bffffffffffffffffffffffff1660c08701529586015169ffffffffffffffffffff90811660e087015293860151909316610100850152840151166101208301529091015163ffffffff16610140820152610160016103a5565b348015610ba357600080fd5b50610bd8610bb2366004615712565b600b60205260009081526040902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016103a5565b348015610c0457600080fd5b50610372610c13366004615161565b6134ae565b610372610c263660046151ec565b613507565b61045d610c393660046153ca565b613577565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610cd157507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610d1d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060008054610d3290615739565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5e90615739565b8015610dab5780601f10610d8057610100808354040283529160200191610dab565b820191906000526020600020905b815481529060010190602001808311610d8e57829003601f168201915b5050505050905090565b6000818152600960205260408120546001600160a01b0316610e445760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b6000610e6b82611aae565b9050806001600160a01b0316836001600160a01b03161415610ef55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610e3b565b336001600160a01b0382161480610f115750610f118133610aa3565b610f835760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610e3b565b610f8d8383613729565b505050565b4715610fa257610fa233476137a4565b565b600854600090610fd3906001600160801b03700100000000000000000000000000000000820481169116615784565b6001600160801b0316905090565b610feb33826137e9565b61105d5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610e3b565b610f8d8383836138f1565b7f000000000000000000000000000000000000000000000000000000000000000060006001600160a01b03821663aa5976c16110d78989604080516001600160a01b03938416602080830191909152929093168382015280518084038201815260609093019052815191012090565b6040518263ffffffff1660e01b81526004016110f591815260200190565b6040805180830381865afa158015611111573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113591906157ac565b50905060ff81166112145761114c87878686613ae7565b816001600160a01b031663775dfc828888888861116833613be0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015262ffffff90911660448401526001600160801b03166064830152608482015260a4016020604051808303816000875af11580156111ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121291906157db565b505b61121e8787613c3c565b5050505050505050565b60008161123481613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ec31fbc8c8c8c61126f8d613da8565b611278906157f4565b89611283578b611285565b305b8a61129157600061129a565b61129a8d613be0565b8c6112a65760006112af565b6112af33613be0565b60408051336020820152016040516020818303038152906040526040518963ffffffff1660e01b81526004016112ec98979695949392919061582d565b60408051808303816000875af115801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e9190615889565b509150868211156113815760405162461bcd60e51b815260206004820152601260248201527f544f4f5f4d5543485f52455155455354454400000000000000000000000000006044820152606401610e3b565b509998505050505050505050565b60008161139b81613d6b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ec31fbc8c8c8c6113d68d613da8565b896113e1578b6113e3565b305b8a6113ef5760006113f8565b6113f88d613be0565b8c61140457600061140d565b61140d33613be0565b60408051336020820152016040516020818303038152906040526040518963ffffffff1660e01b815260040161144a98979695949392919061582d565b60408051808303816000875af1158015611468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148c9190615889565b925050868210156113815760405162461bcd60e51b815260206004820152601360248201527f544f4f5f4c4954544c455f5245434549564544000000000000000000000000006044820152606401610e3b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461151457600080fd5b600061152282840184615248565b9050841561153557611535878287613dde565b831561154657611546868286613dde565b50505050505050565b610f8d83838360405180602001604052806000815250612be1565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b50505050505050505050565b6006546001600160a01b0316331461162f57600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000808080843561166e81613f91565b85356000908152600960209081526040808320805464ffffffffff740100000000000000000000000000000000000000008204168552600b84528285208351808501855281546001600160a01b039081168252600190920154821681870190815285516101208101875282518416815290519092168287015260ff79010000000000000000000000000000000000000000000000000084041682860152600160d01b8304600290810b6060840152600160e81b90930490920b608082015291949093909260a0830191611745918d01908d016158c7565b6bffffffffffffffffffffffff1681528a3560208201528454604090910190611776906001600160a01b0316613be0565b815260200161178b60c08c0160a08d016158e4565b1515905290506117a160e08a0160c08b016158e4565b611852576040517fdec980ec0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dec980ec9061180a908490600401615901565b6080604051808303816000875af1158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d91906159b4565b6118fa565b6040517fadcef3680000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063adcef368906118b7908490600401615901565b6080604051808303816000875af11580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa91906159b4565b929a50909850965094506040890135881080159061191c575088606001358710155b6119685760405162461bcd60e51b815260206004820152600e60248201527f507269636520736c6970706167650000000000000000000000000000000000006044820152606401610e3b565b600061197a60a08b0160808c01615248565b6001600160a01b0316146119ec576000611994878a6159ea565b905060006119a2878a6159ea565b905081156119c5576119c56119bd60a08d0160808e01615248565b85518461305c565b80156119e9576119e96119de60a08d0160808e01615248565b85602001518361305c565b50505b505050509193509193565b604080513360208083019190915282518083039091018152818301928390527faaa9acd2000000000000000000000000000000000000000000000000000000009092527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163aaa9acd291611a8091889188918891889190604401615a02565b600060405180830381600087803b158015611a9a57600080fd5b505af115801561121e573d6000803e3d6000fd5b6000818152600960205260408120546001600160a01b031680610d1d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610e3b565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b6e57600080fd5b8215611b8a57611b8a84611b8483850185615248565b85613dde565b50505050565b60006001600160a01b038216611c0e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610e3b565b506001600160a01b031660009081526002602052604090205490565b42841015611c7a5760405162461bcd60e51b815260206004820152600e60248201527f5065726d697420457870697265640000000000000000000000000000000000006044820152606401610e3b565b6000611d24604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c001604051602081830303815290604