[ { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "CannotExceedMaxSupplyOfUint64", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "basisPoints", "type": "uint256" } ], "name": "InvalidRoyaltyBasisPoints", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "MintQuantityExceedsMaxSupply", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NotNextOwner", "type": "error" }, { "inputs": [], "name": "OnlyAllowedSeaDrop", "type": "error" }, { "inputs": [], "name": "OnlyOwner", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "ProvenanceHashCannotBeSetAfterMintStarted", "type": "error" }, { "inputs": [], "name": "RoyaltyAddressCannotBeZeroAddress", "type": "error" }, { "inputs": [], "name": "SameTransferValidator", "type": "error" }, { "inputs": [], "name": "SignersMismatch", "type": "error" }, { "inputs": [], "name": "TokenGatedMismatch", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "allowedSeaDrop", "type": "address[]" } ], "name": "AllowedSeaDropUpdated", "type": "event" }, { "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "MaxSupplyUpdated", "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": "newPotentialAdministrator", "type": "address" } ], "name": "PotentialOwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "previousHash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "newHash", "type": "bytes32" } ], "name": "ProvenanceHashUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "bps", "type": "uint256" } ], "name": "RoyaltyInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [], "name": "SeaDropTokenDeployed", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValidator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValidator", "type": "address" } ], "name": "TransferValidatorUpdated", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cancelOwnershipTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "toTokenId", "type": "uint256" } ], "name": "emitBatchMetadataUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "getMintStats", "outputs": [ { "internalType": "uint256", "name": "minterNumMinted", "type": "uint256" }, { "internalType": "uint256", "name": "currentTotalSupply", "type": "uint256" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTransferValidationFunction", "outputs": [ { "internalType": "bytes4", "name": "functionSignature", "type": "bytes4" }, { "internalType": "bool", "name": "isViewFunction", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getTransferValidator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "__name", "type": "string" }, { "internalType": "string", "name": "__symbol", "type": "string" }, { "internalType": "address[]", "name": "allowedSeaDrop", "type": "address[]" }, { "internalType": "address", "name": "initialOwner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mintSeaDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "string", "name": "contractURI", "type": "string" }, { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct PublicDrop", "name": "publicDrop", "type": "tuple" }, { "internalType": "string", "name": "dropURI", "type": "string" }, { "components": [ { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "string[]", "name": "publicKeyURIs", "type": "string[]" }, { "internalType": "string", "name": "allowListURI", "type": "string" } ], "internalType": "struct AllowListData", "name": "allowListData", "type": "tuple" }, { "internalType": "address", "name": "creatorPayoutAddress", "type": "address" }, { "internalType": "bytes32", "name": "provenanceHash", "type": "bytes32" }, { "internalType": "address[]", "name": "allowedFeeRecipients", "type": "address[]" }, { "internalType": "address[]", "name": "disallowedFeeRecipients", "type": "address[]" }, { "internalType": "address[]", "name": "allowedPayers", "type": "address[]" }, { "internalType": "address[]", "name": "disallowedPayers", "type": "address[]" }, { "internalType": "address[]", "name": "tokenGatedAllowedNftTokens", "type": "address[]" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint8", "name": "dropStageIndex", "type": "uint8" }, { "internalType": "uint32", "name": "maxTokenSupplyForStage", "type": "uint32" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct TokenGatedDropStage[]", "name": "tokenGatedDropStages", "type": "tuple[]" }, { "internalType": "address[]", "name": "disallowedTokenGatedAllowedNftTokens", "type": "address[]" }, { "internalType": "address[]", "name": "signers", "type": "address[]" }, { "components": [ { "internalType": "uint80", "name": "minMintPrice", "type": "uint80" }, { "internalType": "uint24", "name": "maxMaxTotalMintableByWallet", "type": "uint24" }, { "internalType": "uint40", "name": "minStartTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxEndTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxMaxTokenSupplyForStage", "type": "uint40" }, { "internalType": "uint16", "name": "minFeeBps", "type": "uint16" }, { "internalType": "uint16", "name": "maxFeeBps", "type": "uint16" } ], "internalType": "struct SignedMintValidationParams[]", "name": "signedMintValidationParams", "type": "tuple[]" }, { "internalType": "address[]", "name": "disallowedSigners", "type": "address[]" } ], "internalType": "struct ERC721SeaDropStructsErrorsAndEvents.MultiConfigureStruct", "name": "config", "type": "tuple" } ], "name": "multiConfigure", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "provenanceHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltyAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "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": "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": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "newProvenanceHash", "type": "bytes32" } ], "name": "setProvenanceHash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "royaltyAddress", "type": "address" }, { "internalType": "uint96", "name": "royaltyBps", "type": "uint96" } ], "internalType": "struct ISeaDropTokenContractMetadata.RoyaltyInfo", "name": "newInfo", "type": "tuple" } ], "name": "setRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newValidator", "type": "address" } ], "name": "setTransferValidator", "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": [ { "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": "address", "name": "newPotentialOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "components": [ { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" }, { "internalType": "string[]", "name": "publicKeyURIs", "type": "string[]" }, { "internalType": "string", "name": "allowListURI", "type": "string" } ], "internalType": "struct AllowListData", "name": "allowListData", "type": "tuple" } ], "name": "updateAllowList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "feeRecipient", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "updateAllowedFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "allowedSeaDrop", "type": "address[]" } ], "name": "updateAllowedSeaDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "payoutAddress", "type": "address" } ], "name": "updateCreatorPayoutAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "string", "name": "dropURI", "type": "string" } ], "name": "updateDropURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "bool", "name": "allowed", "type": "bool" } ], "name": "updatePayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct PublicDrop", "name": "publicDrop", "type": "tuple" } ], "name": "updatePublicDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "signer", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "minMintPrice", "type": "uint80" }, { "internalType": "uint24", "name": "maxMaxTotalMintableByWallet", "type": "uint24" }, { "internalType": "uint40", "name": "minStartTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxEndTime", "type": "uint40" }, { "internalType": "uint40", "name": "maxMaxTokenSupplyForStage", "type": "uint40" }, { "internalType": "uint16", "name": "minFeeBps", "type": "uint16" }, { "internalType": "uint16", "name": "maxFeeBps", "type": "uint16" } ], "internalType": "struct SignedMintValidationParams", "name": "signedMintValidationParams", "type": "tuple" } ], "name": "updateSignedMintValidationParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "seaDropImpl", "type": "address" }, { "internalType": "address", "name": "allowedNftToken", "type": "address" }, { "components": [ { "internalType": "uint80", "name": "mintPrice", "type": "uint80" }, { "internalType": "uint16", "name": "maxTotalMintableByWallet", "type": "uint16" }, { "internalType": "uint48", "name": "startTime", "type": "uint48" }, { "internalType": "uint48", "name": "endTime", "type": "uint48" }, { "internalType": "uint8", "name": "dropStageIndex", "type": "uint8" }, { "internalType": "uint32", "name": "maxTokenSupplyForStage", "type": "uint32" }, { "internalType": "uint16", "name": "feeBps", "type": "uint16" }, { "internalType": "bool", "name": "restrictFeeRecipients", "type": "bool" } ], "internalType": "struct TokenGatedDropStage", "name": "dropStage", "type": "tuple" } ], "name": "updateTokenGatedDrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000a1565b303b15620000425760405162dc149f60e41b815260040160405180910390fd5b6200004d336200004f565b565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61530980620000b16000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c806366251b69116101b257806395d89b41116100f9578063c6ab67a3116100a2578063d5abeb011161007c578063d5abeb011461074c578063e8a3d48514610754578063e985e9c51461075c578063f2fde38b1461076f57600080fd5b8063c6ab67a31461071e578063c87b56dd14610726578063cb743ba81461073957600080fd5b8063a9fc664e116100d3578063a9fc664e146106da578063ad2f852a146106ed578063b88d4fde1461070b57600080fd5b806395d89b41146106ac578063a22cb465146106b4578063a4830114146106c757600080fd5b80637a05bc821161015b5780638da5cb5b116101355780638da5cb5b14610668578063911f456b14610686578063938e3d7b1461069957600080fd5b80637a05bc82146106145780637bc2be7614610627578063840e15d41461063a57600080fd5b806370a082311161018c57806370a08231146105f1578063715018a61461060457806379ba50971461060c57600080fd5b806366251b69146105c35780636c0360eb146105d65780636f8b44b0146105de57600080fd5b80633680620d1161027657806348a4c1011161021f57806360c308b6116101f957806360c308b61461058a5780636352211e1461059d57806364869dad146105b057600080fd5b806348a4c10114610551578063511aa6441461056457806355f804b31461057757600080fd5b806342966c681161025057806342966c681461051857806344dae42c1461052b578063481a48ec1461053e57600080fd5b80633680620d146104c457806342260b5d146104d757806342842e0e1461050557600080fd5b80630d705df6116102d857806323452b9c116102b257806323452b9c1461046a57806323b872dd146104725780632a55205a1461048557600080fd5b80630d705df6146103eb57806318160ddd1461041f5780631b73593c1461045757600080fd5b8063095ea7b311610309578063095ea7b3146103a5578063098144d4146103ba578063099b6bfa146103d857600080fd5b806301ffc9a71461033057806306fdde0314610358578063081812fc1461036d575b600080fd5b61034361033e366004613c45565b610782565b60405190151581526020015b60405180910390f35b61036061082a565b60405161034f9190613cd0565b61038061037b366004613ce3565b6108bc565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034f565b6103b86103b3366004613d1e565b610926565b005b60095473ffffffffffffffffffffffffffffffffffffffff16610380565b6103b86103e6366004613ce3565b610a11565b604080517fcaee23ea000000000000000000000000000000000000000000000000000000008152600060208201520161034f565b600254600154037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b60405190815260200161034f565b6103b8610465366004613d4a565b610ac4565b6103b8610b5d565b6103b8610480366004613da9565b610bc3565b610498610493366004613dea565b610e66565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161034f565b6103b86104d2366004613e0c565b610ecf565b6010547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16610449565b6103b8610513366004613da9565b610f32565b6103b8610526366004613ce3565b610f52565b6103b8610539366004613e63565b610f60565b6103b861054c366004613f09565b6110d1565b6103b861055f366004613fcc565b611319565b6103b861057236600461410e565b6113b9565b6103b86105853660046141fb565b61141e565b6103b861059836600461423d565b6114b2565b6103806105ab366004613ce3565b6114c4565b6103b86105be366004613d1e565b6114cf565b6103b86105d1366004614273565b6115a7565b61036061160c565b6103b86105ec366004613ce3565b61161b565b6104496105ff3660046142a1565b61169d565b6103b861171f565b6103b8611733565b6103b86106223660046142be565b6117ea565b6103b8610635366004614313565b61184f565b61064d6106483660046142a1565b6118b4565b6040805193845260208401929092529082015260600161034f565b600a5473ffffffffffffffffffffffffffffffffffffffff16610380565b6103b8610694366004614386565b611921565b6103b86106a73660046141fb565b6126bc565b610360612703565b6103b86106c23660046143c2565b612712565b6103b86106d5366004613dea565b6127a9565b6103b86106e83660046142a1565b6127e7565b60105473ffffffffffffffffffffffffffffffffffffffff16610380565b6103b86107193660046143f7565b6127f8565b600f54610449565b610360610734366004613ce3565b612868565b6103b8610747366004613fcc565b61298d565b600c54610449565b6103606129fa565b61034361076a366004614273565b612a09565b6103b861077d3660046142a1565b612a8e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1890fe8e00000000000000000000000000000000000000000000000000000000148061081557507fffffffff0000000000000000000000000000000000000000000000000000000082167f9c15441500000000000000000000000000000000000000000000000000000000145b80610824575061082482612b56565b92915050565b606060038054610839906144d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610865906144d9565b80156108b25780601f10610887576101008083540402835291602001916108b2565b820191906000526020600020905b81548152906001019060200180831161089557829003601f168201915b5050505050905090565b60006108c782612c90565b6108fd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610931826114c4565b90503373ffffffffffffffffffffffffffffffffffffffff8216146109905761095a8133612a09565b610990576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526007602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610a19612cde565b6000610a466001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b1115610a7e576040517fe03264af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f80549082905560408051828152602081018490527f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c91015b60405180910390a15050565b610acc612cde565b610ad582612d6e565b6040517f01308e6500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906301308e6590610b279084906004016145c6565b600060405180830381600087803b158015610b4157600080fd5b505af1158015610b55573d6000803e3d6000fd5b505050505050565b610b65612dd2565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1565b6000610bce82612e23565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c35576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526007602052604090208054610c6e8187335b73ffffffffffffffffffffffffffffffffffffffff9081169116811491141790565b610cb257610c7c8633612a09565b610cb2576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516610cff576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0c8686866001612ee2565b8015610d1757600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081526006602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600560205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003610e0657600184016000818152600560205260408120549003610e04576001548114610e045760008181526005602052604090208490555b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610b55565b60108054600091829161271090610ea3907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1686614603565b610ead919061461a565b905473ffffffffffffffffffffffffffffffffffffffff169590945092505050565b610ed7612cde565b610ee082612d6e565b6040517febb4a55f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063ebb4a55f90610b27908490600401614812565b610f4d838383604051806020016040528060008152506127f8565b505050565b610f5d816001612fdc565b50565b610f68612cde565b6000610f7760208301836142a1565b73ffffffffffffffffffffffffffffffffffffffff1603610fc4576040517f1cc0baef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710610fd7604083016020840161483f565b6bffffffffffffffffffffffff16111561104357610ffb604082016020830161483f565b6040517f3cadbafb0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b806010611050828261485c565b507ff21fccf4d64d86d532c4e4eb86c007b6ad57a460c27d724188625e755ec6cf6d905061108160208301836142a1565b611091604084016020850161483f565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152015b60405180910390a150565b600054610100900460ff16158080156110f15750600054600160ff909116105b8061110b5750303b15801561110b575060005460ff166001145b611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161103a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156111f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61126888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525061319a92505050565b611270613253565b61127a84846132f2565b61128382613462565b6040517fd7aca75208b9be5ffc04c6a01922020ffd62b55e68e502e317f5344960279af890600090a1801561130f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b611321612cde565b61132a83612d6e565b6040517f8e7d1e4300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690638e7d1e43906044015b600060405180830381600087803b15801561139c57600080fd5b505af11580156113b0573d6000803e3d6000fd5b50505050505050565b6113c1612cde565b6113ca83612d6e565b6040517f4d38017800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634d3801789061138290859085906004016148c1565b611426612cde565b600d61143382848361499b565b50600254600154037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01156114ae577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c60018061148f60015490565b6114999190614ab5565b60408051928352602083019190915201610ab8565b5050565b6114ba612dd2565b6114ae82826132f2565b600061082482612e23565b6114d76134d9565b6114e033612d6e565b600c548161150f6001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6115199190614ac8565b1115611593578061154b6001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6115559190614ac8565b600c546040517fe12d23140000000000000000000000000000000000000000000000000000000081526004810192909252602482015260440161103a565b61159d828261354c565b6114ae6001601155565b6115af612cde565b6115b882612d6e565b6040517f12738db800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528316906312738db890602401610b27565b606061161661356d565b905090565b611623612cde565b67ffffffffffffffff811115611668576040517fb43e91370000000000000000000000000000000000000000000000000000000081526004810182905260240161103a565b600c8190556040518181527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c906020016110c6565b600073ffffffffffffffffffffffffffffffffffffffff82166116ec576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205467ffffffffffffffff1690565b611727612dd2565b6117316000613462565b565b600b5473ffffffffffffffffffffffffffffffffffffffff16338114611785576040517fd6eb09ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1610f5d81613462565b6117f2612cde565b6117fb83612d6e565b6040517fb957d0cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063b957d0cb906113829085908590600401614adb565b611857612cde565b61186083612d6e565b6040517ffd9ab22a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063fd9ab22a906113829085908590600401614bc0565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604080822054901c67ffffffffffffffff1690806119146001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600c549395909450915050565b611929612dd2565b80351561199b576040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152813560048201523090636f8b44b090602401600060405180830381600087803b15801561198257600080fd5b505af1158015611996573d6000803e3d6000fd5b505050505b6119a86020820182614beb565b159050611a1257306355f804b36119c26020840184614beb565b6040518363ffffffff1660e01b81526004016119df929190614adb565b600060405180830381600087803b1580156119f957600080fd5b505af1158015611a0d573d6000803e3d6000fd5b505050505b611a1f6040820182614beb565b159050611a89573063938e3d7b611a396040840184614beb565b6040518363ffffffff1660e01b8152600401611a56929190614adb565b600060405180830381600087803b158015611a7057600080fd5b505af1158015611a84573d6000803e3d6000fd5b505050505b611aa9611a9c60e0830160c08401614c50565b65ffffffffffff16151590565b611abc611a9c60c0840160a08501614c50565b17600103611b2e5730631b73593c611ada60808401606085016142a1565b836080016040518363ffffffff1660e01b8152600401611afb929190614c6b565b600060405180830381600087803b158015611b1557600080fd5b505af1158015611b29573d6000803e3d6000fd5b505050505b611b3c610140820182614beb565b159050611bb85730637a05bc82611b5960808401606085016142a1565b611b67610140850185614beb565b6040518463ffffffff1660e01b8152600401611b8593929190614c95565b600060405180830381600087803b158015611b9f57600080fd5b505af1158015611bb3573d6000803e3d6000fd5b505050505b6000611bc8610160830183614cce565b3514611c425730633680620d611be460808401606085016142a1565b611bf2610160850185614cce565b6040518363ffffffff1660e01b8152600401611c0f929190614d0c565b600060405180830381600087803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b505050505b6000611c566101a0830161018084016142a1565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f57306366251b69611c8760808401606085016142a1565b611c996101a0850161018086016142a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015611d0657600080fd5b505af1158015611d1a573d6000803e3d6000fd5b505050505b6101a081013515611d99576040517f099b6bfa0000000000000000000000000000000000000000000000000000000081526101a08201356004820152309063099b6bfa90602401600060405180830381600087803b158015611d8057600080fd5b505af1158015611d94573d6000803e3d6000fd5b505050505b6000611da96101c0830183614d3b565b90501115611ead5760005b611dc26101c0830183614d3b565b9050811015611eab57306348a4c101611de160808501606086016142a1565b611def6101c0860186614d3b565b85818110611dff57611dff614da3565b9050602002016020810190611e1491906142a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b158015611e8857600080fd5b505af1158015611e9c573d6000803e3d6000fd5b50505050806001019050611db4565b505b6000611ebd6101e0830183614d3b565b90501115611fc15760005b611ed66101e0830183614d3b565b9050811015611fbf57306348a4c101611ef560808501606086016142a1565b611f036101e0860186614d3b565b85818110611f1357611f13614da3565b9050602002016020810190611f2891906142a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b158015611f9c57600080fd5b505af1158015611fb0573d6000803e3d6000fd5b50505050806001019050611ec8565b505b6000611fd1610200830183614d3b565b905011156120d55760005b611fea610200830183614d3b565b90508110156120d3573063cb743ba861200960808501606086016142a1565b612017610200860186614d3b565b8581811061202757612027614da3565b905060200201602081019061203c91906142a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b1580156120b057600080fd5b505af11580156120c4573d6000803e3d6000fd5b50505050806001019050611fdc565b505b60006120e5610220830183614d3b565b905011156121e95760005b6120fe610220830183614d3b565b90508110156121e7573063cb743ba861211d60808501606086016142a1565b61212b610220860186614d3b565b8581811061213b5761213b614da3565b905060200201602081019061215091906142a1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b1580156121c457600080fd5b505af11580156121d8573d6000803e3d6000fd5b505050508060010190506120f0565b505b60006121f9610260830183614dd2565b9050111561233d5761220f610240820182614d3b565b905061221f610260830183614dd2565b905014612258576040517fb81aa63900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b612269610260830183614dd2565b905081101561233b5730637bc2be7661228860808501606086016142a1565b612296610240860186614d3b565b858181106122a6576122a6614da3565b90506020020160208101906122bb91906142a1565b6122c9610260870187614dd2565b868181106122d9576122d9614da3565b905061010002016040518463ffffffff1660e01b81526004016122fe93929190614e3a565b600060405180830381600087803b15801561231857600080fd5b505af115801561232c573d6000803e3d6000fd5b5050505080600101905061225b565b505b600061234d610280830183614d3b565b905011156124585760005b612366610280830183614d3b565b9050811015612456576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915230637bc2be766123c660808601606087016142a1565b6123d4610280870187614d3b565b868181106123e4576123e4614da3565b90506020020160208101906123f991906142a1565b846040518463ffffffff1660e01b815260040161241893929190614e6d565b600060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b5050505081600101915050612358565b505b60006124686102c0830183614f30565b905011156125ab5761247e6102a0820182614d3b565b905061248e6102c0830183614f30565b9050146124c7576040517f74ef6df700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b6124d86102c0830183614f30565b90508110156125a9573063511aa6446124f760808501606086016142a1565b6125056102a0860186614d3b565b8581811061251557612515614da3565b905060200201602081019061252a91906142a1565b6125386102c0870187614f30565b8681811061254857612548614da3565b905060e002016040518463ffffffff1660e01b815260040161256c93929190614f97565b600060405180830381600087803b15801561258657600080fd5b505af115801561259a573d6000803e3d6000fd5b505050508060010190506124ca565b505b60006125bb6102e0830183614d3b565b90501115610f5d5760005b6125d46102e0830183614d3b565b90508110156114ae576040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091523063511aa64461262c60808601606087016142a1565b61263a6102e0870187614d3b565b8681811061264a5761264a614da3565b905060200201602081019061265f91906142a1565b846040518463ffffffff1660e01b815260040161267e93929190615060565b600060405180830381600087803b15801561269857600080fd5b505af11580156126ac573d6000803e3d6000fd5b50505050816001019150506125c6565b6126c4612cde565b600e6126d182848361499b565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac373788282604051610ab8929190614adb565b606060048054610839906144d9565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6127b1612cde565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c9101610ab8565b6127ef612dd2565b610f5d8161357c565b612803848484610bc3565b73ffffffffffffffffffffffffffffffffffffffff83163b156128625761282c8484848461364f565b612862576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061287382612c90565b6128a9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006128b361356d565b905080516000036128d4575050604080516020810190915260008152919050565b6040805180820190915260018082527f2f0000000000000000000000000000000000000000000000000000000000000060209092018290528251839161291991614ab5565b8151811061292957612929614da3565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161461295b5792915050565b80612965846137c9565b6040516020016129769291906150fc565b604051602081830303815290604052915050919050565b612995612cde565b61299e83612d6e565b6040517f7f2a5cca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690637f2a5cca90604401611382565b6060600e8054610839906144d9565b60007fffffffffffffffffffffffffe1ffb687c0ff75ff7ae6c1ffffc2ff32abffc38f73ffffffffffffffffffffffffffffffffffffffff831601612a5057506001610824565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526008602090815260408083209386168352929052205460ff165b9392505050565b612a96612dd2565b73ffffffffffffffffffffffffffffffffffffffff8116612ae3576040517f7448fbae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da906020016110c6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480612be957507fffffffff0000000000000000000000000000000000000000000000000000000082167fad0d7f6c00000000000000000000000000000000000000000000000000000000145b80612c3557507fffffffff0000000000000000000000000000000000000000000000000000000082167fa07d229a00000000000000000000000000000000000000000000000000000000145b80612c8157507f49064906000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061082457506108248261382b565b600081600111158015612ca4575060015482105b80156108245750506000908152600560205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b303314612d34612d03600a5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490565b17600003611731576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526043602052604090205460ff161515600114610f5d576040517f15e26ff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff163314611731576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008180600111612eb057600154811015612eb057600081815260056020526040812054907c010000000000000000000000000000000000000000000000000000000082169003612eae575b80600003612a8757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600081815260056020526040902054612e6f565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841615801590612f1c575073ffffffffffffffffffffffffffffffffffffffff831615155b156128625760095473ffffffffffffffffffffffffffffffffffffffff168015612fd5576040517fcaee23ea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff868116602483015285811660448301526064820185905282169063caee23ea9060840160006040518083038186803b158015612fbc57600080fd5b505afa158015612fd0573d6000803e3d6000fd5b505050505b5050505050565b6000612fe783612e23565b90508060008061300586600090815260076020526040902080549091565b91509150841561305e5761301a818433610c4c565b61305e576130288333612a09565b61305e576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306c836000886001612ee2565b801561307757600082555b73ffffffffffffffffffffffffffffffffffffffff8316600081815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c0300000000000000000000000000000000000000000000000000000000176000878152600560205260408120919091557c020000000000000000000000000000000000000000000000000000000085169003613144576001860160008181526005602052604081205490036131425760015481146131425760008181526005602052604090208590555b505b604051869060009073ffffffffffffffffffffffffffffffffffffffff8616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060028054600101905550505050565b600054610100900460ff16613231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161103a565b600361323d838261512b565b50600461324a828261512b565b50600180555050565b600054610100900460ff166132ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161103a565b61173161390c565b6044548160005b82811015613381576000604360006044848154811061331a5761331a614da3565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016132f9565b5060005b81811015613415576001604360008787858181106133a5576133a5614da3565b90506020020160208101906133ba91906142a1565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101613385565b5061342260448585613b7a565b507fbbd3b69c138de4d317d0bc4290282c4e1cbd1e58b579a5b4f114b598c237454d8484604051613454929190615245565b60405180910390a150505050565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600260115403613545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161103a565b6002601155565b6114ae8282604051806020016040528060008152506139a3565b6001601155565b6060600d8054610839906144d9565b60095473ffffffffffffffffffffffffffffffffffffffff90811690821681036135d2576040517f4a3bb19e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560408051928416835260208301919091527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac9101610ab8565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906136aa9033908990889088906004016152a0565b6020604051808303816000875af1925050508015613703575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613700918101906152df565b60015b61377a573d808015613731576040519150601f19603f3d011682016040523d82523d6000602084013e613736565b606091505b508051600003613772576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490505b949350505050565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806137e357508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806138be57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108245750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b600054610100900460ff16613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161103a565b6139ad8383613a2f565b73ffffffffffffffffffffffffffffffffffffffff83163b15610f4d576001548281035b6139e4600086838060010194508661364f565b613a1a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106139d1578160015414612fd557600080fd5b6001546000829003613a6d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a7a6000848385612ee2565b73ffffffffffffffffffffffffffffffffffffffff831660008181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114613b3657808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613afe565b5081600003613b71576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015550505050565b828054828255906000526020600020908101928215613bf2579160200282015b82811115613bf25781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff843516178255602090920191600190910190613b9a565b50613bfe929150613c02565b5090565b5b80821115613bfe5760008155600101613c03565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610f5d57600080fd5b600060208284031215613c5757600080fd5b8135612a8781613c17565b60005b83811015613c7d578181015183820152602001613c65565b50506000910152565b60008151808452613c9e816020860160208601613c62565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a876020830184613c86565b600060208284031215613cf557600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610f5d57600080fd5b60008060408385031215613d3157600080fd5b8235613d3c81613cfc565b946020939093013593505050565b60008082840360e0811215613d5e57600080fd5b8335613d6981613cfc565b925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215613d9b57600080fd5b506020830190509250929050565b600080600060608486031215613dbe57600080fd5b8335613dc981613cfc565b92506020840135613dd981613cfc565b929592945050506040919091013590565b60008060408385031215613dfd57600080fd5b50508035926020909101359150565b60008060408385031215613e1f57600080fd5b8235613e2a81613cfc565b9150602083013567ffffffffffffffff811115613e4657600080fd5b830160608186031215613e5857600080fd5b809150509250929050565b600060408284031215613e7557600080fd5b50919050565b60008083601f840112613e8d57600080fd5b50813567ffffffffffffffff811115613ea557600080fd5b602083019150836020828501011115613ebd57600080fd5b9250929050565b60008083601f840112613ed657600080fd5b50813567ffffffffffffffff811115613eee57600080fd5b6020830191508360208260051b8501011115613ebd57600080fd5b60008060008060008060006080888a031215613f2457600080fd5b873567ffffffffffffffff80821115613f3c57600080fd5b613f488b838c01613e7b565b909950975060208a0135915080821115613f6157600080fd5b613f6d8b838c01613e7b565b909750955060408a0135915080821115613f8657600080fd5b50613f938a828b01613ec4565b9094509250506060880135613fa781613cfc565b8091505092959891949750929550565b80358015158114613fc757600080fd5b919050565b600080600060608486031215613fe157600080fd5b8335613fec81613cfc565b92506020840135613ffc81613cfc565b915061400a60408501613fb7565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561406557614065614013565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156140b2576140b2614013565b604052919050565b803569ffffffffffffffffffff81168114613fc757600080fd5b803562ffffff81168114613fc757600080fd5b803564ffffffffff81168114613fc757600080fd5b803561ffff81168114613fc757600080fd5b600080600083850361012081121561412557600080fd5b843561413081613cfc565b9350602085013561414081613cfc565b925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561417257600080fd5b5061417b614042565b614187604086016140ba565b8152614195606086016140d4565b60208201526141a6608086016140e7565b60408201526141b760a086016140e7565b60608201526141c860c086016140e7565b60808201526141d960e086016140fc565b60a08201526141eb61010086016140fc565b60c0820152809150509250925092565b6000806020838503121561420e57600080fd5b823567ffffffffffffffff81111561422557600080fd5b61423185828601613e7b565b90969095509350505050565b6000806020838503121561425057600080fd5b823567ffffffffffffffff81111561426757600080fd5b61423185828601613ec4565b6000806040838503121561428657600080fd5b823561429181613cfc565b91506020830135613e5881613cfc565b6000602082840312156142b357600080fd5b8135612a8781613cfc565b6000806000604084860312156142d357600080fd5b83356142de81613cfc565b9250602084013567ffffffffffffffff8111156142fa57600080fd5b61430686828701613e7b565b9497909650939450505050565b600080600083850361014081121561432a57600080fd5b843561433581613cfc565b9350602085013561434581613cfc565b92506101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561437857600080fd5b506040840190509250925092565b60006020828403121561439857600080fd5b813567ffffffffffffffff8111156143af57600080fd5b82016103008185031215612a8757600080fd5b600080604083850312156143d557600080fd5b82356143e081613cfc565b91506143ee60208401613fb7565b90509250929050565b6000806000806080858703121561440d57600080fd5b843561441881613cfc565b935060208581013561442981613cfc565b935060408601359250606086013567ffffffffffffffff8082111561444d57600080fd5b818801915088601f83011261446157600080fd5b81358181111561447357614473614013565b6144a3847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161406b565b915080825289848285010111156144b957600080fd5b808484018584013760008482840101525080935050505092959194509250565b600181811c908216806144ed57607f821691505b602082108103613e75577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b803565ffffffffffff81168114613fc757600080fd5b69ffffffffffffffffffff614550826140ba565b16825261455f60208201614526565b65ffffffffffff80821660208501528061457b60408501614526565b166040850152505061458f606082016140fc565b61ffff8082166060850152806145a7608085016140fc565b16608085015250506145bb60a08201613fb7565b151560a08301525050565b60c08101610824828461453c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610824576108246145d4565b600082614650577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126146d357600080fd5b830160208101925035905067ffffffffffffffff8111156146f357600080fd5b803603821315613ebd57600080fd5b600060608301823584526020808401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261474257600080fd5b8401818101903567ffffffffffffffff81111561475e57600080fd5b8060051b80360383131561477157600080fd5b6060848901529381905260809387018401938290880160005b838110156147e2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a88030182526147c3838661469e565b6147ce898284614655565b98505050918501919085019060010161478a565b5050505050506147f5604084018461469e565b8583036040870152614808838284614655565b9695505050505050565b602081526000612a876020830184614702565b6bffffffffffffffffffffffff81168114610f5d57600080fd5b60006020828403121561485157600080fd5b8135612a8781614825565b813561486781613cfc565b73ffffffffffffffffffffffffffffffffffffffff811690507fffffffffffffffffffffffff0000000000000000000000000000000000000000818184541617835560208401356148b781614825565b60a01b1617905550565b73ffffffffffffffffffffffffffffffffffffffff831681526101008101612a87602083018469ffffffffffffffffffff815116825262ffffff6020820151166020830152604081015164ffffffffff8082166040850152806060840151166060850152806080840151166080850152505060a081015161ffff80821660a08501528060c08401511660c085015250505050565b601f821115610f4d57600081815260208120601f850160051c8101602086101561497c5750805b601f850160051c820191505b81811015610b5557828155600101614988565b67ffffffffffffffff8311156149b3576149b3614013565b6149c7836149c183546144d9565b83614955565b6000601f841160018114614a1957600085156149e35750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612fd5565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015614a685786850135825560209485019460019092019101614a48565b5086821015614aa3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610824576108246145d4565b80820180821115610824576108246145d4565b6020815260006137c1602083018486614655565b803563ffffffff81168114613fc757600080fd5b69ffffffffffffffffffff614b17826140ba565b16825261ffff614b29602083016140fc565b166020830152614b3b60408201614526565b65ffffffffffff808216604085015280614b5760608501614526565b1660608501525050608081013560ff81168114614b7357600080fd5b60ff166080830152614b8760a08201614aef565b63ffffffff1660a0830152614b9e60c082016140fc565b61ffff1660c0830152614bb360e08201613fb7565b80151560e0840152505050565b73ffffffffffffffffffffffffffffffffffffffff831681526101208101612a876020830184614b03565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c2057600080fd5b83018035915067ffffffffffffffff821115614c3b57600080fd5b602001915036819003821315613ebd57600080fd5b600060208284031215614c6257600080fd5b612a8782614526565b73ffffffffffffffffffffffffffffffffffffffff8316815260e08101612a87602083018461453c565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000614cc5604083018486614655565b95945050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112614d0257600080fd5b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006137c16040830184614702565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614d7057600080fd5b83018035915067ffffffffffffffff821115614d8b57600080fd5b6020019150600581901b3603821315613ebd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614e0757600080fd5b83018035915067ffffffffffffffff821115614e2257600080fd5b6020019150600881901b3603821315613ebd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84811682528316602082015261014081016137c16040830184614b03565b60006101408201905073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525069ffffffffffffffffffff835116604083015261ffff602084015116606083015265ffffffffffff60408401511660808301526060830151614ee560a084018265ffffffffffff169052565b50608083015160ff811660c08401525060a083015163ffffffff811660e08401525060c083015161ffff81166101008401525060e08301518015156101208401525b50949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f6557600080fd5b83018035915067ffffffffffffffff821115614f8057600080fd5b602001915060e081023603821315613ebd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff848116825283166020820152610120810169ffffffffffffffffffff614fd1846140ba565b16604083015262ffffff614fe7602085016140d4565b166060830152614ff9604084016140e7565b64ffffffffff808216608085015280615014606087016140e7565b1660a085015280615027608087016140e7565b1660c0850152505061503b60a084016140fc565b61ffff1660e083015261505060c084016140fc565b61ffff8116610100840152614f27565b73ffffffffffffffffffffffffffffffffffffffff84811682528316602082015261012081016137c1604083018469ffffffffffffffffffff815116825262ffffff6020820151166020830152604081015164ffffffffff8082166040850152806060840151166060850152806080840151166080850152505060a081015161ffff80821660a08501528060c08401511660c085015250505050565b6000835161510e818460208801613c62565b835190830190615122818360208801613c62565b01949350505050565b815167ffffffffffffffff81111561514557615145614013565b6151598161515384546144d9565b84614955565b602080601f8311600181146151ac57600084156151765750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610b55565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156151f9578886015182559484019460019091019084016151da565b508582101561523557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60208082528181018390526000908460408401835b8681101561529557823561526d81613cfc565b73ffffffffffffffffffffffffffffffffffffffff168252918301919083019060010161525a565b509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526148086080830184613c86565b6000602082840312156152f157600080fd5b8151612a8781613c1756fea164736f6c6343000811000a