[ { "inputs": [], "name": "EmptyString", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "MismatchedArrayLengths", "type": "error" }, { "inputs": [], "name": "NotAContract", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OverLimitSupply", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotInRange", "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": "address", "name": "operator", "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": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes", "name": "key", "type": "bytes" } ], "name": "encryptDecrypt", "outputs": [ { "internalType": "bytes", "name": "result", "type": "bytes" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "freezeMints", "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": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "defaultRoyalty", "type": "tuple" }, { "internalType": "address", "name": "_defaultTokenManager", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "trustedForwarder", "type": "address" }, { "internalType": "address", "name": "initialMinter", "type": "address" }, { "internalType": "string", "name": "newBaseURI", "type": "string" }, { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" }, { "internalType": "bool", "name": "useMarketplaceFiltererRegistry", "type": "bool" }, { "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": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "mintSpecificTokenToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "mintSpecificTokensToOneRecipient", "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": "operatorFiltererRegistry", "outputs": [ { "internalType": "address", "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": "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": "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": "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": "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": "newRegistry", "type": "address" }, { "internalType": "address", "name": "subscription", "type": "address" } ], "name": "setRegistryAndSubscription", "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": "nonpayable", "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" } ]
608060405234801561001057600080fd5b5061530f806100206000396000f3fe608060405234801561001057600080fd5b506004361061027d5760003560e01c806301ffc9a714610282578063047fc9aa146102aa578063063a7502146102c257806306fdde03146102cc578063081812fc146102e1578063095ea7b3146103015780630d640e811461031457806318160ddd14610327578063184a94d51461033057806318bae6c81461034357806323b872dd146103565780632a55205a146103695780632a5ac7641461038a5780632ddcb21f1461039d5780632fc3a8d9146103a75780633713c1a1146103ba57806342842e0e146103cd57806342966c68146103e0578063439fab91146103f357806347230dcb146104065780634f58122a1461041957806350cf5a311461042c578063548205411461043f57806355f804b314610452578063572b6c05146104655780635be95448146104785780636352211e1461048b5780636371fbe71461049e5780636502abea146104b15780636c0360eb146104c457806370a08231146104cc578063715018a6146104df578063752d4cad146104e7578063834a20df146104fa5780638da5cb5b1461050d57806395d89b4114610515578063a22cb4651461051d578063a305f5b214610530578063b0e5afe314610543578063b5c5801e14610557578063b88d4fde1461055f578063bfb2995c14610572578063c2f5070114610585578063c87b56dd1461058d578063db3e4c84146105a0578063e7150322146105b3578063e8a3d485146105c6578063e985e9c5146105ce578063eb872150146105e1578063ee295d62146105f4578063eeab058914610607578063ef60ceaf1461061a578063f2fde38b1461062d578063f7441c3a14610640578063f97b57ec14610653575b600080fd5b6102956102903660046141da565b610668565b60405190151581526020015b60405180910390f35b6102b461016d5481565b6040519081526020016102a1565b6102ca610679565b005b6102d4610739565b6040516102a1919061424f565b6102f46102ef366004614262565b6107cc565b6040516102a1919061427b565b6102ca61030f3660046142af565b6107f4565b6102ca6103223660046142af565b61080d565b61016d546102b4565b6102b461033e3660046142db565b6108b3565b60cb546102f4906001600160a01b031681565b6102ca6103643660046142f8565b61093c565b61037c610377366004614339565b61097d565b6040516102a192919061435b565b6102ca6103983660046143bc565b610a18565b6102b461016e5481565b6102ca6103b5366004614499565b610aae565b6102ca6103c8366004614262565b610b91565b6102ca6103db3660046142f8565b610c3d565b6102ca6103ee366004614262565b610c58565b6102ca6104013660046144e4565b610e14565b6102ca6104143660046142db565b610f25565b6102ca610427366004614525565b610fd9565b6102ca61043a3660046142db565b6111f7565b6102ca61044d366004614687565b611356565b6102ca6104603660046144e4565b61142d565b6102956104733660046142db565b6115d4565b6102ca6104863660046142af565b6115e8565b6102f4610499366004614262565b611684565b6102ca6104ac3660046147cf565b6116a0565b6102f46104bf366004614262565b6117ce565b6102d46117fd565b6102b46104da3660046142db565b61188c565b6102ca6118f9565b6102ca6104f5366004614823565b61190b565b6102ca6105083660046142db565b61191d565b6102f461199b565b6102d46119aa565b6102ca61052b36600461485c565b6119ba565b6102ca61053e3660046142db565b6119ce565b61016b546102f4906001600160a01b031681565b6102ca611b32565b6102ca61056d36600461488a565b611c86565b6102ca6105803660046148f5565b611cc5565b6102ca611fe5565b6102d461059b366004614262565b6120f6565b6102ca6105ae36600461498e565b612101565b6102d46105c13660046149f9565b612234565b6102d46122a9565b6102956105dc366004614823565b6122b7565b60d0546102f4906001600160a01b031681565b60cf546102f4906001600160a01b031681565b6102ca61061536600461498e565b6122e6565b6102ca610628366004614a54565b6125b0565b6102ca61063b3660046142db565b6127be565b6102ca61064e366004614525565b612834565b61065b6128f9565b6040516102a19190614a66565b60006106738261290a565b92915050565b61068161295a565b6106896129c9565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561071557600080fd5b505af1158015610729573d6000803e3d6000fd5b505050506107376001609755565b565b6060610103805461074990614ab3565b80601f016020809104026020016040519081016040528092919081815260200182805461077590614ab3565b80156107c25780601f10610797576101008083540402835291602001916107c2565b820191906000526020600020905b8154815290600101906020018083116107a557829003601f168201915b5050505050905090565b60006107d782612a2a565b50600090815261010760205260409020546001600160a01b031690565b816107fe81612a7a565b6108088383612b14565b505050565b610820610818612c24565b60c990612c2e565b61083457610834633e34a41b60e21b612c4a565b61083c6129c9565b60cf54600160a01b900460ff1660011415610861576108616345a9661760e01b612c4a565b61016d548061086f81614afe565b61016e5490925090508015610896578083111561089657610896633740d80b60e21b612c4a565b6108a08484612c53565b5061016d556108af6001609755565b5050565b60006108c0610818612c24565b6108d4576108d4633e34a41b60e21b612c4a565b6108dc6129c9565b60cf54600160a01b900460ff1660011415610901576109016345a9661760e01b612c4a565b61016d548061090f81614afe565b91505061091b81612d64565b6109258382612c53565b61016d81905590506109376001609755565b919050565b61094d610947612c24565b82612d8b565b6109725760405162461bcd60e51b815260040161096990614b19565b60405180910390fd5b610808838383612dea565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff169282019290925282916109e857506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b8051602082015190935061271090610a049061ffff1686614b4e565b610a0e9190614b6d565b9150509250929050565b610a2061295a565b610a2c86868686612f6a565b610a3961016c838361407d565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610a7490899089908990899089908990600401614bb8565b600060405180830381600087803b158015610a8e57600080fd5b505af1158015610aa2573d6000803e3d6000fd5b50505050505050505050565b610ab9610818612c24565b610acd57610acd633e34a41b60e21b612c4a565b610ad56129c9565b60cf54600160a01b900460ff1660011415610afa57610afa6345a9661760e01b612c4a565b61016d54829060005b82811015610b785760005b84811015610b655782610b2081614afe565b935050610b53878784818110610b3857610b38614c01565b9050602002016020810190610b4d91906142db565b84612c53565b80610b5d81614afe565b915050610b0e565b5080610b7081614afe565b915050610b03565b50610b8281612d64565b61016d55506108086001609755565b610b9961295a565b610ba16129c9565b61016e81905560405181907fad7735a1decc3db45c1eab757cc4a1cb4bff8e332877b55f6db4ea11d82320c690600090a260d054604051630941255b60e21b8152600481018390526001600160a01b0390911690632504956c90602401600060405180830381600087803b158015610c1857600080fd5b505af1158015610c2c573d6000803e3d6000fd5b50505050610c3a6001609755565b50565b61080883838360405180602001604052806000815250611c86565b610c606129c9565b6000610c6b826117ce565b90506000610c77612c24565b90506001600160a01b03821615801590610d0057506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a790610cbf9063129dae8b60e01b90600401614c17565b602060405180830381865afa158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d009190614c2c565b15610d7b576000610d1084611684565b60405163129dae8b60e01b81529091506001600160a01b0384169063129dae8b90610d4390859085908990600401614c49565b600060405180830381600087803b158015610d5d57600080fd5b505af1158015610d71573d6000803e3d6000fd5b5050505050610d98565b610d858184612d8b565b610d9857610d986282b42960e81b612c4a565b610da183612f85565b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190610dd69084906000908890600401614c49565b600060405180830381600087803b158015610df057600080fd5b505af1158015610e04573d6000803e3d6000fd5b505050505050610c3a6001609755565b600054610100900460ff1615808015610e345750600054600160ff909116105b80610e555750610e4330612fc7565b158015610e55575060005460ff166001145b610e715760405162461bcd60e51b815260040161096990614c6d565b6000805460ff191660011790558015610e94576000805461ff0019166101001790555b6000806000806000806000806000806000808e8e810190610eb59190614687565b9b509b509b509b509b509b509b509b509b509b509b509b50610ee18c8c8c8c8c8c8c8c8c8c8c8c612fd6565b5050505050505050505050508015610808576000805461ff0019169055604051600181526000805160206152a38339815191529060200160405180910390a1505050565b610f2d61295a565b610f3860c9826130c1565b610f4c57610f4c63ea6eb5c360e01b612c4a565b6040516001906001600160a01b0383169060008051602061528383398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610fa4908490600190600401614cbb565b600060405180830381600087803b158015610fbe57600080fd5b505af1158015610fd2573d6000803e3d6000fd5b5050505050565b610fe16129c9565b6000610feb612c24565b90508160005b8181101561114d57600060cc600087878581811061101157611011614c01565b60209081029290920135835250810191909152604001600020546001600160a01b031690508061104b5761104b635f98be1560e11b612c4a565b806001600160a01b031663ce2003a58588888681811061106d5761106d614c01565b905060200201356040518363ffffffff1660e01b815260040161109192919061435b565b6020604051808303816000875af11580156110b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d49190614c2c565b6110e8576110e863251c48e160e11b612c4a565b600060cc600088888681811061110057611100614c01565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050808061114590614afe565b915050610ff1565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa848460405161117f929190614d0c565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d93734906111b99087908790600401614d0c565b600060405180830381600087803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b5050505050506108af6001609755565b6111ff6129c9565b611208816130d6565b61121c5761121c631a7387bd60e11b612c4a565b6000611226612c24565b60cf549091506001600160a01b03168061126e5761124261199b565b6001600160a01b0316826001600160a01b031614611269576112696282b42960e81b612c4a565b6112f1565b60405163bcdbc94760e01b81526001600160a01b0382169063bcdbc9479061129c9086908690600401614d20565b602060405180830381865afa1580156112b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112dd9190614c2c565b6112f1576112f163e10a050560e01b612c4a565b60cf80546001600160a01b0319166001600160a01b0385169081179091556040516000805160206152e383398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290610dd690869060040161427b565b600054610100900460ff16158080156113765750600054600160ff909116105b80611397575061138530612fc7565b158015611397575060005460ff166001145b6113b35760405162461bcd60e51b815260040161096990614c6d565b6000805460ff1916600117905580156113d6576000805461ff0019166101001790555b6113ea8d8d8d8d8d8d8d8d8d8d8d8d612fd6565b801561141e576000805461ff0019169055604051600181526000805160206152a38339815191529060200160405180910390a15b50505050505050505050505050565b6114356129c9565b8061144a5761144a63ecd7b0d160e01b612c4a565b60cb546001600160a01b0316806114965761146361199b565b6001600160a01b0316611474612c24565b6001600160a01b031614611491576114916282b42960e81b612c4a565b611526565b806001600160a01b0316633d820a4d6114ad612c24565b600086866040518563ffffffff1660e01b81526004016114d09493929190614d3a565b6020604051808303816000875af11580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115139190614c2c565b611526576115266282b42960e81b612c4a565b61156583838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130f292505050565b60d054604051632cfd654b60e11b81526001600160a01b03909116906359faca96906115979086908690600401614d6c565b600060405180830381600087803b1580156115b157600080fd5b505af11580156115c5573d6000803e3d6000fd5b50505050506108af6001609755565b6065546001600160a01b0391821691161490565b6115f3610818612c24565b61160757611607633e34a41b60e21b612c4a565b61160f6129c9565b60cf54600160a01b900460ff1660011415611634576116346345a9661760e01b612c4a565b61016d5460005b8281101561166c578161164d81614afe565b92505061165a8483612c53565b8061166481614afe565b91505061163b565b5061167681612d64565b61016d556108af6001609755565b600090815261010560205260409020546001600160a01b031690565b6116ab610818612c24565b6116bf576116bf633e34a41b60e21b612c4a565b6116c76129c9565b60cf54600160a01b900460ff16600114156116ec576116ec6345a9661760e01b612c4a565b61016d5461016e5482908061174e5760005b82811015611748576117288787878481811061171c5761171c614c01565b90506020020135612c53565b8361173281614afe565b945050808061174090614afe565b9150506116fe565b506117c1565b60005b828110156117bf578186868381811061176c5761176c614c01565b90506020020135111561178957611789633740d80b60e21b612c4a565b61179f8787878481811061171c5761171c614c01565b836117a981614afe565b94505080806117b790614afe565b915050611751565b505b5050506108086001609755565b60cb54600082815260cc60205260409020546001600160a01b03918216911680156117f7578091505b50919050565b610139805461180b90614ab3565b80601f016020809104026020016040519081016040528092919081815260200182805461183790614ab3565b80156118845780601f1061185957610100808354040283529160200191611884565b820191906000526020600020905b81548152906001019060200180831161186757829003601f168201915b505050505081565b60006001600160a01b0382166118dc5760405162461bcd60e51b815260206004820152601560248201527422a9219b99189d1024b73b30b634b21037bbb732b960591b6044820152606401610969565b506001600160a01b03166000908152610106602052604090205490565b61190161295a565b6107376000613141565b61191361295a565b6108af8282613193565b61192561295a565b61193060c98261323a565b6119445761194463ea6eb5c360e01b612c4a565b6040516000906001600160a01b03831690600080516020615283833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610fa4908490600090600401614cbb565b6033546001600160a01b031690565b6060610104805461074990614ab3565b816119c481612a7a565b610808838361324f565b6119d66129c9565b6119df81613261565b6119f3576119f3631a7387bd60e11b612c4a565b60006119fd612c24565b60cb549091506001600160a01b031680611a4557611a1961199b565b6001600160a01b0316826001600160a01b031614611a4057611a406282b42960e81b612c4a565b611acd565b6040516342f19adb60e11b81526001600160a01b038216906385e335b690611a769085906000908890600401614d80565b6020604051808303816000875af1158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab99190614c2c565b611acd57611acd63e10a050560e01b612c4a565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160008051602061526383398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90610dd690869060040161427b565b611b3a6129c9565b6000611b44612c24565b60cb549091506001600160a01b031680611b6857611b68635f98be1560e11b612c4a565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611b9790859060009060040161435b565b6020604051808303816000875af1158015611bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bda9190614c2c565b611bee57611bee63251c48e160e11b612c4a565b60cb80546001600160a01b0319169055604051600090600080516020615263833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611c489060009060040161427b565b600060405180830381600087803b158015611c6257600080fd5b505af1158015611c76573d6000803e3d6000fd5b5050505050506107376001609755565b611c97611c91612c24565b83612d8b565b611cb35760405162461bcd60e51b815260040161096990614b19565b611cbf8484848461327d565b50505050565b611ccd6129c9565b6000611cd7612c24565b90506000611ce361199b565b60cf549091506001600160a01b03168581611de457826001600160a01b0316846001600160a01b031614611d2057611d206282b42960e81b612c4a565b60005b81811015611dde57611d66878783818110611d4057611d40614c01565b9050604002016020016020810190611d589190614da3565b61271061ffff909116111590565b611d7a57611d7a633daf741f60e21b612c4a565b868682818110611d8c57611d8c614c01565b90506040020160ce60008b8b85818110611da857611da8614c01565b9050602002013581526020019081526020016000208181611dc99190614dc0565b50819050611dd681614afe565b915050611d23565b50611f32565b60005b81811015611f3057611e04878783818110611d4057611d40614c01565b611e1857611e18633daf741f60e21b612c4a565b826001600160a01b031663ad6e40c78a8a84818110611e3957611e39614c01565b90506020020135898985818110611e5257611e52614c01565b905060400201886040518463ffffffff1660e01b8152600401611e7793929190614e4d565b602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614c2c565b611ecc57611ecc63270e710760e21b612c4a565b868682818110611ede57611ede614c01565b90506040020160ce60008b8b85818110611efa57611efa614c01565b9050602002013581526020019081526020016000208181611f1b9190614dc0565b50819050611f2881614afe565b915050611de7565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c88888888604051611f679493929190614e7a565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde90611fa5908b908b908b908b90600401614e7a565b600060405180830381600087803b158015611fbf57600080fd5b505af1158015611fd3573d6000803e3d6000fd5b5050505050505050611cbf6001609755565b611fed6129c9565b6000611ff7612c24565b60cf549091506001600160a01b03168061201b5761201b635f98be1560e11b612c4a565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa9061204790859060040161427b565b602060405180830381865afa158015612064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120889190614c2c565b61209c5761209c63251c48e160e11b612c4a565b60cf80546001600160a01b03191690556040516000906000805160206152e3833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611c489060009060040161427b565b6060610673826132b0565b6121096129c9565b8281811461212157612121632b477e7160e11b612c4a565b60005b818110156121835761217186868381811061214157612141614c01565b9050602002013585858481811061215a5761215a614c01565b905060200281019061216c9190614ed2565b61337c565b8061217b81614afe565b915050612124565b507f2df7dd608aac5806395769062aca937bf08722cb45659d38c0cce82f5cd0cde3858585856040516121b99493929190614f18565b60405180910390a160d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906121f7908890889088908890600401614f18565b600060405180830381600087803b15801561221157600080fd5b505af1158015612225573d6000803e3d6000fd5b5050505050611cbf6001609755565b8251604080518083016020019091528181529060005b818110156122a057600085858360405160200161226993929190614fc8565b60408051601f19818403018152919052805160209182012088840182015118858401820152612299915082614fda565b905061224a565b50509392505050565b61016c805461180b90614ab3565b6001600160a01b0391821660009081526101086020908152604080832093909416825291909152205460ff1690565b6122ee6129c9565b60006122f8612c24565b9050600061230461199b565b90508460005b818110156124fd5761234186868381811061232757612327614c01565b905060200201602081019061233c91906142db565b613261565b61235557612355631a7387bd60e11b612c4a565b600061237889898481811061236c5761236c614c01565b905060200201356117ce565b90506001600160a01b0381166123b557836001600160a01b0316856001600160a01b0316146123b0576123b06282b42960e81b612c4a565b612473565b806001600160a01b03166385e335b6868b8b868181106123d7576123d7614c01565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b16815261241c969591909302013592506001600160a01b031690600401614d80565b6020604051808303816000875af115801561243b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245f9190614c2c565b6124735761247363e10a050560e01b612c4a565b86868381811061248557612485614c01565b905060200201602081019061249a91906142db565b60cc60008b8b868181106124b0576124b0614c01565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505080806124f590614afe565b91505061230a565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e878787876040516125339493929190614ff2565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf90612571908a908a908a908a90600401614ff2565b600060405180830381600087803b15801561258b57600080fd5b505af115801561259f573d6000803e3d6000fd5b50505050505050611cbf6001609755565b6125b86129c9565b6125c86040820160208301614da3565b61271061ffff821611156125e6576125e6633daf741f60e21b612c4a565b60006125f0612c24565b60cf549091506001600160a01b0316806126385761260c61199b565b6001600160a01b0316826001600160a01b031614612633576126336282b42960e81b612c4a565b6126bb565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f090612666908790869060040161504a565b602060405180830381865afa158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a79190614c2c565b6126bb576126bb63270e710760e21b612c4a565b8360cd6126c88282614dc0565b506126db90506040850160208601614da3565b61ffff166126ec60208601866142db565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c061273f60208701876142db565b61274f6040880160208901614da3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b15801561279957600080fd5b505af11580156127ad573d6000803e3d6000fd5b50505050505050610c3a6001609755565b6127c661295a565b6001600160a01b03811661282b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b610c3a81613141565b61283f610818612c24565b61285357612853633e34a41b60e21b612c4a565b61285b6129c9565b60cf54600160a01b900460ff1660011415612880576128806345a9661760e01b612c4a565b61016d54819060005b828110156128e0578161289b81614afe565b9250506128ce8585838181106128b3576128b3614c01565b90506020020160208101906128c891906142db565b83612c53565b806128d881614afe565b915050612889565b506128ea81612d64565b61016d55506108af6001609755565b606061290560c9613487565b905090565b60006001600160e01b031982166380ac58cd60e01b148061293b57506001600160e01b03198216635b5e139f60e01b145b8061067357506301ffc9a760e01b6001600160e01b0319831614610673565b612962612c24565b6001600160a01b031661297361199b565b6001600160a01b0316146107375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610969565b60026097541415612a1c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610969565b6002609755565b6001609755565b612a3381613494565b610c3a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610969565b61016b546001600160a01b031615610c3a5761016b54604051633185c44d60e21b81526001600160a01b039091169063c617113490612abf9030908590600401614d20565b602060405180830381865afa158015612adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b009190614c2c565b610c3a57610c3a638a10919360e01b612c4a565b6000612b1f82611684565b9050806001600160a01b0316836001600160a01b03161415612b7a5760405162461bcd60e51b81526020600482015260146024820152734552433732313a20616c7265616479206f776e7360601b6044820152606401610969565b806001600160a01b0316612b8c612c24565b6001600160a01b03161480612ba85750612ba8816105dc612c24565b612c1a5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610969565b61080883836134b2565b6000612905613521565b6000612c43836001600160a01b038416613543565b9392505050565b610c3a8161355b565b6001600160a01b038216612ca05760405162461bcd60e51b81526020600482015260146024820152734552433732313a207a65726f206164647265737360601b6044820152606401610969565b612ca981613494565b15612ced5760405162461bcd60e51b8152602060048201526014602482015273115490cdcc8c4e881d1bdad95b881b5a5b9d195960621b6044820152606401610969565b6001600160a01b038216600090815261010660205260408120805460019290612d17908490614fda565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392906000805160206152c3833981519152908290a45050565b61016e548015801590612d7657508082115b156108af576108af63be1a657d60e01b612c4a565b600080612d9783611684565b9050806001600160a01b0316846001600160a01b03161480612dbe5750612dbe81856122b7565b80612de25750836001600160a01b0316612dd7846107cc565b6001600160a01b0316145b949350505050565b826001600160a01b0316612dfd82611684565b6001600160a01b031614612e4c5760405162461bcd60e51b815260206004820152601660248201527522a9219b99189d10333937b6903737ba1037bbb732b960511b6044820152606401610969565b6001600160a01b038216612ea05760405162461bcd60e51b815260206004820152601b60248201527a4552433732313a20746f20746865207a65726f206164647265737360281b6044820152606401610969565b60008181526101076020908152604080832080546001600160a01b03191690556001600160a01b03861683526101069091528120805460019290612ee5908490615070565b90915550506001600160a01b038216600090815261010660205260408120805460019290612f14908490614fda565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716916000805160206152c383398151915291a4610808838383613565565b612f77610103858561407d565b50610fd2610104838361407d565b612f8e8161371a565b6000818152610135602052604090208054612fa890614ab3565b159050610c3a57600081815261013560205260408120610c3a91614101565b6001600160a01b03163b151590565b612fde6137b8565b612fe98c8b8b6137df565b612ff2866138bb565b612ffc8888613904565b61300760c9866130c1565b508a5161301c9061016c9060208e019061413b565b50604051631222d4db60e11b81526001600160a01b03821690632445a9b69061304990309060040161427b565b600060405180830381600087803b15801561306357600080fd5b505af1158015613077573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b03851617905550508351156130a6576130a6846130f2565b82156130b35761016e8390555b505050505050505050505050565b6000612c43836001600160a01b038416613935565b60006106736001600160a01b03831663440444c560e11b61397f565b7f2e0a5b969d96a99aee0b35787d9a60516a02ca6f528a5f66d3f936468d8f038261013982604051613125929190615087565b60405180910390a180516108af9061013990602084019061413b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61016b80546001600160a01b0319166001600160a01b038416908117909155156108af576001600160a01b0382163b6131d6576131d66309ee12d560e01b612c4a565b604051633e9f1edf60e11b81526001600160a01b03831690637d3e3dbe906132049030908590600401614d20565b600060405180830381600087803b15801561321e57600080fd5b505af1158015613232573d6000803e3d6000fd5b505050505050565b6000612c43836001600160a01b03841661399b565b6108af61325a612c24565b8383613a8e565b60006106736001600160a01b038316633b209e2f60e11b61397f565b613288848484612dea565b61329484848484613b5a565b611cbf5760405162461bcd60e51b815260040161096990615143565b60606132bb82613494565b6132cf576132cf63677510db60e11b612c4a565b60008281526101356020526040812080546132e990614ab3565b80601f016020809104026020016040519081016040528092919081815260200182805461331590614ab3565b80156133625780601f1061333757610100808354040283529160200191613362565b820191906000526020600020905b81548152906001019060200180831161334557829003601f168201915b5050505050905080516000141561067357612c4383613c66565b6000613387846117ce565b90506000613393612c24565b9050600061339f61199b565b90506001600160a01b0383166133dc57806001600160a01b0316826001600160a01b0316146133d7576133d76282b42960e81b612c4a565b613464565b604051633d820a4d60e01b81526001600160a01b03841690633d820a4d9061340e9085908a908a908a90600401614d3a565b6020604051808303816000875af115801561342d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134519190614c2c565b613464576134646282b42960e81b612c4a565b60008681526101356020526040902061347e90868661407d565b50505050505050565b60606000612c4383613ccc565b600090815261010560205260409020546001600160a01b0316151590565b60008181526101076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906134e882611684565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061352c336115d4565b1561353e575060131936013560601c90565b503390565b60009081526001919091016020526040902054151590565b8060005260046000fd5b600061356f612c24565b9050806001600160a01b0316846001600160a01b0316146135935761359381612a7a565b600061359e836117ce565b90506001600160a01b0381161580159061362757506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a7906135e690637af46b4f60e11b90600401614c17565b602060405180830381865afa158015613603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136279190614c2c565b156136ad57604051638af6791b60e01b81526001600160a01b038381166004830152868116602483015285811660448301526064820185905260a06084830152600060a4830152821690638af6791b9060c401600060405180830381600087803b15801561369457600080fd5b505af11580156136a8573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de6651906136e190889088908890600401614c49565b600060405180830381600087803b1580156136fb57600080fd5b505af115801561370f573d6000803e3d6000fd5b505050505050505050565b600061372582611684565b60008381526101076020908152604080832080546001600160a01b03191690556001600160a01b03841683526101069091528120805492935060019290919061376f908490615070565b90915550506000828152610105602052604080822080546001600160a01b0319169055518391906001600160a01b038416906000805160206152c3833981519152908390a45050565b600054610100900460ff166107375760405162461bcd60e51b815260040161096990615175565b600054610100900460ff166138065760405162461bcd60e51b815260040161096990615175565b602082015161271061ffff8216111561382957613829633daf741f60e21b612c4a565b613831613d28565b613839613d57565b61384284613141565b82516001600160a01b03161561388957825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b03821615611cbf5760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166138e25760405162461bcd60e51b815260040161096990615175565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1661392b5760405162461bcd60e51b815260040161096990615175565b6108af8282613d86565b60006139418383613543565b61397757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610673565b506000610673565b600061398a83613dd6565b8015612c435750612c438383613e09565b60008181526001830160205260408120548015613a845760006139bf600183615070565b85549091506000906139d390600190615070565b9050818114613a385760008660000182815481106139f3576139f3614c01565b9060005260206000200154905080876000018481548110613a1657613a16614c01565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613a4957613a496151c0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610673565b6000915050610673565b816001600160a01b0316836001600160a01b03161415613aec5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610969565b6001600160a01b0383811660008181526101086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000613b6e846001600160a01b0316612fc7565b15613c5b57836001600160a01b031663150b7a02613b8a612c24565b8786866040518563ffffffff1660e01b8152600401613bac94939291906151d6565b6020604051808303816000875af1925050508015613be7575060408051601f3d908101601f19168201909252613be491810190615209565b60015b613c41573d808015613c15576040519150601f19603f3d011682016040523d82523d6000602084013e613c1a565b606091505b508051613c395760405162461bcd60e51b815260040161096990615143565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612de2565b506001949350505050565b6060613c7182612a2a565b6000613c7b613e9d565b90506000815111613c9b5760405180602001604052806000815250612c43565b80613ca584613ead565b604051602001613cb6929190615226565b6040516020818303038152906040529392505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613d1c57602002820191906000526020600020905b815481526020019060010190808311613d08575b50505050509050919050565b600054610100900460ff16613d4f5760405162461bcd60e51b815260040161096990615175565b610737613f49565b600054610100900460ff16613d7e5760405162461bcd60e51b815260040161096990615175565b610737613f80565b600054610100900460ff16613dad5760405162461bcd60e51b815260040161096990615175565b8151613dc19061010390602085019061413b565b5080516108089061010490602084019061413b565b6000613de9826301ffc9a760e01b613e09565b80156106735750613e02826001600160e01b0319613e09565b1592915050565b6000806301ffc9a760e01b83604051602401613e259190614c17565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015613e86575060208210155b8015613e925750600081115b979650505050505050565b6060610139805461074990614ab3565b60606000613eba83613fa7565b60010190506000816001600160401b03811115613ed957613ed961455a565b6040519080825280601f01601f191660200182016040528015613f03576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613f3c57613f41565b613f0d565b509392505050565b600054610100900460ff16613f705760405162461bcd60e51b815260040161096990615175565b610737613f7b612c24565b613141565b600054610100900460ff16612a235760405162461bcd60e51b815260040161096990615175565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613fe65772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310614010576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061402e57662386f26fc10000830492506010015b6305f5e1008310614046576305f5e100830492506008015b612710831061405a57612710830492506004015b6064831061406c576064830492506002015b600a83106106735760010192915050565b82805461408990614ab3565b90600052602060002090601f0160209004810192826140ab57600085556140f1565b82601f106140c45782800160ff198235161785556140f1565b828001600101855582156140f1579182015b828111156140f15782358255916020019190600101906140d6565b506140fd9291506141af565b5090565b50805461410d90614ab3565b6000825580601f1061411d575050565b601f016020900490600052602060002090810190610c3a91906141af565b82805461414790614ab3565b90600052602060002090601f01602090048101928261416957600085556140f1565b82601f1061418257805160ff19168380011785556140f1565b828001600101855582156140f1579182015b828111156140f1578251825591602001919060010190614194565b5b808211156140fd57600081556001016141b0565b6001600160e01b031981168114610c3a57600080fd5b6000602082840312156141ec57600080fd5b8135612c43816141c4565b60005b838110156142125781810151838201526020016141fa565b83811115611cbf5750506000910152565b6000815180845261423b8160208601602086016141f7565b601f01601f19169290920160200192915050565b602081526000612c436020830184614223565b60006020828403121561427457600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610c3a57600080fd5b80356109378161428f565b600080604083850312156142c257600080fd5b82356142cd8161428f565b946020939093013593505050565b6000602082840312156142ed57600080fd5b8135612c438161428f565b60008060006060848603121561430d57600080fd5b83356143188161428f565b925060208401356143288161428f565b929592945050506040919091013590565b6000806040838503121561434c57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008083601f84011261438657600080fd5b5081356001600160401b0381111561439d57600080fd5b6020830191508360208285010111156143b557600080fd5b9250929050565b600080600080600080606087890312156143d557600080fd5b86356001600160401b03808211156143ec57600080fd5b6143f88a838b01614374565b9098509650602089013591508082111561441157600080fd5b61441d8a838b01614374565b9096509450604089013591508082111561443657600080fd5b5061444389828a01614374565b979a9699509497509295939492505050565b60008083601f84011261446757600080fd5b5081356001600160401b0381111561447e57600080fd5b6020830191508360208260051b85010111156143b557600080fd5b6000806000604084860312156144ae57600080fd5b83356001600160401b038111156144c457600080fd5b6144d086828701614455565b909790965060209590950135949350505050565b600080602083850312156144f757600080fd5b82356001600160401b0381111561450d57600080fd5b61451985828601614374565b90969095509350505050565b6000806020838503121561453857600080fd5b82356001600160401b0381111561454e57600080fd5b61451985828601614455565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261458157600080fd5b81356001600160401b038082111561459b5761459b61455a565b604051601f8301601f19908116603f011681019082821181831017156145c3576145c361455a565b816040528381528660208588010111156145dc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b61ffff81168114610c3a57600080fd5b60006040828403121561461e57600080fd5b604080519081016001600160401b03811182821017156146405761464061455a565b60405290508082356146518161428f565b81526020830135614661816145fc565b6020919091015292915050565b8015158114610c3a57600080fd5b80356109378161466e565b6000806000806000806000806000806000806101a08d8f0312156146aa57600080fd5b6146b38d6142a4565b9b506001600160401b0360208e013511156146cd57600080fd5b6146dd8e60208f01358f01614570565b9a506146ec8e60408f0161460c565b99506146fa60808e016142a4565b98506001600160401b0360a08e0135111561471457600080fd5b6147248e60a08f01358f01614570565b97506001600160401b0360c08e0135111561473e57600080fd5b61474e8e60c08f01358f01614570565b965061475c60e08e016142a4565b955061476b6101008e016142a4565b94506001600160401b036101208e0135111561478657600080fd5b6147978e6101208f01358f01614570565b93506101408d013592506147ae6101608e0161467c565b91506147bd6101808e016142a4565b90509295989b509295989b509295989b565b6000806000604084860312156147e457600080fd5b83356147ef8161428f565b925060208401356001600160401b0381111561480a57600080fd5b61481686828701614455565b9497909650939450505050565b6000806040838503121561483657600080fd5b82356148418161428f565b915060208301356148518161428f565b809150509250929050565b6000806040838503121561486f57600080fd5b823561487a8161428f565b915060208301356148518161466e565b600080600080608085870312156148a057600080fd5b84356148ab8161428f565b935060208501356148bb8161428f565b92506040850135915060608501356001600160401b038111156148dd57600080fd5b6148e987828801614570565b91505092959194509250565b6000806000806040858703121561490b57600080fd5b84356001600160401b038082111561492257600080fd5b61492e88838901614455565b9096509450602087013591508082111561494757600080fd5b818701915087601f83011261495b57600080fd5b81358181111561496a57600080fd5b8860208260061b850101111561497f57600080fd5b95989497505060200194505050565b600080600080604085870312156149a457600080fd5b84356001600160401b03808211156149bb57600080fd5b6149c788838901614455565b909650945060208701359150808211156149e057600080fd5b506149ed87828801614455565b95989497509550505050565b600080600060408486031215614a0e57600080fd5b83356001600160401b0380821115614a2557600080fd5b614a3187838801614570565b94506020860135915080821115614a4757600080fd5b5061481686828701614374565b6000604082840312156117f757600080fd5b6020808252825182820181905260009190848201906040850190845b81811015614aa75783516001600160a01b031683529284019291840191600101614a82565b50909695505050505050565b600181811c90821680614ac757607f821691505b602082108114156117f757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614b1257614b12614ae8565b5060010190565b6020808252601b908201527a115490cdcc8c4e8818d85b1b195c881d5b985d5d1a1bdc9a5e9959602a1b604082015260600190565b6000816000190483118215151615614b6857614b68614ae8565b500290565b600082614b8a57634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000614bcc60608301888a614b8f565b8281036020840152614bdf818789614b8f565b90508281036040840152614bf4818587614b8f565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160e01b031991909116815260200190565b600060208284031215614c3e57600080fd5b8151612c438161466e565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b03831115614cef57600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000612de2602083018486614cd6565b6001600160a01b0392831681529116602082015260400190565b60018060a01b0385168152836020820152606060408201526000614d62606083018486614b8f565b9695505050505050565b602081526000612de2602083018486614b8f565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060208284031215614db557600080fd5b8135612c43816145fc565b8135614dcb8161428f565b81546001600160a01b031981166001600160a01b039290921691821783556020840135614df7816145fc565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b8035614e258161428f565b6001600160a01b031682526020810135614e3e816145fc565b61ffff81166020840152505050565b83815260808101614e616020830185614e1a565b6001600160a01b03929092166060919091015292915050565b60006040808352614e8e8184018789614cd6565b83810360208086019190915285825286910160005b86811015614ec557614eb58284614e1a565b9183019190830190600101614ea3565b5098975050505050505050565b6000808335601e19843603018112614ee957600080fd5b8301803591506001600160401b03821115614f0357600080fd5b6020019150368190038213156143b557600080fd5b604081526000614f2c604083018688614cd6565b602083820381850152818583528183019050818660051b8401018760005b88811015614fb857858303601f190184528135368b9003601e19018112614f7057600080fd5b8a0180356001600160401b03811115614f8857600080fd5b8036038c1315614f9757600080fd5b614fa48582898501614b8f565b958701959450505090840190600101614f4a565b50909a9950505050505050505050565b82848237909101908152602001919050565b60008219821115614fed57614fed614ae8565b500190565b604081526000615006604083018688614cd6565b8281036020848101919091528482528591810160005b86811015614ec557833561502f8161428f565b6001600160a01b03168252928201929082019060010161501c565b606081016150588285614e1a565b6001600160a01b039290921660409190910152919050565b60008282101561508257615082614ae8565b500390565b60408152600080845481600182811c9150808316806150a757607f831692505b60208084108214156150c757634e487b7160e01b86526022600452602486fd5b60408801849052606088018280156150e657600181146150f757615122565b60ff19871682528282019750615122565b60008c81526020902060005b8781101561511c57815484820152908601908401615103565b83019850505b505087860381890152505050505061513a8185614223565b95945050505050565b60208082526018908201527722a9219b99189d1034b73b30b634b2103932b1b2b4bb32b960411b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614d6290830184614223565b60006020828403121561521b57600080fd5b8151612c43816141c4565b600083516152388184602088016141f7565b602f60f81b90830190815283516152568160018401602088016141f7565b0160010194935050505056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7ab7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a