[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "EmptyString", "type": "error" }, { "inputs": [], "name": "FileAlreadyRegistered", "type": "error" }, { "inputs": [], "name": "FileNotRegistered", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "MismatchedArrayLengths", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OverLimitSupply", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotInRange", "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" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "oldBaseUri", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "BaseURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newLimitSupply", "type": "uint256" } ], "name": "LimitSupplySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "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": true, "internalType": "address", "name": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "TokenURIsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" }, { "internalType": "address[]", "name": "fileStorageAddresses", "type": "address[]" } ], "name": "addFile", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "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": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "customRendererConfig", "outputs": [ { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "bool", "name": "processMintDataOnRenderer", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "fileContents", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "fileStorage", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "files", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "generativeCodeUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "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": "creator", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "address", "name": "_observability", "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": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToOneRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintSameAmountToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "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": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "fileName", "type": "string" } ], "name": "removeFile", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenGroupingId", "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": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "payable", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "renderer", "type": "address" }, { "internalType": "bool", "name": "processMintDataOnRenderer", "type": "bool" } ], "internalType": "struct ERC721GeneralSequenceBase.CustomRendererConfig", "name": "_customRendererConfig", "type": "tuple" } ], "name": "setCustomRenderer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" } ], "name": "setLimitSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615d7480620000216000396000f3fe6080604052600436106102865760003560e01c806301ffc9a71461028b57806302ee1211146102c0578063047fc9aa146102ed578063063a75021461031057806306fdde0314610327578063081812fc14610349578063095ea7b31461037657806318160ddd14610389578063184a94d51461039e57806318bae6c8146103be57806323b872dd146103de5780632a55205a146103f15780632a5ac7641461041f5780632b566c2a1461043f5780632ddcb21f1461045f5780632fc3a8d9146104765780633113cca0146104965780633713c1a1146104b657806342842e0e146104d657806342966c68146104e957806347230dcb146105095780634f58122a146105295780634fc8416d1461054957806350cf5a311461058457806351f13167146105a457806355f804b3146105c4578063572b6c05146105e45780635be95448146106045780636352211e146106245780636502abea146106445780636c0360eb146106645780636f33f1451461067957806370a082311461068e578063715018a6146106ae5780637c39601d146106c3578063834a20df146106e55780638da5cb5b1461070557806395d89b411461071a578063a22cb4651461072f578063a305f5b21461074f578063abf90f7b1461076f578063b5c5801e1461078f578063b88d4fde146107a4578063bfb2995c146107b7578063c2f50701146107d7578063c87b56dd146107ec578063db3e4c841461080c578063e8a3d4851461082c578063e985e9c514610841578063eb87215014610861578063ee295d6214610881578063eeab0589146108a1578063ef60ceaf146108c1578063f1afe04d146108e1578063f2fde38b14610901578063f7441c3a14610921578063f97b57ec14610941575b600080fd5b34801561029757600080fd5b506102ab6102a6366004614b52565b610956565b60405190151581526020015b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004614bb7565b610967565b6040516102b79190614bf8565b3480156102f957600080fd5b50610302610a57565b6040519081526020016102b7565b34801561031c57600080fd5b50610325610a66565b005b34801561033357600080fd5b5061033c610b26565b6040516102b79190614c9d565b34801561035557600080fd5b50610369610364366004614cb0565b610bc1565b6040516102b79190614cc9565b610325610384366004614cf2565b610c05565b34801561039557600080fd5b50610302610c15565b3480156103aa57600080fd5b506103026103b9366004614d1e565b610c35565b3480156103ca57600080fd5b5060cb54610369906001600160a01b031681565b6103256103ec366004614d3b565b610d54565b3480156103fd57600080fd5b5061041161040c366004614d7c565b610ef8565b6040516102b7929190614d9e565b34801561042b57600080fd5b5061032561043a366004614db7565b610f93565b34801561044b57600080fd5b5061033c61045a366004614bb7565b611029565b34801561046b57600080fd5b506103026101085481565b34801561048257600080fd5b50610325610491366004614e94565b611196565b3480156104a257600080fd5b506103256104b1366004614edf565b611317565b3480156104c257600080fd5b506103256104d1366004614cb0565b61140b565b6103256104e4366004614d3b565b6114b7565b3480156104f557600080fd5b50610325610504366004614cb0565b6114d2565b34801561051557600080fd5b50610325610524366004614d1e565b61168e565b34801561053557600080fd5b50610325610544366004614f4a565b611742565b34801561055557600080fd5b5061010954610576906001600160a01b03811690600160a01b900460ff1682565b6040516102b7929190614f7f565b34801561059057600080fd5b5061032561059f366004614d1e565b611960565b3480156105b057600080fd5b506103256105bf366004614fac565b611ac2565b3480156105d057600080fd5b506103256105df366004614bb7565b611b33565b3480156105f057600080fd5b506102ab6105ff366004614d1e565b611cda565b34801561061057600080fd5b5061032561061f366004614cf2565b611cee565b34801561063057600080fd5b5061036961063f366004614cb0565b611de0565b34801561065057600080fd5b5061036961065f366004614cb0565b611deb565b34801561067057600080fd5b5061033c611e1a565b34801561068557600080fd5b5061033c611ea8565b34801561069a57600080fd5b506103026106a9366004614d1e565b611eb8565b3480156106ba57600080fd5b50610325611f17565b3480156106cf57600080fd5b506106d8611f29565b6040516102b79190614fc8565b3480156106f157600080fd5b50610325610700366004614d1e565b6120b0565b34801561071157600080fd5b5061036961212e565b34801561072657600080fd5b5061033c61213d565b34801561073b57600080fd5b5061032561074a366004615038565b612155565b34801561075b57600080fd5b5061032561076a366004614d1e565b6121d2565b34801561077b57600080fd5b5061032561078a366004615134565b612336565b34801561079b57600080fd5b50610325612589565b6103256107b2366004615197565b6126dd565b3480156107c357600080fd5b506103256107d2366004615202565b612718565b3480156107e357600080fd5b50610325612a38565b3480156107f857600080fd5b5061033c610807366004614cb0565b612b49565b34801561081857600080fd5b5061032561082736600461529b565b612bd9565b34801561083857600080fd5b5061033c612d0c565b34801561084d57600080fd5b506102ab61085c3660046152d4565b612d1a565b34801561086d57600080fd5b5060d054610369906001600160a01b031681565b34801561088d57600080fd5b5060cf54610369906001600160a01b031681565b3480156108ad57600080fd5b506103256108bc36600461529b565b612d57565b3480156108cd57600080fd5b506103256108dc366004614fac565b613021565b3480156108ed57600080fd5b506103256108fc366004614bb7565b61322f565b34801561090d57600080fd5b5061032561091c366004614d1e565b6134ba565b34801561092d57600080fd5b5061032561093c366004614f4a565b613530565b34801561094d57600080fd5b506102e061369f565b6000610961826136ab565b92915050565b6060600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926109b69250849150615302565b908152604051908190036020019020546109da576109da63098f417360e21b6136f9565b61010a84846040516109ed92919061531e565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015610a4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a2b575b505050505091505092915050565b6000610a61613702565b905090565b610a6e613715565b610a76613784565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b0257600080fd5b505af1158015610b16573d6000803e3d6000fd5b50505050610b246001609755565b565b6060610b306137e5565b6002018054610b3e9061532e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6a9061532e565b8015610bb75780601f10610b8c57610100808354040283529160200191610bb7565b820191906000526020600020905b815481529060010190602001808311610b9a57829003601f168201915b5050505050905090565b6000610bcc82613809565b610be057610be06333d1c03960e21b6136f9565b610be86137e5565b60009283526006016020525060409020546001600160a01b031690565b610c1182826001613865565b5050565b60006001610c216137e5565b60010154610c2d6137e5565b540303919050565b6000610c4a610c42613916565b60c990613920565b610c5e57610c5e633e34a41b60e21b6136f9565b610c66613784565b60cf54600160a01b900460ff1660011415610c8b57610c8b6345a9661760e01b6136f9565b6000610c9561393c565b9050610ca08161394c565b610cab836001613973565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff161580156020830152610d42578051604051630298386160e01b81526001600160a01b0390911690630298386190610d0f9085906001908990600401615363565b600060405180830381600087803b158015610d2957600080fd5b505af1158015610d3d573d6000803e3d6000fd5b505050505b509050610d4f6001609755565b919050565b6000610d5f82613a44565b6001600160a01b039485169490915081168414610d8557610d8562a1148160e81b6136f9565b600080610d9184613b02565b91509150610da68187610da13390565b613b2a565b610dc857610db48633612d1a565b610dc857610dc8632ce44b5f60e11b6136f9565b8015610dd357600082555b610ddb6137e5565b6001600160a01b0387166000908152600591909101602052604090208054600019019055610e076137e5565b6001600160a01b03861660009081526005919091016020526040902080546001019055610e3885600160e11b613b3f565b610e406137e5565b60008681526004919091016020526040902055600160e11b8316610eaf5760018401610e6a6137e5565b60008281526004919091016020526040902054610ead57610e896137e5565b548114610ead5783610e996137e5565b600083815260049190910160205260409020555b505b6001600160a01b038516848188600080516020615d28833981519152600080a480610ee457610ee4633a954ecd60e21b6136f9565b610eef878787613b54565b50505050505050565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff16928201929092528291610f6357506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b8051602082015190935061271090610f7f9061ffff1686615398565b610f8991906153b7565b9150509250929050565b610f9b613715565b610fa786868686613cef565b610fb46101078383614912565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610fef90899089908990899089908990600401615402565b600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b50505050505050505050565b6060600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926110789250849150615302565b9081526040519081900360200190205461109c5761109c63098f417360e21b6136f9565b600061010a85856040516110b192919061531e565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561110d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110ef575b505083516040805160208082018352600091829052915196975091959450909250905081805b858110156111785786818151811061114d5761114d61544b565b602002602001015191506001611161833b90565b039350836001848701843c91830191600101611133565b5050601f19601f820181168401604052018252509695505050505050565b6111a1610c42613916565b6111b5576111b5633e34a41b60e21b6136f9565b6111bd613784565b60cf54600160a01b900460ff16600114156111e2576111e26345a9661760e01b6136f9565b81600060016111ef61393c565b6111f99190615461565b905060005b828110156112485761123686868381811061121b5761121b61544b565b90506020020160208101906112309190614d1e565b85613973565b8061124081615478565b9150506111fe565b506112656112568484615398565b6112609083615493565b61394c565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff1615801560208301526113055780516001600160a01b03166358b916466112b0846001615493565b8689896040518563ffffffff1660e01b81526004016112d294939291906154f4565b600060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050505b5050506113126001609755565b505050565b61131f613715565b600084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a9261136c9250849150615302565b90815260405190819003602001902054156113915761139163aa2fa7cb60e01b6136f9565b61010b805460018101825560009190915281516113d5917fc4a0eda7235d7f6fd09c1e1f9f82dc3264d0d2f064cb41576c42a996a7be289201906020840190614996565b50828261010a836040516113e99190615302565b908152604051908190036020019020611403929091614a0a565b505050505050565b611413613715565b61141b613784565b61010881905560405181907fad7735a1decc3db45c1eab757cc4a1cb4bff8e332877b55f6db4ea11d82320c690600090a260d054604051630941255b60e21b8152600481018390526001600160a01b0390911690632504956c90602401600060405180830381600087803b15801561149257600080fd5b505af11580156114a6573d6000803e3d6000fd5b505050506114b46001609755565b50565b611312838383604051806020016040528060008152506126dd565b6114da613784565b60006114e582611deb565b905060006114f1613916565b90506001600160a01b0382161580159061157a57506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a7906115399063129dae8b60e01b9060040161551e565b602060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a919061553e565b156115f557600061158a84611de0565b60405163129dae8b60e01b81529091506001600160a01b0384169063129dae8b906115bd9085908590899060040161555b565b600060405180830381600087803b1580156115d757600080fd5b505af11580156115eb573d6000803e3d6000fd5b5050505050611612565b6115ff8184613d24565b611612576116126282b42960e81b6136f9565b61161b83613d5d565b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190611650908490600090889060040161555b565b600060405180830381600087803b15801561166a57600080fd5b505af115801561167e573d6000803e3d6000fd5b5050505050506114b46001609755565b611696613715565b6116a160c982613d9d565b6116b5576116b563ea6eb5c360e01b6136f9565b6040516001906001600160a01b03831690600080516020615d0883398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f9061170d908490600190600401614f7f565b600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b5050505050565b61174a613784565b6000611754613916565b90508160005b818110156118b657600060cc600087878581811061177a5761177a61544b565b60209081029290920135835250810191909152604001600020546001600160a01b03169050806117b4576117b4635f98be1560e11b6136f9565b806001600160a01b031663ce2003a5858888868181106117d6576117d661544b565b905060200201356040518363ffffffff1660e01b81526004016117fa929190614d9e565b6020604051808303816000875af1158015611819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183d919061553e565b6118515761185163251c48e160e11b6136f9565b600060cc60008888868181106118695761186961544b565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806118ae90615478565b91505061175a565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa84846040516118e89291906155b5565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d937349061192290879087906004016155b5565b600060405180830381600087803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b505050505050610c116001609755565b611968613784565b61197181613db2565b61198557611985631a7387bd60e11b6136f9565b600061198f613916565b60cf549091506001600160a01b0316806119d7576119ab61212e565b6001600160a01b0316826001600160a01b0316146119d2576119d26282b42960e81b6136f9565b611a5d565b60405163bcdbc94760e01b81526001600160a01b038481166004830152838116602483015282169063bcdbc94790604401602060405180830381865afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a49919061553e565b611a5d57611a5d63e10a050560e01b6136f9565b60cf80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615d4883398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611650908690600401614cc9565b611aca613715565b6000611ad96020830183614d1e565b6001600160a01b03161415611b255760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b60448201526064015b60405180910390fd5b8061010961131282826155e9565b611b3b613784565b80611b5057611b5063ecd7b0d160e01b6136f9565b60cb546001600160a01b031680611b9c57611b6961212e565b6001600160a01b0316611b7a613916565b6001600160a01b031614611b9757611b976282b42960e81b6136f9565b611c2c565b806001600160a01b0316633d820a4d611bb3613916565b600086866040518563ffffffff1660e01b8152600401611bd69493929190615628565b6020604051808303816000875af1158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c19919061553e565b611c2c57611c2c6282b42960e81b6136f9565b611c6b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613dce92505050565b60d054604051632cfd654b60e11b81526001600160a01b03909116906359faca9690611c9d9086908690600401615650565b600060405180830381600087803b158015611cb757600080fd5b505af1158015611ccb573d6000803e3d6000fd5b5050505050610c116001609755565b6065546001600160a01b0391821691161490565b611cf9610c42613916565b611d0d57611d0d633e34a41b60e21b6136f9565b611d15613784565b60cf54600160a01b900460ff1660011415611d3a57611d3a6345a9661760e01b6136f9565b60006001611d4661393c565b611d509190615461565b9050611d5c8383613973565b611d696112608383615493565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff161580156020830152611dd45780516001600160a01b03166302983861611db4846001615493565b85876040518463ffffffff1660e01b815260040161192293929190615363565b5050610c116001609755565b600061096182613a44565b60cb54600082815260cc60205260409020546001600160a01b0391821691168015611e14578091505b50919050565b60d58054611e279061532e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e539061532e565b8015611ea05780601f10611e7557610100808354040283529160200191611ea0565b820191906000526020600020905b815481529060010190602001808311611e8357829003601f168201915b505050505081565b606061010c8054610b3e9061532e565b60006001600160a01b038216611ed857611ed86323d3ad8160e21b6136f9565b6001600160401b03611ee86137e5565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b611f1f613715565b610b246000613e1b565b6060600061010b805480602002602001604051908101604052809291908181526020016000905b82821015611ffc578382906000526020600020018054611f6f9061532e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9b9061532e565b8015611fe85780601f10611fbd57610100808354040283529160200191611fe8565b820191906000526020600020905b815481529060010190602001808311611fcb57829003601f168201915b505050505081526020019060010190611f50565b505050509050600081516001600160401b0381111561201d5761201d615071565b60405190808252806020026020018201604052801561205057816020015b606081526020019060019003908161203b5790505b50905060005b82518110156120a9578281815181106120715761207161544b565b602002602001015182828151811061208b5761208b61544b565b602002602001018190525080806120a190615478565b915050612056565b5092915050565b6120b8613715565b6120c360c982613e6d565b6120d7576120d763ea6eb5c360e01b6136f9565b6040516000906001600160a01b03831690600080516020615d08833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f9061170d908490600090600401614f7f565b6033546001600160a01b031690565b60606121476137e5565b6003018054610b3e9061532e565b8061215e6137e5565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6121da613784565b6121e381613e82565b6121f7576121f7631a7387bd60e11b6136f9565b6000612201613916565b60cb549091506001600160a01b0316806122495761221d61212e565b6001600160a01b0316826001600160a01b031614612244576122446282b42960e81b6136f9565b6122d1565b6040516342f19adb60e11b81526001600160a01b038216906385e335b69061227a9085906000908890600401615664565b6020604051808303816000875af1158015612299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122bd919061553e565b6122d1576122d163e10a050560e01b6136f9565b60cb80546001600160a01b0319166001600160a01b038516908117909155604051600080516020615ce883398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611650908690600401614cc9565b600054610100900460ff16158080156123565750600054600160ff909116105b806123705750303b158015612370575060005460ff166001145b6123d35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611b1c565b6000805460ff1916600117905580156123f6576000805461ff0019166101001790555b60008060008060008060008060008060008d80602001905181019061241b919061574b565b9a509a509a509a509a509a509a509a509a509a509a50612439613e9e565b6124448f8b8b613ec5565b61244d86613fa1565b6124578888613fea565b61246260c986613d9d565b508a51612477906101079060208e0190614996565b50835161248c9061010c906020870190614996565b5060405163332a79b160e01b81526001600160a01b038e169063332a79b1906124b9903090600401614cc9565b600060405180830381600087803b1580156124d357600080fd5b505af11580156124e7573d6000803e3d6000fd5b505050508c60d060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000835111156125255761252583613dce565b8115612532576101088290555b50505050505050505050508015612583576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b612591613784565b600061259b613916565b60cb549091506001600160a01b0316806125bf576125bf635f98be1560e11b6136f9565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a5906125ee908590600090600401614d9e565b6020604051808303816000875af115801561260d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612631919061553e565b6126455761264563251c48e160e11b6136f9565b60cb80546001600160a01b0319169055604051600090600080516020615ce8833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd9061269f90600090600401614cc9565b600060405180830381600087803b1580156126b957600080fd5b505af11580156126cd573d6000803e3d6000fd5b505050505050610b246001609755565b6126e8848484610d54565b6001600160a01b0383163b15612583576127048484848461401b565b612583576125836368d2bf6b60e11b6136f9565b612720613784565b600061272a613916565b9050600061273661212e565b60cf549091506001600160a01b0316858161283757826001600160a01b0316846001600160a01b031614612773576127736282b42960e81b6136f9565b60005b81811015612831576127b98787838181106127935761279361544b565b90506040020160200160208101906127ab919061589a565b61271061ffff909116111590565b6127cd576127cd633daf741f60e21b6136f9565b8686828181106127df576127df61544b565b90506040020160ce60008b8b858181106127fb576127fb61544b565b905060200201358152602001908152602001600020818161281c91906158b7565b5081905061282981615478565b915050612776565b50612985565b60005b81811015612983576128578787838181106127935761279361544b565b61286b5761286b633daf741f60e21b6136f9565b826001600160a01b031663ad6e40c78a8a8481811061288c5761288c61544b565b905060200201358989858181106128a5576128a561544b565b905060400201886040518463ffffffff1660e01b81526004016128ca9392919061592b565b602060405180830381865afa1580156128e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290b919061553e565b61291f5761291f63270e710760e21b6136f9565b8686828181106129315761293161544b565b90506040020160ce60008b8b8581811061294d5761294d61544b565b905060200201358152602001908152602001600020818161296e91906158b7565b5081905061297b81615478565b91505061283a565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c888888886040516129ba9493929190615958565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde906129f8908b908b908b908b90600401615958565b600060405180830381600087803b158015612a1257600080fd5b505af1158015612a26573d6000803e3d6000fd5b50505050505050506125836001609755565b612a40613784565b6000612a4a613916565b60cf549091506001600160a01b031680612a6e57612a6e635f98be1560e11b6136f9565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa90612a9a908590600401614cc9565b602060405180830381865afa158015612ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612adb919061553e565b612aef57612aef63251c48e160e11b6136f9565b60cf80546001600160a01b0319169055604051600090600080516020615d48833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab4229061269f90600090600401614cc9565b610109546060906001600160a01b031615612bd0576101095460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015612ba8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096191908101906159b0565b610961826140fa565b612be1613784565b82818114612bf957612bf9632b477e7160e11b6136f9565b60005b81811015612c5b57612c49868683818110612c1957612c1961544b565b90506020020135858584818110612c3257612c3261544b565b9050602002810190612c4491906159e4565b6141c5565b80612c5381615478565b915050612bfc565b507f2df7dd608aac5806395769062aca937bf08722cb45659d38c0cce82f5cd0cde385858585604051612c919493929190615a2a565b60405180910390a160d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace190612ccf908890889088908890600401615a2a565b600060405180830381600087803b158015612ce957600080fd5b505af1158015612cfd573d6000803e3d6000fd5b50505050506125836001609755565b6101078054611e279061532e565b6000612d246137e5565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b612d5f613784565b6000612d69613916565b90506000612d7561212e565b90508460005b81811015612f6e57612db2868683818110612d9857612d9861544b565b9050602002016020810190612dad9190614d1e565b613e82565b612dc657612dc6631a7387bd60e11b6136f9565b6000612de9898984818110612ddd57612ddd61544b565b90506020020135611deb565b90506001600160a01b038116612e2657836001600160a01b0316856001600160a01b031614612e2157612e216282b42960e81b6136f9565b612ee4565b806001600160a01b03166385e335b6868b8b86818110612e4857612e4861544b565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b168152612e8d969591909302013592506001600160a01b031690600401615664565b6020604051808303816000875af1158015612eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed0919061553e565b612ee457612ee463e10a050560e01b6136f9565b868683818110612ef657612ef661544b565b9050602002016020810190612f0b9190614d1e565b60cc60008b8b86818110612f2157612f2161544b565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550508080612f6690615478565b915050612d7b565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e87878787604051612fa49493929190615ada565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612fe2908a908a908a908a90600401615ada565b600060405180830381600087803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b505050505050506125836001609755565b613029613784565b613039604082016020830161589a565b61271061ffff8216111561305757613057633daf741f60e21b6136f9565b6000613061613916565b60cf549091506001600160a01b0316806130a95761307d61212e565b6001600160a01b0316826001600160a01b0316146130a4576130a46282b42960e81b6136f9565b61312c565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f0906130d79087908690600401615b01565b602060405180830381865afa1580156130f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613118919061553e565b61312c5761312c63270e710760e21b6136f9565b8360cd61313982826158b7565b5061314c9050604085016020860161589a565b61ffff1661315d6020860186614d1e565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06131b06020870187614d1e565b6131c0604088016020890161589a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b15801561320a57600080fd5b505af115801561321e573d6000803e3d6000fd5b505050505050506114b46001609755565b613237613715565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060405192935061010a926132849250849150615302565b908152604051908190036020019020546132a8576132a863098f417360e21b6136f9565b600061010b805480602002602001604051908101604052809291908181526020016000905b828210156133795783829060005260206000200180546132ec9061532e565b80601f01602080910402602001604051908101604052809291908181526020018280546133189061532e565b80156133655780601f1061333a57610100808354040283529160200191613365565b820191906000526020600020905b81548152906001019060200180831161334857829003601f168201915b5050505050815260200190600101906132cd565b50505050905060006001825161338f9190615461565b6001600160401b038111156133a6576133a6615071565b6040519080825280602002602001820160405280156133d957816020015b60608152602001906001900390816133c45790505b508251909150600090815b818110156134795785805190602001208582815181106134065761340661544b565b60200260200101518051906020012014156134245760019250613467565b8481815181106134365761343661544b565b602002602001015184848361344b9190615461565b8151811061345b5761345b61544b565b60200260200101819052505b8061347181615478565b9150506133e4565b50825161348e9061010b906020860190614a5d565b5061010a856040516134a09190615302565b90815260200160405180910390206000610eef9190614ab6565b6134c2613715565b6001600160a01b0381166135275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611b1c565b6114b481613e1b565b61353b610c42613916565b61354f5761354f633e34a41b60e21b6136f9565b613557613784565b60cf54600160a01b900460ff166001141561357c5761357c6345a9661760e01b6136f9565b806000600161358961393c565b6135939190615461565b905060005b828110156135e3576135d18585838181106135b5576135b561544b565b90506020020160208101906135ca9190614d1e565b6001613973565b806135db81615478565b915050613598565b506135f16112608383615493565b60408051808201909152610109546001600160a01b0381168252600160a01b900460ff1615801560208301526136925780516001600160a01b03166358b9164661363c846001615493565b600188886040518563ffffffff1660e01b815260040161365f94939291906154f4565b600060405180830381600087803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b505050505b505050610c116001609755565b6060610a6160c96142c6565b60006301ffc9a760e01b6001600160e01b0319831614806136dc57506380ac58cd60e01b6001600160e01b03198316145b806109615750506001600160e01b031916635b5e139f60e01b1490565b6114b4816142d3565b6000600161370e6137e5565b5403919050565b61371d613916565b6001600160a01b031661372e61212e565b6001600160a01b031614610b245760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611b1c565b600260975414156137d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611b1c565b6002609755565b6001609755565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b600081600111610d4f5761381b6137e5565b54821015610d4f5760005b61382e6137e5565b600084815260049190910160205260409020549050806138585761385183615b27565b9250613826565b600160e01b161592915050565b600061387083611de0565b90508180156138885750336001600160a01b03821614155b156138ab576138978133612d1a565b6138ab576138ab6367d9dca160e11b6136f9565b836138b46137e5565b6000858152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551859287811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a450505050565b6000610a616142dc565b6000613935836001600160a01b0384166142e6565b9392505050565b60006139466137e5565b54919050565b61010854801580159061395e57508082115b15610c1157610c1163be1a657d60e01b6136f9565b600061397d6137e5565b549050816139955761399563b562e8dd60e01b6136f9565b6139a5836001841460e11b613b3f565b6139ad6137e5565b600083815260049190910160205260409020556001600160401b0182026139d26137e5565b6001600160a01b03851660008181526005929092016020526040909120805490920190915580613a0b57613a0b622e076360e81b6136f9565b818301825b80836000600080516020615d28833981519152600080a460010180821415613a105781613a3b6137e5565b55505050505050565b600081600111613af257613a566137e5565b60008381526004919091016020526040902054905080613ae257613a786137e5565b548210613a8f57613a8f636f96cda160e11b6136f9565b613a976137e5565b6000199092016000818152600493909301602052604090922054905080613abd57613a8f565b600160e01b8116613acd57919050565b613add636f96cda160e11b6136f9565b613a8f565b600160e01b8116613af257919050565b610d4f636f96cda160e11b6136f9565b6000806000613b0f6137e5565b60009485526006016020525050604090912080549092909150565b6001600160a01b039081169116811491141790565b4260a01b176001600160a01b03919091161790565b6000613b5f82611deb565b90506001600160a01b03811615801590613be857506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790613ba790637af46b4f60e11b9060040161551e565b602060405180830381865afa158015613bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be8919061553e565b15613c8357806001600160a01b0316638af6791b613c04613916565b6040516001600160e01b031960e084901b1681526001600160a01b039182166004820152818816602482015290861660448201526064810185905260a06084820152600060a482015260c401600060405180830381600087803b158015613c6a57600080fd5b505af1158015613c7e573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190613cb79087908790879060040161555b565b600060405180830381600087803b158015613cd157600080fd5b505af1158015613ce5573d6000803e3d6000fd5b5050505050505050565b8383613cf96137e5565b6002019190613d09929190614912565b508181613d146137e5565b600301919061173b929190614912565b600080613d3083611de0565b9050613d3c8185612d1a565b80613d555750613d55613d4e84610bc1565b8286613b2a565b949350505050565b613d66816142fe565b600081815260d1602052604090208054613d7f9061532e565b1590506114b457600081815260d1602052604081206114b491614ad4565b6000613935836001600160a01b038416614309565b60006109616001600160a01b03831663440444c560e11b614353565b7f2e0a5b969d96a99aee0b35787d9a60516a02ca6f528a5f66d3f936468d8f038260d582604051613e00929190615b3e565b60405180910390a18051610c119060d5906020840190614996565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000613935836001600160a01b03841661436f565b60006109616001600160a01b038316633b209e2f60e11b614353565b600054610100900460ff16610b245760405162461bcd60e51b8152600401611b1c90615bfa565b600054610100900460ff16613eec5760405162461bcd60e51b8152600401611b1c90615bfa565b602082015161271061ffff82161115613f0f57613f0f633daf741f60e21b6136f9565b613f17614462565b613f1f614491565b613f2884613e1b565b82516001600160a01b031615613f6f57825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b038216156125835760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff16613fc85760405162461bcd60e51b8152600401611b1c90615bfa565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166140115760405162461bcd60e51b8152600401611b1c90615bfa565b610c1182826144c0565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290614050903390899088908890600401615c45565b6020604051808303816000875af192505050801561408b575060408051601f3d908101601f1916820190925261408891810190615c78565b60015b6140dd573d8080156140b9576040519150601f19603f3d011682016040523d82523d6000602084013e6140be565b606091505b5080516140d5576140d56368d2bf6b60e11b6136f9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b606061410582613809565b6141195761411963677510db60e11b6136f9565b600082815260d16020526040812080546141329061532e565b80601f016020809104026020016040519081016040528092919081815260200182805461415e9061532e565b80156141ab5780601f10614180576101008083540402835291602001916141ab565b820191906000526020600020905b81548152906001019060200180831161418e57829003601f168201915b505050505090508051600014156109615761393583614536565b60006141d084611deb565b905060006141dc613916565b905060006141e861212e565b90506001600160a01b03831661422557806001600160a01b0316826001600160a01b031614614220576142206282b42960e81b6136f9565b6142ad565b604051633d820a4d60e01b81526001600160a01b03841690633d820a4d906142579085908a908a908a90600401615628565b6020604051808303816000875af1158015614276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429a919061553e565b6142ad576142ad6282b42960e81b6136f9565b600086815260d160205260409020610eef908686614912565b60606000613935836145b1565b6114b48161460d565b6000610a61614617565b60009081526001919091016020526040902054151590565b6114b4816000614639565b600061431583836142e6565b61434b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610961565b506000610961565b600061435e83614790565b8015613935575061393583836147c3565b60008181526001830160205260408120548015614458576000614393600183615461565b85549091506000906143a790600190615461565b905081811461440c5760008660000182815481106143c7576143c761544b565b90600052602060002001549050808760000184815481106143ea576143ea61544b565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061441d5761441d615c95565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610961565b6000915050610961565b600054610100900460ff166144895760405162461bcd60e51b8152600401611b1c90615bfa565b610b24614857565b600054610100900460ff166144b85760405162461bcd60e51b8152600401611b1c90615bfa565b610b2461488e565b600054610100900460ff166144e75760405162461bcd60e51b8152600401611b1c90615bfa565b816144f06137e5565b6002019080519060200190614506929190614996565b50806145106137e5565b6003019080519060200190614526929190614996565b5060016145316137e5565b555050565b606061454182613809565b61455557614555630a14c4b560e41b6136f9565b600061455f6148b5565b90508051600014156145805760405180602001604052806000815250613935565b8061458a846148c4565b60405160200161459b929190615cab565b6040516020818303038152906040529392505050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561460157602002820191906000526020600020905b8154815260200190600101908083116145ed575b50505050509050919050565b8060005260046000fd5b600061462233611cda565b15614634575060131936013560601c90565b503390565b600061464483613a44565b90508060008061465386613b02565b91509150841561468a57614668818433613b2a565b61468a576146768333612d1a565b61468a5761468a632ce44b5f60e11b6136f9565b801561469557600082555b6001600160801b036146a56137e5565b6001600160a01b03851660009081526005919091016020526040902080549190910190556146d783600360e01b613b3f565b6146df6137e5565b60008881526004919091016020526040902055600160e11b841661474e57600186016147096137e5565b6000828152600491909101602052604090205461474c576147286137e5565b54811461474c57846147386137e5565b600083815260049190910160205260409020555b505b60405186906000906001600160a01b03861690600080516020615d28833981519152908390a461477c6137e5565b600190810180549091019055505050505050565b60006147a3826301ffc9a760e01b6147c3565b801561096157506147bc826001600160e01b03196147c3565b1592915050565b6000806301ffc9a760e01b836040516024016147df919061551e565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015614840575060208210155b801561484c5750600081115b979650505050505050565b600054610100900460ff1661487e5760405162461bcd60e51b8152600401611b1c90615bfa565b610b24614889613916565b613e1b565b600054610100900460ff166137de5760405162461bcd60e51b8152600401611b1c90615bfa565b606060d58054610b3e9061532e565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806148fb57614900565b6148de565b50819003601f19909101908152919050565b82805461491e9061532e565b90600052602060002090601f0160209004810192826149405760008555614986565b82601f106149595782800160ff19823516178555614986565b82800160010185558215614986579182015b8281111561498657823582559160200191906001019061496b565b50614992929150614b0a565b5090565b8280546149a29061532e565b90600052602060002090601f0160209004810192826149c45760008555614986565b82601f106149dd57805160ff1916838001178555614986565b82800160010185558215614986579182015b828111156149865782518255916020019190600101906149ef565b828054828255906000526020600020908101928215614986579160200282015b828111156149865781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190614a2a565b828054828255906000526020600020908101928215614aaa579160200282015b82811115614aaa5782518051614a9a918491602090910190614996565b5091602001919060010190614a7d565b50614992929150614b1f565b50805460008255906000526020600020908101906114b49190614b0a565b508054614ae09061532e565b6000825580601f10614af0575050565b601f0160209004906000526020600020908101906114b491905b5b808211156149925760008155600101614b0b565b80821115614992576000614b338282614ad4565b50600101614b1f565b6001600160e01b0319811681146114b457600080fd5b600060208284031215614b6457600080fd5b813561393581614b3c565b60008083601f840112614b8157600080fd5b5081356001600160401b03811115614b9857600080fd5b602083019150836020828501011115614bb057600080fd5b9250929050565b60008060208385031215614bca57600080fd5b82356001600160401b03811115614be057600080fd5b614bec85828601614b6f565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614c395783516001600160a01b031683529284019291840191600101614c14565b50909695505050505050565b60005b83811015614c60578181015183820152602001614c48565b838111156125835750506000910152565b60008151808452614c89816020860160208601614c45565b601f01601f19169290920160200192915050565b6020815260006139356020830184614c71565b600060208284031215614cc257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146114b457600080fd5b60008060408385031215614d0557600080fd5b8235614d1081614cdd565b946020939093013593505050565b600060208284031215614d3057600080fd5b813561393581614cdd565b600080600060608486031215614d5057600080fd5b8335614d5b81614cdd565b92506020840135614d6b81614cdd565b929592945050506040919091013590565b60008060408385031215614d8f57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008060008060008060608789031215614dd057600080fd5b86356001600160401b0380821115614de757600080fd5b614df38a838b01614b6f565b90985096506020890135915080821115614e0c57600080fd5b614e188a838b01614b6f565b90965094506040890135915080821115614e3157600080fd5b50614e3e89828a01614b6f565b979a9699509497509295939492505050565b60008083601f840112614e6257600080fd5b5081356001600160401b03811115614e7957600080fd5b6020830191508360208260051b8501011115614bb057600080fd5b600080600060408486031215614ea957600080fd5b83356001600160401b03811115614ebf57600080fd5b614ecb86828701614e50565b909790965060209590950135949350505050565b60008060008060408587031215614ef557600080fd5b84356001600160401b0380821115614f0c57600080fd5b614f1888838901614b6f565b90965094506020870135915080821115614f3157600080fd5b50614f3e87828801614e50565b95989497509550505050565b60008060208385031215614f5d57600080fd5b82356001600160401b03811115614f7357600080fd5b614bec85828601614e50565b6001600160a01b039290921682521515602082015260400190565b600060408284031215611e1457600080fd5b600060408284031215614fbe57600080fd5b6139358383614f9a565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561501d57603f1988860301845261500b858351614c71565b94509285019290850190600101614fef565b5092979650505050505050565b80151581146114b457600080fd5b6000806040838503121561504b57600080fd5b823561505681614cdd565b915060208301356150668161502a565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156150af576150af615071565b604052919050565b60006001600160401b038211156150d0576150d0615071565b50601f01601f191660200190565b600082601f8301126150ef57600080fd5b81356151026150fd826150b7565b615087565b81815284602083860101111561511757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561514957600080fd5b833561515481614cdd565b925060208401356001600160401b0381111561516f57600080fd5b61517b868287016150de565b925050604084013561518c81614cdd565b809150509250925092565b600080600080608085870312156151ad57600080fd5b84356151b881614cdd565b935060208501356151c881614cdd565b92506040850135915060608501356001600160401b038111156151ea57600080fd5b6151f6878288016150de565b91505092959194509250565b6000806000806040858703121561521857600080fd5b84356001600160401b038082111561522f57600080fd5b61523b88838901614e50565b9096509450602087013591508082111561525457600080fd5b818701915087601f83011261526857600080fd5b81358181111561527757600080fd5b8860208260061b850101111561528c57600080fd5b95989497505060200194505050565b600080600080604085870312156152b157600080fd5b84356001600160401b03808211156152c857600080fd5b614f1888838901614e50565b600080604083850312156152e757600080fd5b82356152f281614cdd565b9150602083013561506681614cdd565b60008251615314818460208701614c45565b9190910192915050565b8183823760009101908152919050565b600181811c9082168061534257607f821691505b60208210811415611e1457634e487b7160e01b600052602260045260246000fd5b92835260208301919091526001600160a01b0316604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156153b2576153b2615382565b500290565b6000826153d457634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061541660608301888a6153d9565b82810360208401526154298187896153d9565b9050828103604084015261543e8185876153d9565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008282101561547357615473615382565b500390565b600060001982141561548c5761548c615382565b5060010190565b600082198211156154a6576154a6615382565b500190565b8183526000602080850194508260005b858110156154e95781356154ce81614cdd565b6001600160a01b0316875295820195908201906001016154bb565b509495945050505050565b8481528360208201526060604082015260006155146060830184866154ab565b9695505050505050565b6001600160e01b031991909116815260200190565b8051610d4f8161502a565b60006020828403121561555057600080fd5b81516139358161502a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b81835260006001600160fb1b0383111561559857600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000613d5560208301848661557f565b80546001600160a01b0319166001600160a01b0392909216919091179055565b81356155f481614cdd565b6155fe81836155c9565b50602082013561560d8161502a565b815460ff60a01b191690151560a01b60ff60a01b1617905550565b60018060a01b03851681528360208201526060604082015260006155146060830184866153d9565b602081526000613d556020830184866153d9565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600082601f83011261569857600080fd5b81516156a66150fd826150b7565b8181528460208386010111156156bb57600080fd5b613d55826020830160208701614c45565b61ffff811681146114b457600080fd5b6000604082840312156156ee57600080fd5b604080519081016001600160401b038111828210171561571057615710615071565b8060405250809150825161572381614cdd565b81526020830151615733816156cc565b6020919091015292915050565b8051610d4f81614cdd565b60008060008060008060008060008060006101808c8e03121561576d57600080fd5b8b516001600160401b0381111561578357600080fd5b61578f8e828f01615687565b9b505061579f8d60208e016156dc565b99506157ad60608d01615740565b60808d01519099506001600160401b038111156157c957600080fd5b6157d58e828f01615687565b60a08e015190995090506001600160401b038111156157f357600080fd5b6157ff8e828f01615687565b97505061580e60c08d01615740565b955061581c60e08d01615740565b6101008d01519095506001600160401b0381111561583957600080fd5b6158458e828f01615687565b6101208e015190955090506001600160401b0381111561586457600080fd5b6158708e828f01615687565b9350506101408c015191506158886101608d01615533565b90509295989b509295989b9093969950565b6000602082840312156158ac57600080fd5b8135613935816156cc565b81356158c281614cdd565b6158cc81836155c9565b5060208201356158db816156cc565b815461ffff60a01b191660a09190911b61ffff60a01b1617905550565b803561590381614cdd565b6001600160a01b03168252602081013561591c816156cc565b61ffff81166020840152505050565b8381526080810161593f60208301856158f8565b6001600160a01b03929092166060919091015292915050565b6000604080835261596c818401878961557f565b83810360208086019190915285825286910160005b868110156159a35761599382846158f8565b9183019190830190600101615981565b5098975050505050505050565b6000602082840312156159c257600080fd5b81516001600160401b038111156159d857600080fd5b613d5584828501615687565b6000808335601e198436030181126159fb57600080fd5b8301803591506001600160401b03821115615a1557600080fd5b602001915036819003821315614bb057600080fd5b604081526000615a3e60408301868861557f565b602083820381850152818583528183019050818660051b8401018760005b88811015615aca57858303601f190184528135368b9003601e19018112615a8257600080fd5b8a0180356001600160401b03811115615a9a57600080fd5b8036038c1315615aa957600080fd5b615ab685828985016153d9565b958701959450505090840190600101615a5c565b50909a9950505050505050505050565b604081526000615aee60408301868861557f565b828103602084015261484c8185876154ab565b60608101615b0f82856158f8565b6001600160a01b039290921660409190910152919050565b600081615b3657615b36615382565b506000190190565b60408152600080845481600182811c915080831680615b5e57607f831692505b6020808410821415615b7e57634e487b7160e01b86526022600452602486fd5b6040880184905260608801828015615b9d5760018114615bae57615bd9565b60ff19871682528282019750615bd9565b60008c81526020902060005b87811015615bd357815484820152908601908401615bba565b83019850505b5050878603818901525050505050615bf18185614c71565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061551490830184614c71565b600060208284031215615c8a57600080fd5b815161393581614b3c565b634e487b7160e01b600052603160045260246000fd5b60008351615cbd818460208801614c45565b602f60f81b9083019081528351615cdb816001840160208801614c45565b0160010194935050505056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7abddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a