Loading
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AddressAlreadyMinted", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "AddressNotSigned", "type": "error" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InValdidTokenId", "type": "error" }, { "inputs": [], "name": "InsufficientTokenBalance", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidMerkleClaimData", "type": "error" }, { "inputs": [], "name": "InvalidMintSchedule", "type": "error" }, { "inputs": [], "name": "InvalidRoyaltyRecipient", "type": "error" }, { "inputs": [], "name": "NotArtCreator", "type": "error" }, { "inputs": [], "name": "NotEnded", "type": "error" }, { "inputs": [], "name": "NotInitialized", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "NotPhiFactory", "type": "error" }, { "inputs": [], "name": "NotStarted", "type": "error" }, { "inputs": [], "name": "OverMaxAllowedToMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "RoyaltyTooHigh", "type": "error" }, { "inputs": [], "name": "TokenNotTransferable", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "recipient", "type": "address" }, { "indexed": true, "internalType": "address", "name": "artistRewardReceiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "verifier", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "artId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "bytes32", "name": "data", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "snapshotImage", "type": "string" } ], "name": "ArtClaimedData", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "artId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ArtCreated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "credChainId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "credId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "verificationType", "type": "string" } ], "name": "InitializePhiNFT1155", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "snapshotImage", "type": "string" } ], "name": "MintComment", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "indexed": false, "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "configuration", "type": "tuple" } ], "name": "UpdatedRoyalties", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" }, { "internalType": "address", "name": "minter_", "type": "address" }, { "internalType": "address", "name": "ref_", "type": "address" }, { "internalType": "address", "name": "verifier_", "type": "address" }, { "internalType": "uint256", "name": "quantity_", "type": "uint256" }, { "internalType": "bytes32", "name": "data_", "type": "bytes32" }, { "internalType": "string", "name": "snapshotImage_", "type": "string" } ], "name": "claimFromFactory", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "artId_", "type": "uint256" } ], "name": "createArtFromFactory", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "credChainId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "credId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" } ], "name": "getArtDataFromFactory", "outputs": [ { "components": [ { "internalType": "uint256", "name": "credId", "type": "uint256" }, { "internalType": "address", "name": "credCreator", "type": "address" }, { "internalType": "uint256", "name": "credChainId", "type": "uint256" }, { "internalType": "string", "name": "verificationType", "type": "string" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "address", "name": "artAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "artist", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "royalties", "type": "tuple" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "mintFee", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "numberMinted", "type": "uint256" }, { "internalType": "bool", "name": "soulBounded", "type": "bool" } ], "internalType": "struct IPhiFactory.ArtData", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "getFactoryArtId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "address", "name": "minter_", "type": "address" } ], "name": "getMinterDataHistory", "outputs": [ { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPhiFactoryContract", "outputs": [ { "internalType": "contract IPhiFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getProtocolFeeDestination", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "artId_", "type": "uint256" } ], "name": "getTokenIdFromFactoryArtId", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "address", "name": "minter_", "type": "address" } ], "name": "getURIHistory", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "credChainId_", "type": "uint256" }, { "internalType": "uint256", "name": "credId_", "type": "uint256" }, { "internalType": "string", "name": "verificationType_", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "merkleClaim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "minted", "outputs": [ { "internalType": "bool", "name": "minted", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "minterDataHistory", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "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": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "phiFactoryContract", "outputs": [ { "internalType": "contract IPhiFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "royalties", "outputs": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256[]", "name": "ids_", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values_", "type": "uint256[]" }, { "internalType": "bytes", "name": "data_", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from_", "type": "address" }, { "internalType": "address", "name": "to_", "type": "address" }, { "internalType": "uint256", "name": "id_", "type": "uint256" }, { "internalType": "uint256", "name": "value_", "type": "uint256" }, { "internalType": "bytes", "name": "data_", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "signatureClaim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "snapshotImageHistory", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "soulBounded", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "tokenIdCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unPause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "royaltyBPS", "type": "uint32" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" } ], "internalType": "struct ICreatorRoyaltiesControl.RoyaltyConfiguration", "name": "configuration", "type": "tuple" } ], "name": "updateRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId_", "type": "uint256" }, { "internalType": "address", "name": "minter_", "type": "address" }, { "internalType": "uint256", "name": "index_", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "verificationType", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" } ]
60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614bb86100fd600039600081816125d5015281816125fe01526127810152614bb86000f3fe6080604052600436106103545760003560e01c80637f77f574116101bb578063ce852f9f116100f7578063e8a3d48511610095578063f2fde38b1161006f578063f2fde38b14610abb578063f50b31b714610adb578063f7b188a514610ae3578063feb3621814610af857600080fd5b8063e8a3d48514610a1e578063e985e9c514610a33578063f242432a14610a9b57600080fd5b8063dd762a5f116100d1578063dd762a5f146109c1578063e30c3978146109ee578063e4598fa614610a03578063e752c44a14610a1657600080fd5b8063ce852f9f1461096e578063d82109361461098e578063db968e08146109a357600080fd5b806395d89b4111610164578063ad3cb1cc1161013e578063ad3cb1cc1461087f578063bb3bafd6146108c8578063bd85b039146108f5578063c416a5691461094157600080fd5b806395d89b411461083457806398bdf6f514610849578063a22cb4651461085f57600080fd5b80638da5cb5b116101955780638da5cb5b146107ea5780638db462fc146107ff5780639070940d1461081457600080fd5b80637f77f5741461074b5780638456cb59146107b55780638a35ace3146107ca57600080fd5b806335196aba1161029557806354fd4d5011610233578063715018a61161020d578063715018a6146106d457806375e8c48d146106e957806379ba5097146106fe5780637ab9ffc91461071357600080fd5b806354fd4d50146106695780635c975abb1461067d5780636a6d8039146106b457600080fd5b80634e1273f41161026f5780634e1273f4146105c65780634f1ef286146105f35780634f558e791461060657806352d1902d1461065457600080fd5b806335196aba14610570578063387db2e7146105905780634977bc26146105b057600080fd5b80631585cc64116103025780631e7269c5116102dc5780631e7269c5146104bf57806322720318146104ef5780632a55205a1461050f5780632eb2c2d61461054e57600080fd5b80631585cc641461044b57806315e576371461047857806318160ddd1461048b57600080fd5b806303ce5e111161033357806303ce5e11146103e957806306fdde03146104165780630e89341c1461042b57600080fd5b8062fdd58e1461035957806301ffc9a71461038c5780630333ec92146103bc575b600080fd5b34801561036557600080fd5b50610379610374366004613844565b610b0e565b6040519081526020015b60405180910390f35b34801561039857600080fd5b506103ac6103a7366004613886565b610b57565b6040519015158152602001610383565b3480156103c857600080fd5b506103dc6103d73660046138a3565b610ba5565b6040516103839190613928565b3480156103f557600080fd5b5061037961040436600461393b565b60009081526009602052604090205490565b34801561042257600080fd5b506103dc610c6b565b34801561043757600080fd5b506103dc61044636600461393b565b610c78565b34801561045757600080fd5b5061037961046636600461393b565b6000908152600a602052604090205490565b610379610486366004613844565b610cfb565b34801561049757600080fd5b507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610379565b3480156104cb57600080fd5b506103ac6104da366004613954565b600b6020526000908152604090205460ff1681565b3480156104fb57600080fd5b506103ac61050a36600461393b565b610ef2565b34801561051b57600080fd5b5061052f61052a366004613971565b610f83565b604080516001600160a01b039093168352602083019190915201610383565b34801561055a57600080fd5b5061056e610569366004613b33565b610fc6565b005b34801561057c57600080fd5b5061037961058b3660046138a3565b6110d8565b34801561059c57600080fd5b506103dc6105ab366004613be1565b611116565b3480156105bc57600080fd5b5061037960045481565b3480156105d257600080fd5b506105e66105e1366004613c19565b6112f2565b6040516103839190613d17565b61056e610601366004613d2a565b6113bf565b34801561061257600080fd5b506103ac61062136600461393b565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526040902054151590565b34801561066057600080fd5b506103796113de565b34801561067557600080fd5b506001610379565b34801561068957600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166103ac565b3480156106c057600080fd5b506105e66106cf366004613d70565b61140d565b3480156106e057600080fd5b5061056e611482565b3480156106f557600080fd5b5061056e611496565b34801561070a57600080fd5b5061056e6114c1565b34801561071f57600080fd5b50600254610733906001600160a01b031681565b6040516001600160a01b039091168152602001610383565b34801561075757600080fd5b5061079161076636600461393b565b60006020819052908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610383565b3480156107c157600080fd5b5061056e611509565b3480156107d657600080fd5b506103796107e536600461393b565b611519565b3480156107f657600080fd5b506107336115aa565b34801561080b57600080fd5b506107336115df565b34801561082057600080fd5b5061056e61082f366004613da0565b61166b565b34801561084057600080fd5b506103dc6118ad565b34801561085557600080fd5b5061037960055481565b34801561086b57600080fd5b5061056e61087a366004613dfe565b6118ba565b34801561088b57600080fd5b506103dc6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156108d457600080fd5b506108e86108e336600461393b565b6118c5565b6040516103839190613e2c565b34801561090157600080fd5b5061037961091036600461393b565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604090205490565b34801561094d57600080fd5b5061096161095c366004613d70565b611987565b6040516103839190613e52565b34801561097a57600080fd5b5061056e610989366004613ec8565b611a7f565b34801561099a57600080fd5b506103dc611b81565b3480156109af57600080fd5b506002546001600160a01b0316610733565b3480156109cd57600080fd5b506109e16109dc36600461393b565b611b8e565b6040516103839190613f29565b3480156109fa57600080fd5b50610733611c91565b61056e610a11366004614076565b611cba565b61056e611f70565b348015610a2a57600080fd5b506103dc6120e7565b348015610a3f57600080fd5b506103ac610a4e366004614108565b6001600160a01b0391821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b348015610aa757600080fd5b5061056e610ab6366004614136565b61216f565b348015610ac757600080fd5b5061056e610ad6366004613954565b612246565b61056e6122cb565b348015610aef57600080fd5b5061056e612411565b348015610b0457600080fd5b5061037960035481565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610b6282612421565b80610b9657506001600160e01b031982167f27575fc900000000000000000000000000000000000000000000000000000000145b80610b515750610b5182612470565b600d6020528260005260406000206020528160005260406000208181548110610bcd57600080fd5b9060005260206000200160009250925050508054610bea9061419f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c169061419f565b8015610c635780601f10610c3857610100808354040283529160200191610c63565b820191906000526020600020905b815481529060010190602001808311610c4657829003601f168201915b505050505081565b60068054610bea9061419f565b6002546000828152600a602052604090819020549051633bb3a24d60e01b815260048101919091526060916001600160a01b031690633bb3a24d90602401600060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b519190810190614226565b6002546000906001600160a01b0316336001600160a01b031614610d32576040516304117f5560e01b815260040160405180910390fd5b610d3a6124f2565b6005546000838152600960209081526040808320849055928252600a815282822085905560025483517f818849e2000000000000000000000000000000000000000000000000000000008152935192936001600160a01b039091169263818849e2926004808401939192918290030181865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de2919061425b565b90506000600260009054906101000a90046001600160a01b03166001600160a01b0316634ce7957c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5d9190614284565b9050610e726001600160a01b0382168361254e565b6005546040805186815260208101929092527fbdcf05321b109dde965a4c49b2cf4ff68e47300539f1bea56ed319cd5e207448910160405180910390a160058054600181019091556000610ec684346142b7565b1115610ee957610ee9610ed984346142b7565b6001600160a01b0388169061254e565b95945050505050565b6002546000828152600a6020526040808220549051633a00e11560e21b815291926001600160a01b03169163e803845491610f339160040190815260200190565b600060405180830381865afa158015610f50573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f789190810190614317565b6101e0015192915050565b6000806000610f91856118c5565b905061271084826000015163ffffffff16610fac9190614477565b610fb6919061448e565b6020909101519590945092505050565b60005b835181101561102d576001600160a01b038616158015906110075750611007848281518110610ffa57610ffa6144b0565b6020026020010151610ef2565b156110255760405163647d843160e11b815260040160405180910390fd5b600101610fc9565b50336001600160a01b038616811480159061108d57506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156110c35760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b6110d0868686868661256a565b505050505050565b600c602052826000526040600020602052816000526040600020818154811061110057600080fd5b9060005260206000200160009250925050505481565b6001600160a01b0382166000908152600d602090815260408083208684529091528120546060918190036111d3576002546000868152600a602052604090819020549051633bb3a24d60e01b81526001600160a01b0390921691633bb3a24d916111869160040190815260200190565b600060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111cb9190810190614226565b9150506112eb565b8215806111df57508083115b156112bd576001600160a01b0384166000908152600d6020908152604080832088845290915290206112126001836142b7565b81548110611222576112226144b0565b9060005260206000200180546112379061419f565b80601f01602080910402602001604051908101604052809291908181526020018280546112639061419f565b80156112b05780601f10611285576101008083540402835291602001916112b0565b820191906000526020600020905b81548152906001019060200180831161129357829003601f168201915b50505050509150506112eb565b6001600160a01b0384166000908152600d6020908152604080832088845290915290206112126001856142b7565b9392505050565b606081518351146113235781518351604051635b05999160e01b8152600481019290925260248201526044016110ba565b6000835167ffffffffffffffff81111561133f5761133f613993565b604051908082528060200260200182016040528015611368578160200160208202803683370190505b50905060005b84518110156113b75760208082028601015161139290602080840287010151610b0e565b8282815181106113a4576113a46144b0565b602090810291909101015260010161136e565b509392505050565b6113c76125ca565b6113d082612681565b6113da8282612689565b5050565b60006113e8612776565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6001600160a01b0381166000908152600c6020908152604080832085845282529182902080548351818402810184019094528084526060939283018282801561147557602002820191906000526020600020905b815481526020019060010190808311611461575b5050505050905092915050565b61148a6127bf565b61149460006127f1565b565b6040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96290600090a1565b33806114cb611c91565b6001600160a01b0316146114fd5760405163118cdaa760e01b81526001600160a01b03821660048201526024016110ba565b611506816127f1565b50565b6115116127bf565b611494612829565b6002546000828152600a6020526040808220549051633a00e11560e21b815291926001600160a01b03169163e80384549161155a9160040190815260200190565b600060405180830381865afa158015611577573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261159f9190810190614317565b610160015192915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600254604080517f4ce7957c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634ce7957c9160048083019260209291908290030181865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190614284565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156116b65750825b905060008267ffffffffffffffff1660011480156116d35750303b155b9050811580156116e1575080155b15611718576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561174c57845468ff00000000000000001916680100000000000000001785555b6117553361289e565b61175d6128af565b6117656128bf565b600280546001600160a01b0319163317905561177f6128cf565b60016005556003889055600487905561179787612985565b6117a089612985565b6040516020016117b19291906144c6565b604051602081830303815290604052600690816117ce919061459f565b506117d887612985565b6117e189612985565b6040516020016117f292919061465f565b6040516020818303038152906040526007908161180f919061459f565b50600861181c878261459f565b507fce205ff9a7f4069eb0ad67eaf075a8f274d8a525bbf430788f8ef2ab66fcf197888888604051611850939291906146f0565b60405180910390a183156118a357845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60078054610bea9061419f565b6113da3383836129c9565b6040805180820190915260008082526020820152600154600160a01b900460ff1661191c576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902082518084019093525463ffffffff8116835264010000000090046001600160a01b0316908201819052156119605792915050565b5050604080518082019091526101f481526001546001600160a01b03166020820152919050565b6001600160a01b0381166000908152600d602090815260408083208584528252808320805482518185028101850190935280835260609492939192909184015b82821015611a735783829060005260206000200180546119e69061419f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a129061419f565b8015611a5f5780601f10611a3457610100808354040283529160200191611a5f565b820191906000526020600020905b815481529060010190602001808311611a4257829003601f168201915b5050505050815260200190600101906119c7565b50505050905092915050565b6000828152600a6020526040808220546002549151633a00e11560e21b815260048101829052859391926001600160a01b03169063e803845490602401600060405180830381865afa158015611ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b019190810190614317565b60e001519050336001600160a01b03821614801590611b395750611b236115aa565b6001600160a01b0316336001600160a01b031614155b15611b70576040517f5336652700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7a8585612a9d565b5050505050565b60088054610bea9061419f565b611c206040805161020081018252600080825260208083018290528284018290526060808401819052608084015260a0830182905260c0830182905260e083018290526101008301829052835180850190945281845283015290610120820190815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b600254604051633a00e11560e21b8152600481018490526001600160a01b039091169063e803845490602401600060405180830381865afa158015611c69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b519190810190614317565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006115cf565b611cc26124f2565b6002546001600160a01b0316336001600160a01b031614611cf6576040516304117f5560e01b815260040160405180910390fd5b60008781526009602052604081205490819003611d3f576040517f4ea0703b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d4c8782868587612bbb565b600254604051633a00e11560e21b8152600481018a90526000916001600160a01b03169063e803845490602401600060405180830381865afa158015611d96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dbe9190810190614317565b6101000151604080516001600160a01b03808c16602083015280841692820192909252818a166060820152908816608082015290915060009060a00160408051601f198184030181528282526002547fceedf7ce00000000000000000000000000000000000000000000000000000000845291519093506001600160a01b039091169163ceedf7ce9160048083019260209291908290030181865afa158015611e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8f9190614284565b6001600160a01b03166388580db7348c6004548a611eac89611519565b8746600354146040518863ffffffff1660e01b8152600401611ed39695949392919061470f565b6000604051808303818588803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b5050505050876001600160a01b0316826001600160a01b03168a6001600160a01b03167fc7a243c8799746087ada9ce701720f246641c69adef5d352deff2866ed03ef358a8e888c8c8c604051611f5c9695949392919061474f565b60405180910390a450505050505050505050565b6000808080808080808080611f883660048184614795565b810190611f9591906147ca565b99509950995099509950995099509950995099506000611fc1866000908152600a602052604090205490565b905060006040518060c001604052808581526020018b6001600160a01b03168152602001896001600160a01b03168152602001838152602001468152602001848152509050600081604051602001612019919061488b565b604051602081830303815290604052905060008d8d604051602001612048929190918252602082015260400190565b6040516020818303038152906040529050600061206d6002546001600160a01b031690565b9050806001600160a01b031663a0035a22348e868c878f6040518763ffffffff1660e01b81526004016120a49594939291906148e7565b6000604051808303818588803b1580156120bd57600080fd5b505af11580156120d1573d6000803e3d6000fd5b5050505050505050505050505050505050505050565b6002546040517e844d130000000000000000000000000000000000000000000000000000000081523060048201526060916001600160a01b03169062844d1390602401600060405180830381865afa158015612147573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116669190810190614226565b6001600160a01b0385161580159061218b575061218b83610ef2565b156121a95760405163647d843160e11b815260040160405180910390fd5b336001600160a01b038616811480159061220857506001600160a01b0380871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b156122395760405163711bec9160e11b81526001600160a01b038083166004830152871660248201526044016110ba565b6110d08686868686612c9e565b61224e6127bf565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556122926115aa565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60008080808080808080806122e33660048184614795565b8101906122f09190614939565b9950995099509950995099509950995099509950600061231c866000908152600a602052604090205490565b90506000604051806101000160405280868152602001896001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b0316815260200183815260200146815260200184815260200185815250905060008160405160200161238a91906149ea565b604051602081830303815290604052905060008d8d6040516020016123b9929190918252602082015260400190565b604051602081830303815290604052905060006123de6002546001600160a01b031690565b9050806001600160a01b0316636fed0aa63484868d6040518563ffffffff1660e01b81526004016120a493929190614a6f565b6124196127bf565b611494612d2c565b60006001600160e01b031982166301ffc9a760e01b1480610b5157506001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001492915050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806124d357506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b80610b5157506301ffc9a760e01b6001600160e01b0319831614610b51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611494576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003860003884865af16113da5763b12d13eb6000526004601cfd5b6001600160a01b03841661259457604051632bfa23e760e11b8152600060048201526024016110ba565b6001600160a01b0385166125bd57604051626a0d4560e21b8152600060048201526024016110ba565b611b7a8585858585612d84565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061266357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156114945760405163703e46dd60e11b815260040160405180910390fd5b6115066127bf565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126e3575060408051601f3d908101601f191682019092526126e09181019061425b565b60015b61270b57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016110ba565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612767576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016110ba565b6127718383612dd7565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114945760405163703e46dd60e11b815260040160405180910390fd5b336127c86115aa565b6001600160a01b0316146114945760405163118cdaa760e01b81523360048201526024016110ba565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556113da82612e2d565b6128316124f2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128a6612e9e565b61150681612f05565b6128b7612e9e565b611494612f50565b6128c7612e9e565b611494612f83565b60006128d96115df565b90506001600160a01b038116612902576040516347d85f5f60e01b815260040160405180910390fd5b600154600160a01b900460ff1615612946576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b0390921691909117600160a01b179055565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a9004806129a0575050819003601f19909101908152919050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316612a2d576040517fced3e100000000000000000000000000000000000000000000000000000000008152600060048201526024016110ba565b6001600160a01b038481166000818152600184016020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b60208101516001600160a01b0316158015612abe5750805163ffffffff1615155b15612adc576040516347d85f5f60e01b815260040160405180910390fd5b6107d0816000015163ffffffff161115612b22576040517fc2b03beb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083518154928501516001600160a01b0316640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff9091161791909117905551339083907fac6c25c236bd3d770d0d5fe9beb97491ac12458babd4e48ca0bf86a9517c62fe90612baf908590613e2c565b60405180910390a35050565b6001600160a01b0385166000818152600c60209081526040808320888452825280832080546001818101835591855283852001869055938352600d825280832088845282528220805493840181558252902001612c18838261459f565b506001600160a01b0385166000908152600b602052604090205460ff16612c5d576001600160a01b0385166000908152600b60205260409020805460ff191660011790555b611b7a8585856040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250612fb1565b6001600160a01b038416612cc857604051632bfa23e760e11b8152600060048201526024016110ba565b6001600160a01b038516612cf157604051626a0d4560e21b8152600060048201526024016110ba565b60408051600180825260208201869052818301908152606082018590526080820190925290612d238787848487612d84565b50505050505050565b612d3461300e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612880565b612d9085858585613069565b6001600160a01b03841615611b7a5782513390600103612dc95760208481015190840151612dc283898985858961307b565b50506110d0565b6110d081878787878761319f565b612de082613288565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612e255761277182826132ff565b6113da61336c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611494576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f0d612e9e565b6001600160a01b0381166114fd576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016110ba565b612f58612e9e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b612f8b612e9e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b038416612fdb57604051632bfa23e760e11b8152600060048201526024016110ba565b604080516001808252602082018690528183019081526060820185905260808201909252906110d0600087848487612d84565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611494576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613075848484846133a4565b50505050565b6001600160a01b0384163b156110d05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906130bf9089908990889088908890600401614aa5565b6020604051808303816000875af19250505080156130fa575060408051601f3d908101601f191682019092526130f791810190614ae8565b60015b613163573d808015613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b606091505b50805160000361315b57604051632bfa23e760e11b81526001600160a01b03861660048201526024016110ba565b805181602001fd5b6001600160e01b0319811663f23a6e6160e01b14612d2357604051632bfa23e760e11b81526001600160a01b03861660048201526024016110ba565b6001600160a01b0384163b156110d05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906131e39089908990889088908890600401614b05565b6020604051808303816000875af192505050801561321e575060408051601f3d908101601f1916820190925261321b91810190614ae8565b60015b61324c573d808015613128576040519150601f19603f3d011682016040523d82523d6000602084013e61312d565b6001600160e01b0319811663bc197c8160e01b14612d2357604051632bfa23e760e11b81526001600160a01b03861660048201526024016110ba565b806001600160a01b03163b6000036132be57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016110ba565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161331c9190614b57565b600060405180830381855af49150503d8060008114613357576040519150601f19603f3d011682016040523d82523d6000602084013e61335c565b606091505b5091509150610ee98583836133b8565b3415611494576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ac6124f2565b6130758484848461342d565b6060826133cd576133c88261359d565b6112eb565b81511580156133e457506001600160a01b0384163b155b15613426576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016110ba565b50806112eb565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280061345a858585856135df565b6001600160a01b038516613508576000805b84518110156134ec576000848281518110613489576134896144b0565b60200260200101519050808460000160008885815181106134ac576134ac6144b0565b6020026020010151815260200190815260200160002060008282546134d19190614b73565b909155506134e190508184614b73565b92505060010161346c565b50808260010160008282546135019190614b73565b9091555050505b6001600160a01b038416611b7a576000805b8451811015613589576000848281518110613537576135376144b0565b602002602001015190508084600001600088858151811061355a5761355a6144b0565b60209081029190910181015182528101919091526040016000208054919091039055919091019060010161351a565b506001820180549190910390555050505050565b8051156135ad5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146136305782518251604051635b05999160e01b8152600481019290925260248201526044016110ba565b3360005b845181101561374f576020818102868101820151908601909101516001600160a01b03891615613700576000828152602086815260408083206001600160a01b038d168452909152902054818110156136d9576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b1660048201526024810182905260448101839052606481018490526084016110ba565b6000838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b03881615613745576000828152602086815260408083206001600160a01b038c1684529091528120805483929061373f908490614b73565b90915550505b5050600101613634565b5083516001036137d05760208401516000906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516137c1929190918252602082015260400190565b60405180910390a450506110d0565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161381f929190614b86565b60405180910390a4505050505050565b6001600160a01b038116811461150657600080fd5b6000806040838503121561385757600080fd5b82356138628161382f565b946020939093013593505050565b6001600160e01b03198116811461150657600080fd5b60006020828403121561389857600080fd5b81356112eb81613870565b6000806000606084860312156138b857600080fd5b83356138c38161382f565b95602085013595506040909401359392505050565b60005b838110156138f35781810151838201526020016138db565b50506000910152565b600081518084526139148160208601602086016138d8565b601f01601f19169290920160200192915050565b6020815260006112eb60208301846138fc565b60006020828403121561394d57600080fd5b5035919050565b60006020828403121561396657600080fd5b81356112eb8161382f565b6000806040838503121561398457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156139cc576139cc613993565b60405290565b604051610200810167ffffffffffffffff811182821017156139cc576139cc613993565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a1f57613a1f613993565b604052919050565b600067ffffffffffffffff821115613a4157613a41613993565b5060051b60200190565b600082601f830112613a5c57600080fd5b81356020613a71613a6c83613a27565b6139f6565b8083825260208201915060208460051b870101935086841115613a9357600080fd5b602086015b84811015613aaf5780358352918301918301613a98565b509695505050505050565b600067ffffffffffffffff821115613ad457613ad4613993565b50601f01601f191660200190565b600082601f830112613af357600080fd5b8135613b01613a6c82613aba565b818152846020838601011115613b1657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215613b4b57600080fd5b8535613b568161382f565b94506020860135613b668161382f565b9350604086013567ffffffffffffffff80821115613b8357600080fd5b613b8f89838a01613a4b565b94506060880135915080821115613ba557600080fd5b613bb189838a01613a4b565b93506080880135915080821115613bc757600080fd5b50613bd488828901613ae2565b9150509295509295909350565b600080600060608486031215613bf657600080fd5b833592506020840135613c088161382f565b929592945050506040919091013590565b60008060408385031215613c2c57600080fd5b823567ffffffffffffffff80821115613c4457600080fd5b818501915085601f830112613c5857600080fd5b81356020613c68613a6c83613a27565b82815260059290921b84018101918181019089841115613c8757600080fd5b948201945b83861015613cae578535613c9f8161382f565b82529482019490820190613c8c565b96505086013592505080821115613cc457600080fd5b50613cd185828601613a4b565b9150509250929050565b60008151808452602080850194506020840160005b83811015613d0c57815187529582019590820190600101613cf0565b509495945050505050565b6020815260006112eb6020830184613cdb565b60008060408385031215613d3d57600080fd5b8235613d488161382f565b9150602083013567ffffffffffffffff811115613d6457600080fd5b613cd185828601613ae2565b60008060408385031215613d8357600080fd5b823591506020830135613d958161382f565b809150509250929050565b600080600060608486031215613db557600080fd5b8335925060208401359150604084013567ffffffffffffffff811115613dda57600080fd5b613de686828701613ae2565b9150509250925092565b801515811461150657600080fd5b60008060408385031215613e1157600080fd5b8235613e1c8161382f565b91506020830135613d9581613df0565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610b51565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613ea957603f19888603018452613e978583516138fc565b94509285019290850190600101613e7b565b5092979650505050505050565b63ffffffff8116811461150657600080fd5b6000808284036060811215613edc57600080fd5b833592506040601f1982011215613ef257600080fd5b50613efb6139a9565b6020840135613f0981613eb6565b81526040840135613f198161382f565b6020820152919491935090915050565b602081528151602082015260006020830151613f5060408401826001600160a01b03169052565b50604083015160608301526060830151610220806080850152613f776102408501836138fc565b91506080850151601f198584030160a0860152613f9483826138fc565b92505060a0850151613fb160c08601826001600160a01b03169052565b5060c085015160e085015260e0850151610100613fd8818701836001600160a01b03169052565b8601519050610120613ff4868201836001600160a01b03169052565b860151905061014061402186820183805163ffffffff1682526020908101516001600160a01b0316910152565b860151610180868101919091526101608701516101a080880191909152908701516101c080880191909152908701516101e0808801919091529087015161020087015290950151151593019290925250919050565b600080600080600080600060e0888a03121561409157600080fd5b8735965060208801356140a38161382f565b955060408801356140b38161382f565b945060608801356140c38161382f565b93506080880135925060a0880135915060c088013567ffffffffffffffff8111156140ed57600080fd5b6140f98a828b01613ae2565b91505092959891949750929550565b6000806040838503121561411b57600080fd5b82356141268161382f565b91506020830135613d958161382f565b600080600080600060a0868803121561414e57600080fd5b85356141598161382f565b945060208601356141698161382f565b93506040860135925060608601359150608086013567ffffffffffffffff81111561419357600080fd5b613bd488828901613ae2565b600181811c908216806141b357607f821691505b6020821081036141d357634e487b7160e01b600052602260045260246000fd5b50919050565b600082601f8301126141ea57600080fd5b81516141f8613a6c82613aba565b81815284602083860101111561420d57600080fd5b61421e8260208301602087016138d8565b949350505050565b60006020828403121561423857600080fd5b815167ffffffffffffffff81111561424f57600080fd5b61421e848285016141d9565b60006020828403121561426d57600080fd5b5051919050565b805161427f8161382f565b919050565b60006020828403121561429657600080fd5b81516112eb8161382f565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b5157610b516142a1565b6000604082840312156142dc57600080fd5b6142e46139a9565b905081516142f181613eb6565b815260208201516143018161382f565b602082015292915050565b805161427f81613df0565b60006020828403121561432957600080fd5b815167ffffffffffffffff8082111561434157600080fd5b90830190610220828603121561435657600080fd5b61435e6139d2565b8251815261436e60208401614274565b60208201526040830151604082015260608301518281111561438f57600080fd5b61439b878286016141d9565b6060830152506080830151828111156143b357600080fd5b6143bf878286016141d9565b6080830152506143d160a08401614274565b60a082015260c083015160c08201526143ec60e08401614274565b60e08201526101009150614401828401614274565b828201526101209150614416868385016142ca565b8282015261016091508183015161014082015261018080840151838301526101a092508284015181830152506101c080840151838301526101e09250828401518183015250614468610200840161430c565b91810191909152949350505050565b8082028115828204841417610b5157610b516142a1565b6000826144ab57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60808152600960808201527f50686920437265642d000000000000000000000000000000000000000000000060a082015260c06020820152600061450d60c08301856138fc565b828103806040850152600a82527f206f6e20436861696e2d00000000000000000000000000000000000000000000602083015260408101606085015250610ee960408201856138fc565b601f821115612771576000816000526020600020601f850160051c810160208610156145805750805b601f850160051c820191505b818110156110d05782815560010161458c565b815167ffffffffffffffff8111156145b9576145b9613993565b6145cd816145c7845461419f565b84614557565b602080601f83116001811461460257600084156145ea5750858301515b600019600386901b1c1916600185901b1785556110d0565b600085815260208120601f198616915b8281101561463157888601518255948401946001909101908401614612565b508582101561464f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60808152600460808201527f5048492d0000000000000000000000000000000000000000000000000000000060a082015260c0602082015260006146a660c08301856138fc565b828103806040850152600182527f2d00000000000000000000000000000000000000000000000000000000000000602083015260408101606085015250610ee960408201856138fc565b838152826020820152606060408201526000610ee960608301846138fc565b86815285602082015284604082015283606082015260c06080820152600061473a60c08301856138fc565b905082151560a0830152979650505050505050565b6001600160a01b038716815285602082015284604082015283606082015282608082015260c060a0820152600061478960c08301846138fc565b98975050505050505050565b600080858511156147a557600080fd5b838611156147b257600080fd5b5050820193919092039150565b803561427f8161382f565b6000806000806000806000806000806101408b8d0312156147ea57600080fd5b8a35995060208b0135985061480160408c016147bf565b975060608b013567ffffffffffffffff8082111561481e57600080fd5b61482a8e838f01613a4b565b985061483860808e016147bf565b975060a08d0135965060c08d0135955060e08d013594506101008d013593506101208d013591508082111561486c57600080fd5b506148798d828e01613ae2565b9150509295989b9194979a5092959850565b6020815281516020820152600060208301516001600160a01b038082166040850152806040860151166060850152505060608301516080830152608083015160a083015260a083015160c08084015261421e60e08401826138fc565b60a0815260006148fa60a0830188613cdb565b828103602084015261490c81886138fc565b9050856040840152828103606084015261492681866138fc565b9150508260808301529695505050505050565b6000806000806000806000806000806101408b8d03121561495957600080fd5b8a35995060208b0135985060408b01356149728161382f565b975060608b01356149828161382f565b965060808b01356149928161382f565b955060a08b0135945060c08b0135935060e08b013592506101008b013567ffffffffffffffff8111156149c457600080fd5b6149d08d828e01613ae2565b9250506101208b013590509295989b9194979a5092959850565b6020815281516020820152600060208301516001600160a01b03808216604085015280604086015116606085015250506060830151614a3460808401826001600160a01b03169052565b50608083015160a083015260a083015160c083015260c083015160e083015260e083015161010080818501525061421e6101208401826138fc565b606081526000614a8260608301866138fc565b8281036020840152614a9481866138fc565b915050826040830152949350505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152614add60a08301846138fc565b979650505050505050565b600060208284031215614afa57600080fd5b81516112eb81613870565b60006001600160a01b03808816835280871660208401525060a06040830152614b3160a0830186613cdb565b8281036060840152614b438186613cdb565b9050828103608084015261478981856138fc565b60008251614b698184602087016138d8565b9190910192915050565b80820180821115610b5157610b516142a1565b604081526000614b996040830185613cdb565b8281036020840152610ee98185613cdb56fea164736f6c6343000819000a