[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "flatFee", "type": "uint256" } ], "name": "FlatPlatformFeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "restriction", "type": "bool" } ], "name": "OperatorRestriction", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "platformFeeBps", "type": "uint256" } ], "name": "PlatformFeeInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum TokenERC1155.PlatformFeeType", "name": "feeType", "type": "uint8" } ], "name": "PlatformFeeTypeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "PrimarySaleRecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "quantityMinted", "type": "uint256" } ], "name": "TokensMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "indexed": false, "internalType": "struct ITokenERC1155.MintRequest", "name": "mintRequest", "type": "tuple" } ], "name": "TokensMintedWithSignature", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getFlatPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeType", "outputs": [ { "internalType": "enum TokenERC1155.PlatformFeeType", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_primarySaleRecipient", "type": "address" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint128", "name": "_royaltyBps", "type": "uint128" }, { "internalType": "uint128", "name": "_platformFeeBps", "type": "uint128" }, { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mintTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC1155.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "mintWithSignature", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorRestriction", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "platformFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "primarySaleRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "saleRecipientForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_flatFee", "type": "uint256" } ], "name": "setFlatPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_restriction", "type": "bool" } ], "name": "setOperatorRestriction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_platformFeeBps", "type": "uint256" } ], "name": "setPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum TokenERC1155.PlatformFeeType", "name": "_feeType", "type": "uint8" } ], "name": "setPlatformFeeType", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_saleRecipient", "type": "address" } ], "name": "setPrimarySaleRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_subscription", "type": "address" } ], "name": "subscribeToRegistry", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC1155.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "verify", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b62001fcd1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b61597f806200015c6000396000f3fe6080604052600436106102fe5760003560e01c8063938e3d7b11610190578063ca15c873116100dc578063e8a3d48511610095578063eb13554f1161006f578063eb13554f14610a18578063f242432a14610a39578063f28083c314610a59578063f5298aca14610a7a57600080fd5b8063e8a3d48514610982578063e985e9c514610997578063ea500d69146109e157600080fd5b8063ca15c873146108a4578063cb2ef6f7146108c4578063d45573f6146108e6578063d547741f1461091c578063e15916341461093c578063e57553da1461095c57600080fd5b8063a22cb46511610149578063b17cd86f11610123578063b17cd86f146107e8578063b24f2d3914610827578063b6f10c7914610856578063bd85b0391461087657600080fd5b8063a22cb4651461077b578063ac9650d81461079b578063b03f4528146107c857600080fd5b8063938e3d7b146106e257806395d89b411461070257806398a6e993146107175780639bcf7a151461072a578063a0a8e4601461074a578063a217fddf1461076657600080fd5b80633b1475a71161024f578063600dd5ea116102085780637e54523c116101e25780637e54523c1461066d5780638da5cb5b1461068d5780639010d07c146106a257806391d14854146106c257600080fd5b8063600dd5ea1461060d5780636b20c4541461062d5780636f4f28371461064d57600080fd5b80633b1475a7146105135780634cc157df1461052a5780634e1273f41461056c578063504c6e0114610599578063572b6c05146105b457806357fd8455146105ed57600080fd5b80631e7ac488116102bc5780632eb2c2d6116102965780632eb2c2d6146104935780632f2ff15d146104b357806332f0cd64146104d357806336568abe146104f357600080fd5b80631e7ac48814610403578063248a9ca3146104235780632a55205a1461045457600080fd5b8062fdd58e1461030357806301ffc9a71461033657806306fdde0314610366578063079fe40e146103885780630e89341c146103c157806313af4035146103e1575b600080fd5b34801561030f57600080fd5b5061032361031e366004614698565b610a9a565b6040519081526020015b60405180910390f35b34801561034257600080fd5b506103566103513660046146d8565b610b36565b604051901515815260200161032d565b34801561037257600080fd5b5061037b610b7c565b60405161032d919061474d565b34801561039457600080fd5b506101ca546103a9906001600160a01b031681565b6040516001600160a01b03909116815260200161032d565b3480156103cd57600080fd5b5061037b6103dc366004614760565b610c0b565b3480156103ed57600080fd5b506104016103fc366004614779565b610cae565b005b34801561040f57600080fd5b5061040161041e366004614698565b610d64565b34801561042f57600080fd5b5061032361043e366004614760565b600090815261012f602052604090206001015490565b34801561046057600080fd5b5061047461046f366004614794565b610e2c565b604080516001600160a01b03909316835260208301919091520161032d565b34801561049f57600080fd5b506104016104ae3660046148ff565b610e69565b3480156104bf57600080fd5b506104016104ce3660046149a8565b610f56565b3480156104df57600080fd5b506104016104ee3660046149e2565b610f81565b3480156104ff57600080fd5b5061040161050e3660046149a8565b610ff5565b34801561051f57600080fd5b506103236101c95481565b34801561053657600080fd5b5061054a610545366004614760565b611083565b604080516001600160a01b03909316835261ffff90911660208301520161032d565b34801561057857600080fd5b5061058c610587366004614a6c565b6110f3565b60405161032d9190614b0a565b3480156105a557600080fd5b50610193546103569060ff1681565b3480156105c057600080fd5b506103566105cf366004614779565b6001600160a01b031660009081526099602052604090205460ff1690565b3480156105f957600080fd5b50610401610608366004614779565b61121c565b34801561061957600080fd5b50610401610628366004614698565b61128c565b34801561063957600080fd5b50610401610648366004614b1d565b611349565b34801561065957600080fd5b50610401610668366004614779565b61139e565b34801561067957600080fd5b50610401610688366004614698565b6113f5565b34801561069957600080fd5b506103a9611463565b3480156106ae57600080fd5b506103a96106bd366004614794565b61149b565b3480156106ce57600080fd5b506103566106dd3660046149a8565b6114bb565b3480156106ee57600080fd5b506104016106fd366004614bd1565b6114e7565b34801561070e57600080fd5b5061037b611505565b610401610725366004614c12565b611513565b34801561073657600080fd5b50610401610745366004614c83565b611706565b34801561075657600080fd5b506040516001815260200161032d565b34801561077257600080fd5b50610323600081565b34801561078757600080fd5b50610401610796366004614cb8565b6117df565b3480156107a757600080fd5b506107bb6107b6366004614cef565b6118b0565b60405161032d9190614d63565b3480156107d457600080fd5b506104016107e3366004614dc5565b6119a4565b3480156107f457600080fd5b50610808610803366004614c12565b611a53565b6040805192151583526001600160a01b0390911660208301520161032d565b34801561083357600080fd5b506101cc546101cd546001600160a01b03909116906001600160801b031661054a565b34801561086257600080fd5b50610401610871366004614e26565b611abc565b34801561088257600080fd5b50610323610891366004614760565b6101d36020526000908152604090205481565b3480156108b057600080fd5b506103236108bf366004614760565b611b26565b3480156108d057600080fd5b506b546f6b656e4552433131353560a01b610323565b3480156108f257600080fd5b506101cb546101cd546001600160a01b0390911690600160801b90046001600160801b031661054a565b34801561092857600080fd5b506104016109373660046149a8565b611b3e565b34801561094857600080fd5b50610401610957366004614e5e565b611b64565b34801561096857600080fd5b506104746101cb546101ce546001600160a01b0390911691565b34801561098e57600080fd5b5061037b611e8a565b3480156109a357600080fd5b506103566109b2366004614f70565b6001600160a01b0391821660009081526101956020908152604080832093909416825291909152205460ff1690565b3480156109ed57600080fd5b506103a96109fc366004614760565b6101d4602052600090815260409020546001600160a01b031681565b348015610a2457600080fd5b506101cb546103a9906001600160a01b031681565b348015610a4557600080fd5b50610401610a54366004614f9a565b611e98565b348015610a6557600080fd5b506101cf5460ff1660405161032d9190615014565b348015610a8657600080fd5b50610401610a9536600461503c565b611f78565b60006001600160a01b038316610b0a5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152610194602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610b4182611fdc565b80610b5c57506001600160e01b03198216636cdb3d1360e11b145b80610b3057506001600160e01b0319821663152a902d60e11b1492915050565b6101c68054610b8a9061506f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb69061506f565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b505050505081565b60008181526101d260205260409020805460609190610c299061506f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c559061506f565b8015610ca25780601f10610c7757610100808354040283529160200191610ca2565b820191906000526020600020905b815481529060010190602001808311610c8557829003601f168201915b50505050509050919050565b6000610cb98161201c565b610cc46000836114bb565b610d105760405162461bcd60e51b815260206004820152601b60248201527f6e6577206f776e6572206e6f74206d6f64756c652061646d696e2e00000000006044820152606401610b01565b6101c880546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b6000610d6f8161201c565b612710821115610db35760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610b01565b6101cd80546001600160801b03166001600160401b038416600160801b021790556101cb80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b600080600080610e3b86611083565b90945084925061ffff169050612710610e5482876150c0565b610e5e91906150df565b925050509250929050565b61019354859060ff1615610f41576daaeb6d7670e522a718067333cd4e3b15610f41576001600160a01b038116331415610eaf57610eaa868686868661202d565b610f4e565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610efe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f229190615101565b610f4157604051633b79c77360e21b8152336004820152602401610b01565b610f4e868686868661202d565b505050505050565b600082815261012f6020526040902060010154610f728161201c565b610f7c838361208b565b505050565b610f896120ae565b610fe95760405162461bcd60e51b815260206004820152602b60248201527f4e6f7420617574686f72697a656420746f20736574206f70657261746f72207260448201526a32b9ba3934b1ba34b7b71760a91b6064820152608401610b01565b610ff2816120bc565b50565b610ffd612104565b6001600160a01b0316816001600160a01b0316146110755760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b01565b61107f828261210e565b5050565b60008181526101d560209081526040808320815180830190925280546001600160a01b0316808352600190910154928201929092528291156110cb57805160208201516110e9565b6101cc546101cd546001600160a01b03909116906001600160801b03165b9250925050915091565b606081518351146111585760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b01565b600083516001600160401b03811115611173576111736147b6565b60405190808252806020026020018201604052801561119c578160200160208202803683370190505b50905060005b8451811015611214576111e78582815181106111c0576111c061511e565b60200260200101518583815181106111da576111da61511e565b6020026020010151610a9a565b8282815181106111f9576111f961511e565b602090810291909101015261120d81615134565b90506111a2565b509392505050565b6112246120ae565b6112815760405162461bcd60e51b815260206004820152602860248201527f4e6f7420617574686f72697a656420746f2073756273637269626520746f207260448201526732b3b4b9ba393c9760c11b6064820152608401610b01565b610ff2816001612131565b60006112978161201c565b6127108211156112de5760405162461bcd60e51b815260206004820152601260248201527165786365656420726f79616c74792062707360701b6044820152606401610b01565b6101cc80546001600160a01b0319166001600160a01b0385169081179091556101cd80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610e1f565b611351612104565b6001600160a01b0316836001600160a01b031614806113775750611377836109b2612104565b6113935760405162461bcd60e51b8152600401610b019061514f565b610f7c838383612237565b60006113a98161201c565b6101ca80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b60006114008161201c565b6101ce8290556101cb80546001600160a01b0319166001600160a01b03851690811790915560408051918252602082018490527ff8086cee80709bd44c82f89dbca54115ebd05e840a88ab81df9cf5be9754eb63910160405180910390a1505050565b6101c85460009061147e9082906001600160a01b03166114bb565b6114885750600090565b6101c8546001600160a01b03165b905090565b6000828152610161602052604081206114b490836123df565b9392505050565b600091825261012f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006114f28161201c565b6114ff6101d0848461456f565b50505050565b6101c78054610b8a9061506f565b600260355414156115665760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b01565b600260355560006115788484846123eb565b905060006115896020860186614779565b90506000600019866080013514156115bc57506101c980549060019060006115b18385615199565b909155506116069050565b6101c9548660800135106115ff5760405162461bcd60e51b815260206004820152600a6024820152691a5b9d985b1a59081a5960b21b6044820152606401610b01565b5060808501355b60006116186040880160208901614779565b6001600160a01b0316146116885760405180604001604052808760200160208101906116449190614779565b6001600160a01b03908116825260408981013560209384015260008581526101d5845220835181546001600160a01b03191692169190911781559101516001909101555b6116a48261169960a08901896151b1565b848a60c0013561258c565b6116ad8661267d565b80826001600160a01b0316846001600160a01b03167f0b35afaf155daeef41cc46df86f058df2855c57d30ab134647a6b587e7cc8c39896040516116f19190615265565b60405180910390a45050600160355550505050565b60006117118161201c565b6127108211156117585760405162461bcd60e51b815260206004820152601260248201527165786365656420726f79616c74792062707360701b6044820152606401610b01565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101d58352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b61019354829060ff16156118a6576daaeb6d7670e522a718067333cd4e3b156118a657604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561185a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187e9190615101565b6118a657604051633b79c77360e21b81526001600160a01b0382166004820152602401610b01565b610f7c83836128b1565b6060816001600160401b038111156118ca576118ca6147b6565b6040519080825280602002602001820160405280156118fd57816020015b60608152602001906001900390816118e85790505b50905060005b8281101561199d5761196d308585848181106119215761192161511e565b905060200281019061193391906151b1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128c392505050565b82828151811061197f5761197f61511e565b6020026020010181905250808061199590615134565b915050611903565b5092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66119ce8161201c565b60006000198614156119fb57506101c980549060019060006119f08385615199565b90915550611a3d9050565b6101c9548610611a3a5760405162461bcd60e51b815260206004820152600a6024820152691a5b9d985b1a59081a5960b21b6044820152606401610b01565b50845b611a4a878686848761258c565b50505050505050565b6000806000611a638686866129b7565b61016087013560009081526101d1602052604090205490915060ff16158015611ab15750611ab17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6826114bb565b969095509350505050565b6000611ac78161201c565b6101cf805483919060ff191660018381811115611ae657611ae6614ffe565b02179055507fd246da9440709ce0dd3f4fd669abc85ada012ab9774b8ecdcc5059ba1486b9c182604051611b1a9190615014565b60405180910390a15050565b600081815261016160205260408120610b3090612a1b565b600082815261012f6020526040902060010154611b5a8161201c565b610f7c838361210e565b600054610100900460ff1615808015611b845750600054600160ff909116105b80611b9e5750303b158015611b9e575060005460ff166001145b611c015760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b01565b6000805460ff191660011790558015611c24576000805461ff0019166101001790555b611c2c612a25565b611c736040518060400160405280600c81526020016b546f6b656e4552433131353560a01b815250604051806040016040528060018152602001603160f81b815250612a56565b611c7c87612a87565b611c9460405180602001604052806000815250612abf565b611c9c612aef565b611ca660016120bc565b8951611cba906101c69060208d01906145f3565b508851611ccf906101c79060208c01906145f3565b506101cc80546001600160a01b03199081166001600160a01b03888116919091179092556101cd80546001600160801b0319166001600160801b0388161790556101cb805482168584161790556101ca80549091169188169190911790558751611d41906101d09060208b01906145f3565b50612710836001600160801b03161115611d8f5760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610b01565b6101cd80546001600160801b03858116600160801b0291161790556101cf805460ff191690556101c880546001600160a01b0319166001600160a01b038d16179055611ddc60008c612b0e565b611e067f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68c612b0e565b611e1e6000805160206159038339815191528c612b0e565b611e376000805160206159038339815191526000612b0e565b8015611e7d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101d08054610b8a9061506f565b61019354859060ff1615611f6b576daaeb6d7670e522a718067333cd4e3b15611f6b576001600160a01b038116331415611ed957610eaa8686868686612b18565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4c9190615101565b611f6b57604051633b79c77360e21b8152336004820152602401610b01565b610f4e8686868686612b18565b611f80612104565b6001600160a01b0316836001600160a01b03161480611fa65750611fa6836109b2612104565b611fc25760405162461bcd60e51b8152600401610b019061514f565b610f7c838383612b6f565b6001600160a01b03163b151590565b60006001600160e01b03198216636cdb3d1360e11b148061200d57506001600160e01b031982166303a24d0760e21b145b80610b305750610b3082612c98565b610ff281612028612104565b612cbd565b612035612104565b6001600160a01b0316856001600160a01b0316148061205b575061205b856109b2612104565b6120775760405162461bcd60e51b8152600401610b0190615394565b6120848585858585612d21565b5050505050565b6120958282612ed3565b600082815261016160205260409020610f7c9082612f5b565b6000611496816106dd612104565b610193805460ff19168215159081179091556040519081527f38475885990d8dfe9ca01f0ef160a1b5514426eab9ddbc953a3353410ba780969060200160405180910390a150565b6000611496612f70565b6121188282612f9d565b600082815261016160205260409020610f7c9082613023565b6daaeb6d7670e522a718067333cd4e3b1561107f576001600160a01b0382163b156122065780156121c657604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156121b257600080fd5b505af1158015610f4e573d6000803e3d6000fd5b60405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401612198565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401612198565b6001600160a01b03831661225d5760405162461bcd60e51b8152600401610b01906153e3565b805182511461227e5760405162461bcd60e51b8152600401610b0190615426565b6000612288612104565b90506122a881856000868660405180602001604052806000815250613038565b60005b83518110156123725760008482815181106122c8576122c861511e565b6020026020010151905060008483815181106122e6576122e661511e565b6020908102919091018101516000848152610194835260408082206001600160a01b038c1683529093529190912054909150818110156123385760405162461bcd60e51b8152600401610b019061546e565b6000928352610194602090815260408085206001600160a01b038b168652909152909220910390558061236a81615134565b9150506122ab565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516123c39291906154b2565b60405180910390a46040805160208101909152600090526114ff565b60006114b4838361321b565b60008060006123fb868686611a53565b91509150816124405760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610b01565b42612453610140880161012089016154d7565b6001600160801b031611158015612484575042612478610160880161014089016154d7565b6001600160801b031610155b6124c25760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610b01565b60006124d16020880188614779565b6001600160a01b0316141561251e5760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610b01565b60008660c00135116125625760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610b01565b61016086013560009081526101d160205260409020805460ff191660011790559150509392505050565b60008281526101d26020526040902080546125a69061506f565b1515905061260457826125e85760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610b01565b60008281526101d26020526040902061260290858561456f565b505b61261f85838360405180602001604052806000815250613245565b81856001600160a01b03167f04133ee4cb027e1c5fce5e3481289278a93bd16a65a3b65b428a6d239e706bfb6101d260008681526020019081526020016000208460405161266e9291906154f2565b60405180910390a35050505050565b60e08101356126895750565b600061269d60c083013560e08401356150c0565b9050600060016101cf5460ff1660018111156126bb576126bb614ffe565b146126f1576101cd54612710906126e290600160801b90046001600160801b0316846150c0565b6126ec91906150df565b6126f6565b6101ce545b9050808210156127485760405162461bcd60e51b815260206004820152601c60248201527f7072696365206c657373207468616e20706c6174666f726d20666565000000006044820152606401610b01565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61276f61012085016101008601614779565b6001600160a01b031614156127cb578134146127c65760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610b01565b61280e565b341561280e5760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610b01565b6000806128216080860160608701614779565b6001600160a01b0316146128445761283f6080850160608601614779565b612852565b6101ca546001600160a01b03165b905061288461286961012086016101008701614779565b612871612104565b6101cb546001600160a01b03168561336d565b6114ff61289961012086016101008701614779565b6128a1612104565b836128ac86886155a2565b61336d565b61107f6128bc612104565b83836133b7565b60606001600160a01b0383163b61292b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610b01565b600080846001600160a01b03168460405161294691906155b9565b600060405180830381855af49150503d8060008114612981576040519150601f19603f3d011682016040523d82523d6000602084013e612986565b606091505b50915091506129ae828260405180606001604052806027815260200161592360279139613499565b95945050505050565b6000612a1383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612a0d9250612a0191508890506134d2565b80519060200120613628565b90613676565b949350505050565b6000610b30825490565b600054610100900460ff16612a4c5760405162461bcd60e51b8152600401610b01906155d5565b612a54613692565b565b600054610100900460ff16612a7d5760405162461bcd60e51b8152600401610b01906155d5565b61107f82826136c0565b600054610100900460ff16612aae5760405162461bcd60e51b8152600401610b01906155d5565b612ab6613701565b610ff281613728565b600054610100900460ff16612ae65760405162461bcd60e51b8152600401610b01906155d5565b610ff2816137b7565b612a54733cc6cdda760b79bafa08df41ecfa224f810dceb660016137e7565b61107f828261208b565b612b20612104565b6001600160a01b0316856001600160a01b03161480612b465750612b46856109b2612104565b612b625760405162461bcd60e51b8152600401610b0190615394565b61208485858585856137f1565b6001600160a01b038316612b955760405162461bcd60e51b8152600401610b01906153e3565b6000612b9f612104565b90506000612bac8461393a565b90506000612bb98461393a565b9050612bd983876000858560405180602001604052806000815250613038565b6000858152610194602090815260408083206001600160a01b038a16845290915290205484811015612c1d5760405162461bcd60e51b8152600401610b019061546e565b6000868152610194602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611a4a565b60006001600160e01b03198216635a05180f60e01b1480610b305750610b3082613985565b612cc782826114bb565b61107f57612cdf816001600160a01b031660146139ba565b612cea8360206139ba565b604051602001612cfb929190615620565b60408051601f198184030181529082905262461bcd60e51b8252610b019160040161474d565b8151835114612d425760405162461bcd60e51b8152600401610b0190615426565b6001600160a01b038416612d685760405162461bcd60e51b8152600401610b0190615695565b6000612d72612104565b9050612d82818787878787613038565b60005b8451811015612e6d576000858281518110612da257612da261511e565b602002602001015190506000858381518110612dc057612dc061511e565b6020908102919091018101516000848152610194835260408082206001600160a01b038e168352909352919091205490915081811015612e125760405162461bcd60e51b8152600401610b01906156da565b6000838152610194602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612e52908490615199565b9250508190555050505080612e6690615134565b9050612d85565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612ebd9291906154b2565b60405180910390a4610f4e818787878787613b55565b612edd82826114bb565b61107f57600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612f17612104565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006114b4836001600160a01b038416613cb1565b3360009081526099602052604081205460ff1615612f95575060131936013560601c90565b503390565b90565b612fa782826114bb565b1561107f57600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19169055612fdf612104565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006114b4836001600160a01b038416613d00565b61305160008051602061590383398151915260006114bb565b15801561306657506001600160a01b03851615155b801561307a57506001600160a01b03841615155b1561310d57613097600080516020615903833981519152866114bb565b806130b557506130b5600080516020615903833981519152856114bb565b61310d5760405162461bcd60e51b8152602060048201526024808201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526332b9399760e11b6064820152608401610b01565b6001600160a01b0385166131955760005b8351811015613193578281815181106131395761313961511e565b60200260200101516101d360008684815181106131585761315861511e565b60200260200101518152602001908152602001600020600082825461317d9190615199565b9091555061318c905081615134565b905061311e565b505b6001600160a01b038416610f4e5760005b8351811015611a4a578281815181106131c1576131c161511e565b60200260200101516101d360008684815181106131e0576131e061511e565b60200260200101518152602001908152602001600020600082825461320591906155a2565b90915550613214905081615134565b90506131a6565b60008260000182815481106132325761323261511e565b9060005260206000200154905092915050565b6001600160a01b0384166132a55760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b01565b60006132af612104565b905060006132bc8561393a565b905060006132c98561393a565b90506132da83600089858589613038565b6000868152610194602090815260408083206001600160a01b038b1684529091528120805487929061330d908490615199565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a4a83600089898989613df3565b80613377576114ff565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156133ab576133a68282613eae565b6114ff565b6114ff84848484613f51565b816001600160a01b0316836001600160a01b0316141561342b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b01565b6001600160a01b0383811660008181526101956020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b606083156134a85750816114b4565b8251156134b85782518084602001fd5b8160405162461bcd60e51b8152600401610b01919061474d565b60607fc7a95ef88f83fa833ccfce325157b7111633b181b6a27181b86415d8d501134d6135026020840184614779565b6135126040850160208601614779565b60408501356135276080870160608801614779565b608087013561353960a08901896151b1565b604051613547929190615724565b60405190819003902060c089013560e08a013561356c6101208c016101008d01614779565b61357e6101408d016101208e016154d7565b6135906101608e016101408f016154d7565b60408051602081019d909d526001600160a01b039b8c16908d0152988a1660608c015260808b019790975294881660a08a015260c089019390935260e08801919091526101008701526101208601529092166101408401526001600160801b039182166101608085019190915291166101808301528301356101a08201526101c0016040516020818303038152906040529050919050565b6000610b30613635613faa565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006136858585614025565b915091506112148161406b565b600054610100900460ff166136b95760405162461bcd60e51b8152600401610b01906155d5565b6001603555565b600054610100900460ff166136e75760405162461bcd60e51b8152600401610b01906155d5565b815160209283012081519190920120600191909155600255565b600054610100900460ff16612a545760405162461bcd60e51b8152600401610b01906155d5565b600054610100900460ff1661374f5760405162461bcd60e51b8152600401610b01906155d5565b60005b815181101561107f576001609960008484815181106137735761377361511e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806137af81615134565b915050613752565b600054610100900460ff166137de5760405162461bcd60e51b8152600401610b01906155d5565b610ff281614226565b61107f8282612131565b6001600160a01b0384166138175760405162461bcd60e51b8152600401610b0190615695565b6000613821612104565b9050600061382e8561393a565b9050600061383b8561393a565b905061384b838989858589613038565b6000868152610194602090815260408083206001600160a01b038c1684529091529020548581101561388f5760405162461bcd60e51b8152600401610b01906156da565b6000878152610194602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906138cf908490615199565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461392f848a8a8a8a8a613df3565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106139745761397461511e565b602090810291909101015292915050565b60006001600160e01b03198216637965db0b60e01b1480610b3057506301ffc9a760e01b6001600160e01b0319831614610b30565b606060006139c98360026150c0565b6139d4906002615199565b6001600160401b038111156139eb576139eb6147b6565b6040519080825280601f01601f191660200182016040528015613a15576020820181803683370190505b509050600360fc1b81600081518110613a3057613a3061511e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613a5f57613a5f61511e565b60200101906001600160f81b031916908160001a9053506000613a838460026150c0565b613a8e906001615199565b90505b6001811115613b06576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613ac257613ac261511e565b1a60f81b828281518110613ad857613ad861511e565b60200101906001600160f81b031916908160001a90535060049490941c93613aff81615734565b9050613a91565b5083156114b45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b01565b6001600160a01b0384163b15610f4e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190613b99908990899088908890889060040161574b565b6020604051808303816000875af1925050508015613bd4575060408051601f3d908101601f19168201909252613bd1918101906157a9565b60015b613c8157613be06157c6565b806308c379a01415613c1a5750613bf56157e1565b80613c005750613c1c565b8060405162461bcd60e51b8152600401610b01919061474d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b01565b6001600160e01b0319811663bc197c8160e01b14611a4a5760405162461bcd60e51b8152600401610b019061586a565b6000818152600183016020526040812054613cf857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b30565b506000610b30565b60008181526001830160205260408120548015613de9576000613d246001836155a2565b8554909150600090613d38906001906155a2565b9050818114613d9d576000866000018281548110613d5857613d5861511e565b9060005260206000200154905080876000018481548110613d7b57613d7b61511e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613dae57613dae6158b2565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b30565b6000915050610b30565b6001600160a01b0384163b15610f4e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613e3790899089908890889088906004016158c8565b6020604051808303816000875af1925050508015613e72575060408051601f3d908101601f19168201909252613e6f918101906157a9565b60015b613e7e57613be06157c6565b6001600160e01b0319811663f23a6e6160e01b14611a4a5760405162461bcd60e51b8152600401610b019061586a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613efb576040519150601f19603f3d011682016040523d82523d6000602084013e613f00565b606091505b5050905080610f7c5760405162461bcd60e51b815260206004820152601c60248201527f6e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610b01565b816001600160a01b0316836001600160a01b03161415613f70576114ff565b6001600160a01b038316301415613f95576133a66001600160a01b038516838361423a565b6114ff6001600160a01b03851684848461429d565b60006114967f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613fd960015490565b6002546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b60008082516041141561405c5760208301516040840151606085015160001a614050878285856142d5565b94509450505050614064565b506000905060025b9250929050565b600081600481111561407f5761407f614ffe565b14156140885750565b600181600481111561409c5761409c614ffe565b14156140ea5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b01565b60028160048111156140fe576140fe614ffe565b141561414c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b01565b600381600481111561416057614160614ffe565b14156141b95760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b01565b60048160048111156141cd576141cd614ffe565b1415610ff25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b01565b805161107f906101969060208401906145f3565b6040516001600160a01b038316602482015260448101829052610f7c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526143c2565b6040516001600160a01b03808516602483015283166044820152606481018290526114ff9085906323b872dd60e01b90608401614266565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561430c57506000905060036143b9565b8460ff16601b1415801561432457508460ff16601c14155b1561433557506000905060046143b9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614389573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166143b2576000600192509250506143b9565b9150600090505b94509492505050565b6000614417826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144949092919063ffffffff16565b805190915015610f7c57808060200190518101906144359190615101565b610f7c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b01565b6060612a138484600085856001600160a01b0385163b6144f65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b01565b600080866001600160a01b0316858760405161451291906155b9565b60006040518083038185875af1925050503d806000811461454f576040519150601f19603f3d011682016040523d82523d6000602084013e614554565b606091505b5091509150614564828286613499565b979650505050505050565b82805461457b9061506f565b90600052602060002090601f01602090048101928261459d57600085556145e3565b82601f106145b65782800160ff198235161785556145e3565b828001600101855582156145e3579182015b828111156145e35782358255916020019190600101906145c8565b506145ef929150614667565b5090565b8280546145ff9061506f565b90600052602060002090601f01602090048101928261462157600085556145e3565b82601f1061463a57805160ff19168380011785556145e3565b828001600101855582156145e3579182015b828111156145e357825182559160200191906001019061464c565b5b808211156145ef5760008155600101614668565b80356001600160a01b038116811461469357600080fd5b919050565b600080604083850312156146ab57600080fd5b6146b48361467c565b946020939093013593505050565b6001600160e01b031981168114610ff257600080fd5b6000602082840312156146ea57600080fd5b81356114b4816146c2565b60005b838110156147105781810151838201526020016146f8565b838111156114ff5750506000910152565b600081518084526147398160208601602086016146f5565b601f01601f19169290920160200192915050565b6020815260006114b46020830184614721565b60006020828403121561477257600080fd5b5035919050565b60006020828403121561478b57600080fd5b6114b48261467c565b600080604083850312156147a757600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156147f1576147f16147b6565b6040525050565b60006001600160401b03821115614811576148116147b6565b5060051b60200190565b600082601f83011261482c57600080fd5b81356020614839826147f8565b60405161484682826147cc565b83815260059390931b850182019282810191508684111561486657600080fd5b8286015b84811015614881578035835291830191830161486a565b509695505050505050565b600082601f83011261489d57600080fd5b81356001600160401b038111156148b6576148b66147b6565b6040516148cd601f8301601f1916602001826147cc565b8181528460208386010111156148e257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561491757600080fd5b6149208661467c565b945061492e6020870161467c565b935060408601356001600160401b038082111561494a57600080fd5b61495689838a0161481b565b9450606088013591508082111561496c57600080fd5b61497889838a0161481b565b9350608088013591508082111561498e57600080fd5b5061499b8882890161488c565b9150509295509295909350565b600080604083850312156149bb57600080fd5b823591506149cb6020840161467c565b90509250929050565b8015158114610ff257600080fd5b6000602082840312156149f457600080fd5b81356114b4816149d4565b600082601f830112614a1057600080fd5b81356020614a1d826147f8565b604051614a2a82826147cc565b83815260059390931b8501820192828101915086841115614a4a57600080fd5b8286015b8481101561488157614a5f8161467c565b8352918301918301614a4e565b60008060408385031215614a7f57600080fd5b82356001600160401b0380821115614a9657600080fd5b614aa2868387016149ff565b93506020850135915080821115614ab857600080fd5b50614ac58582860161481b565b9150509250929050565b600081518084526020808501945080840160005b83811015614aff57815187529582019590820190600101614ae3565b509495945050505050565b6020815260006114b46020830184614acf565b600080600060608486031215614b3257600080fd5b614b3b8461467c565b925060208401356001600160401b0380821115614b5757600080fd5b614b638783880161481b565b93506040860135915080821115614b7957600080fd5b50614b868682870161481b565b9150509250925092565b60008083601f840112614ba257600080fd5b5081356001600160401b03811115614bb957600080fd5b60208301915083602082850101111561406457600080fd5b60008060208385031215614be457600080fd5b82356001600160401b03811115614bfa57600080fd5b614c0685828601614b90565b90969095509350505050565b600080600060408486031215614c2757600080fd5b83356001600160401b0380821115614c3e57600080fd5b908501906101808288031215614c5357600080fd5b90935060208501359080821115614c6957600080fd5b50614c7686828701614b90565b9497909650939450505050565b600080600060608486031215614c9857600080fd5b83359250614ca86020850161467c565b9150604084013590509250925092565b60008060408385031215614ccb57600080fd5b614cd48361467c565b91506020830135614ce4816149d4565b809150509250929050565b60008060208385031215614d0257600080fd5b82356001600160401b0380821115614d1957600080fd5b818501915085601f830112614d2d57600080fd5b813581811115614d3c57600080fd5b8660208260051b8501011115614d5157600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614db857603f19888603018452614da6858351614721565b94509285019290850190600101614d8a565b5092979650505050505050565b600080600080600060808688031215614ddd57600080fd5b614de68661467c565b94506020860135935060408601356001600160401b03811115614e0857600080fd5b614e1488828901614b90565b96999598509660600135949350505050565b600060208284031215614e3857600080fd5b8135600281106114b457600080fd5b80356001600160801b038116811461469357600080fd5b6000806000806000806000806000806101408b8d031215614e7e57600080fd5b614e878b61467c565b995060208b01356001600160401b0380821115614ea357600080fd5b614eaf8e838f0161488c565b9a5060408d0135915080821115614ec557600080fd5b614ed18e838f0161488c565b995060608d0135915080821115614ee757600080fd5b614ef38e838f0161488c565b985060808d0135915080821115614f0957600080fd5b50614f168d828e016149ff565b965050614f2560a08c0161467c565b9450614f3360c08c0161467c565b9350614f4160e08c01614e47565b9250614f506101008c01614e47565b9150614f5f6101208c0161467c565b90509295989b9194979a5092959850565b60008060408385031215614f8357600080fd5b614f8c8361467c565b91506149cb6020840161467c565b600080600080600060a08688031215614fb257600080fd5b614fbb8661467c565b9450614fc96020870161467c565b9350604086013592506060860135915060808601356001600160401b03811115614ff257600080fd5b61499b8882890161488c565b634e487b7160e01b600052602160045260246000fd5b602081016002831061503657634e487b7160e01b600052602160045260246000fd5b91905290565b60008060006060848603121561505157600080fd5b61505a8461467c565b95602085013595506040909401359392505050565b600181811c9082168061508357607f821691505b602082108114156150a457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156150da576150da6150aa565b500290565b6000826150fc57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561511357600080fd5b81516114b4816149d4565b634e487b7160e01b600052603260045260246000fd5b6000600019821415615148576151486150aa565b5060010190565b6020808252602a908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f726040820152691030b8383937bb32b21760b11b606082015260800190565b600082198211156151ac576151ac6150aa565b500190565b6000808335601e198436030181126151c857600080fd5b8301803591506001600160401b038211156151e257600080fd5b60200191503681900382131561406457600080fd5b6000808335601e1984360301811261520e57600080fd5b83016020810192503590506001600160401b0381111561522d57600080fd5b80360383131561406457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152615286602082016152798461467c565b6001600160a01b03169052565b60006152946020840161467c565b6001600160a01b038116604084015250604083013560608301526152ba6060840161467c565b6001600160a01b038116608084015250608083013560a08301526152e160a08401846151f7565b6101808060c08601526152f96101a08601838561523c565b925060c086013560e0860152610100915060e08601358286015261531e82870161467c565b9150610120615337818701846001600160a01b03169052565b615342818801614e47565b92505061014061535c818701846001600160801b03169052565b615367818801614e47565b925050610160615381818701846001600160801b03169052565b9590950135939094019290925250919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6040815260006154c56040830185614acf565b82810360208401526129ae8185614acf565b6000602082840312156154e957600080fd5b6114b482614e47565b60408152600080845481600182811c91508083168061551257607f831692505b602080841082141561553257634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561555157600181146155625761558d565b60ff1987168252828201975061558d565b60008c81526020902060005b878110156155875781548482015290860190840161556e565b83019850505b50509690960196909652509095945050505050565b6000828210156155b4576155b46150aa565b500390565b600082516155cb8184602087016146f5565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516156588160178501602088016146f5565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516156898160288401602088016146f5565b01602801949350505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b8183823760009101908152919050565b600081615743576157436150aa565b506000190190565b6001600160a01b0386811682528516602082015260a06040820181905260009061577790830186614acf565b82810360608401526157898186614acf565b9050828103608084015261579d8185614721565b98975050505050505050565b6000602082840312156157bb57600080fd5b81516114b4816146c2565b600060033d1115612f9a5760046000803e5060005160e01c90565b600060443d10156157ef5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561581e57505050505090565b82850191508151818111156158365750505050505090565b843d87010160208285010111156158505750505050505090565b61585f602082860101876147cc565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906145649083018461472156fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200a200c3ab15f5c6b94c057b56125165c21428c3d8b2327aafc385ddba72cd6da64736f6c634300080c0033