[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "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": [], "name": "MetadataFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "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 IPlatformFee.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": "freezeMetadata", "outputs": [], "stateMutability": "nonpayable", "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 IPlatformFee.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": "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": "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 IPlatformFee.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": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setTokenURI", "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": [], "name": "uriFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b62001cd91760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b615690806200015c6000396000f3fe60806040526004361061025e5760003560e01c806395d89b411161014057806395d89b411461060757806398a6e9931461061c5780639bcf7a151461062f578063a0a8e4601461064f578063a217fddf1461066b578063a22cb46514610680578063ac9650d8146106a0578063b03f4528146106cd578063b17cd86f146106ed578063b24f2d391461072c578063b6f10c791461075b578063bd85b0391461077b578063ca15c873146107a9578063cb2ef6f7146107c9578063d111515d146107eb578063d45573f614610800578063d547741f14610836578063e159163414610856578063e57553da14610876578063e8a3d4851461089c578063e985e9c5146108b1578063ea500d69146108fb578063eb13554f14610932578063f242432a14610953578063f28083c314610973578063f5298aca1461099457600080fd5b8062fdd58e1461026357806301ffc9a71461029657806306fdde03146102c6578063079fe40e146102e85780630e89341c1461032157806313af403514610341578063162094c4146103635780631e7ac48814610383578063248a9ca3146103a3578063274e4a1d146103c35780632a55205a146103de5780632eb2c2d61461040c5780632f2ff15d1461042c57806336568abe1461044c5780633b1475a71461046c5780634cc157df146104835780634e1273f4146104c5578063572b6c05146104f2578063600dd5ea146105125780636b20c454146105325780636f4f2837146105525780637e54523c146105725780638da5cb5b146105925780639010d07c146105a757806391d14854146105c7578063938e3d7b146105e7575b600080fd5b34801561026f57600080fd5b5061028361027e366004614276565b6109b4565b6040519081526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b13660046142b6565b610a50565b604051901515815260200161028d565b3480156102d257600080fd5b506102db610a96565b60405161028d919061432b565b3480156102f457600080fd5b506101cb54610309906001600160a01b031681565b6040516001600160a01b03909116815260200161028d565b34801561032d57600080fd5b506102db61033c36600461434b565b610b25565b34801561034d57600080fd5b5061036161035c366004614364565b610bc8565b005b34801561036f57600080fd5b5061036161037e366004614434565b610c7c565b34801561038f57600080fd5b5061036161039e366004614276565b610d47565b3480156103af57600080fd5b506102836103be36600461434b565b610ded565b3480156103cf57600080fd5b506101c5546102b69060ff1681565b3480156103ea57600080fd5b506103fe6103f936600461447a565b610e03565b60405161028d92919061449c565b34801561041857600080fd5b50610361610427366004614549565b610e40565b34801561043857600080fd5b506103616104473660046145f2565b610e9e565b34801561045857600080fd5b506103616104673660046145f2565b610ebf565b34801561047857600080fd5b506102836101ca5481565b34801561048f57600080fd5b506104a361049e36600461434b565b610f49565b604080516001600160a01b03909316835261ffff90911660208301520161028d565b3480156104d157600080fd5b506104e56104e036600461468b565b610fb9565b60405161028d919061471f565b3480156104fe57600080fd5b506102b661050d366004614364565b6110e2565b34801561051e57600080fd5b5061036161052d366004614276565b611100565b34801561053e57600080fd5b5061036161054d366004614732565b611198565b34801561055e57600080fd5b5061036161056d366004614364565b6111ed565b34801561057e57600080fd5b5061036161058d366004614276565b611244565b34801561059e57600080fd5b506103096112b0565b3480156105b357600080fd5b506103096105c236600461447a565b6112e8565b3480156105d357600080fd5b506102b66105e23660046145f2565b611308565b3480156105f357600080fd5b506103616106023660046147e6565b611334565b34801561061357600080fd5b506102db611352565b61036161062a366004614827565b611360565b34801561063b57600080fd5b5061036161064a366004614898565b611536565b34801561065b57600080fd5b506040516001815260200161028d565b34801561067757600080fd5b50610283600081565b34801561068c57600080fd5b5061036161069b3660046148db565b6115ea565b3480156106ac57600080fd5b506106c06106bb366004614912565b6115fc565b60405161028d9190614986565b3480156106d957600080fd5b506103616106e83660046149e8565b6116f0565b3480156106f957600080fd5b5061070d610708366004614827565b611770565b6040805192151583526001600160a01b0390911660208301520161028d565b34801561073857600080fd5b506101cd546101ce546001600160a01b03909116906001600160801b03166104a3565b34801561076757600080fd5b50610361610776366004614a49565b6117c7565b34801561078757600080fd5b5061028361079636600461434b565b6101d36020526000908152604090205481565b3480156107b557600080fd5b506102836107c436600461434b565b611831565b3480156107d557600080fd5b506b546f6b656e4552433131353560a01b610283565b3480156107f757600080fd5b50610361611849565b34801561080c57600080fd5b506101cc546101ce546001600160a01b0390911690600160801b90046001600160801b03166104a3565b34801561084257600080fd5b506103616108513660046145f2565b6118ec565b34801561086257600080fd5b50610361610871366004614a81565b611908565b34801561088257600080fd5b506103fe6101cc546101cf546001600160a01b0390911691565b3480156108a857600080fd5b506102db611c1f565b3480156108bd57600080fd5b506102b66108cc366004614b93565b6001600160a01b0391821660009081526101946020908152604080832093909416825291909152205460ff1690565b34801561090757600080fd5b5061030961091636600461434b565b6101d4602052600090815260409020546001600160a01b031681565b34801561093e57600080fd5b506101cc54610309906001600160a01b031681565b34801561095f57600080fd5b5061036161096e366004614bbd565b611c2d565b34801561097f57600080fd5b506101d05460ff1660405161028d9190614c37565b3480156109a057600080fd5b506103616109af366004614c5f565b611c84565b60006001600160a01b038316610a245760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152610193602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610a5b82611ce8565b80610a7657506001600160e01b03198216636cdb3d1360e11b145b80610a4a57506001600160e01b0319821663152a902d60e11b1492915050565b6101c78054610aa490614c92565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad090614c92565b8015610b1d5780601f10610af257610100808354040283529160200191610b1d565b820191906000526020600020905b815481529060010190602001808311610b0057829003601f168201915b505050505081565b60008181526101c660205260409020805460609190610b4390614c92565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6f90614c92565b8015610bbc5780601f10610b9157610100808354040283529160200191610bbc565b820191906000526020600020905b815481529060010190602001808311610b9f57829003601f168201915b50505050509050919050565b6000610bd381611d28565b610bde600083611308565b610c285760405162461bcd60e51b815260206004820152601b60248201527a3732bb9037bbb732b9103737ba1036b7b23ab6329030b236b4b71760291b6044820152606401610a1b565b6101c980546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b610c84611d3c565b610ce55760405162461bcd60e51b815260206004820152602c60248201527f4e46544d657461646174613a206e6f7420617574686f72697a656420746f207360448201526b32ba1036b2ba30b230ba309760a11b6064820152608401610a1b565b6101c55460ff1615610d395760405162461bcd60e51b815260206004820181905260248201527f4e46544d657461646174613a206d657461646174612069732066726f7a656e2e6044820152606401610a1b565b610d438282611d58565b5050565b6000610d5281611d28565b612710821115610d745760405162461bcd60e51b8152600401610a1b90614ccd565b6101ce80546001600160801b03166001600160401b038416600160801b021790556101cc80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b600090815261012f602052604090206001015490565b600080600080610e1286610f49565b90945084925061ffff169050612710610e2b8287614d0c565b610e359190614d2b565b925050509250929050565b610e48611df9565b6001600160a01b0316856001600160a01b03161480610e6e5750610e6e856108cc611df9565b610e8a5760405162461bcd60e51b8152600401610a1b90614d4d565b610e978585858585611e03565b5050505050565b610ea782610ded565b610eb081611d28565b610eba8383611fbd565b505050565b610ec7611df9565b6001600160a01b0316816001600160a01b031614610f3f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a1b565b610d438282611fe0565b60008181526101d560209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115610f915780516020820151610faf565b6101cd546101ce546001600160a01b03909116906001600160801b03165b9250925050915091565b6060815183511461101e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610a1b565b600083516001600160401b038111156110395761103961437f565b604051908082528060200260200182016040528015611062578160200160208202803683370190505b50905060005b84518110156110da576110ad85828151811061108657611086614d9c565b60200260200101518583815181106110a0576110a0614d9c565b60200260200101516109b4565b8282815181106110bf576110bf614d9c565b60209081029190910101526110d381614db2565b9050611068565b509392505050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061110b81611d28565b61271082111561112d5760405162461bcd60e51b8152600401610a1b90614dcd565b6101cd80546001600160a01b0319166001600160a01b0385169081179091556101ce80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610de0565b6111a0611df9565b6001600160a01b0316836001600160a01b031614806111c657506111c6836108cc611df9565b6111e25760405162461bcd60e51b8152600401610a1b90614df9565b610eba838383612003565b60006111f881611d28565b6101cb80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b600061124f81611d28565b6101cf8290556101cc80546001600160a01b0319166001600160a01b0385161790556040517ff8086cee80709bd44c82f89dbca54115ebd05e840a88ab81df9cf5be9754eb63906112a3908590859061449c565b60405180910390a1505050565b6101c9546000906112cb9082906001600160a01b0316611308565b6112d55750600090565b6101c9546001600160a01b03165b905090565b60008281526101616020526040812061130190836121ab565b9392505050565b600091825261012f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061133f81611d28565b61134c6101d1848461414d565b50505050565b6101c88054610aa490614c92565b600260355414156113b35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a1b565b600260355560006113c58484846121b7565b905060006113d66020860186614364565b905060006000198660800135141561140957506101ca80549060019060006113fe8385614e43565b909155506114369050565b6101ca5486608001351061142f5760405162461bcd60e51b8152600401610a1b90614e5b565b5060808501355b60006114486040880160208901614364565b6001600160a01b0316146114b85760405180604001604052808760200160208101906114749190614364565b6001600160a01b03908116825260408981013560209384015260008581526101d5845220835181546001600160a01b03191692169190911781559101516001909101555b6114d4826114c960a0890189614e7f565b848a60c00135612358565b6114dd86612433565b80826001600160a01b0316846001600160a01b03167f0b35afaf155daeef41cc46df86f058df2855c57d30ab134647a6b587e7cc8c39896040516115219190614f33565b60405180910390a45050600160355550505050565b600061154181611d28565b6127108211156115635760405162461bcd60e51b8152600401610a1b90614dcd565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101d58352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b610d436115f5611df9565b838361269a565b6060816001600160401b038111156116165761161661437f565b60405190808252806020026020018201604052801561164957816020015b60608152602001906001900390816116345790505b50905060005b828110156116e9576116b93085858481811061166d5761166d614d9c565b905060200281019061167f9190614e7f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277c92505050565b8282815181106116cb576116cb614d9c565b602002602001018190525080806116e190614db2565b91505061164f565b5092915050565b60008051602061563b83398151915261170881611d28565b600060001986141561173557506101ca805490600190600061172a8385614e43565b9091555061175a9050565b6101ca5486106117575760405162461bcd60e51b8152600401610a1b90614e5b565b50845b6117678786868487612358565b50505050505050565b600080600061178086868661286e565b61016087013560009081526101d2602052604090205490915060ff161580156117bc57506117bc60008051602061563b83398151915282611308565b969095509350505050565b60006117d281611d28565b6101d0805483919060ff1916600183818111156117f1576117f1614c21565b02179055507fd246da9440709ce0dd3f4fd669abc85ada012ab9774b8ecdcc5059ba1486b9c1826040516118259190614c37565b60405180910390a15050565b600081815261016160205260408120610a4a906128d2565b611851611d3c565b6118b35760405162461bcd60e51b815260206004820152602d60248201527f4e46544d657461646174613a206e6f7420617574686f72697a656420746f206660448201526c7265657a65206d65746461746160981b6064820152608401610a1b565b6101c5805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b6118f582610ded565b6118fe81611d28565b610eba8383611fe0565b600054610100900460ff16158080156119285750600054600160ff909116105b80611949575061193730611cd9565b158015611949575060005460ff166001145b6119ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a1b565b6000805460ff1916600117905580156119cf576000805461ff0019166101001790555b6119d76128dc565b611a1e6040518060400160405280600c81526020016b546f6b656e4552433131353560a01b815250604051806040016040528060018152602001603160f81b81525061290d565b611a278761293e565b611a3f60405180602001604052806000815250612976565b8951611a53906101c79060208d01906141d1565b508851611a68906101c89060208c01906141d1565b506101cd80546001600160a01b03199081166001600160a01b03888116919091179092556101ce80546001600160801b0319166001600160801b0388161790556101cc805482168584161790556101cb80549091169188169190911790558751611ada906101d19060208b01906141d1565b50612710836001600160801b03161115611b065760405162461bcd60e51b8152600401610a1b90614ccd565b6101ce80546001600160801b03858116600160801b0291161790556101d0805460ff191690556101c980546001600160a01b0319166001600160a01b038d16179055611b5360008c6129a6565b611b6b60008051602061563b8339815191528c6129a6565b611b836000805160206155b48339815191528c6129a6565b611b9c6000805160206155b483398151915260006129a6565b611bb46000805160206155f48339815191528c6129a6565b611bcc6000805160206155f4833981519152806129b0565b8015611c12576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101d18054610aa490614c92565b611c35611df9565b6001600160a01b0316856001600160a01b03161480611c5b5750611c5b856108cc611df9565b611c775760405162461bcd60e51b8152600401610a1b90614d4d565b610e978585858585612a04565b611c8c611df9565b6001600160a01b0316836001600160a01b03161480611cb25750611cb2836108cc611df9565b611cce5760405162461bcd60e51b8152600401610a1b90614df9565b610eba838383612b3b565b6001600160a01b03163b151590565b60006001600160e01b03198216636cdb3d1360e11b1480611d1957506001600160e01b031982166303a24d0760e21b145b80610a4a5750610a4a82612c52565b611d3981611d34611df9565b612c77565b50565b60006112e36000805160206155f48339815191526105e2611df9565b6000815111611da85760405162461bcd60e51b815260206004820152601c60248201527b27232a26b2ba30b230ba309d1032b6b83a3c9036b2ba30b230ba309760211b6044820152606401610a1b565b60008281526101c6602090815260409091208251611dc8928401906141d1565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790602001611825565b60006112e3612cdb565b8151835114611e245760405162461bcd60e51b8152600401610a1b9061504e565b6001600160a01b038416611e4a5760405162461bcd60e51b8152600401610a1b90615096565b6000611e54611df9565b9050611e64818787878787612d00565b60005b8451811015611f4f576000858281518110611e8457611e84614d9c565b602002602001015190506000858381518110611ea257611ea2614d9c565b6020908102919091018101516000848152610193835260408082206001600160a01b038e168352909352919091205490915081811015611ef45760405162461bcd60e51b8152600401610a1b906150db565b6000838152610193602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611f34908490614e43565b9250508190555050505080611f4890614db2565b9050611e67565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611f9f929190615125565b60405180910390a4611fb5818787878787612ee3565b505050505050565b611fc78282613046565b600082815261016160205260409020610eba90826130ce565b611fea82826130e3565b600082815261016160205260409020610eba9082613169565b6001600160a01b0383166120295760405162461bcd60e51b8152600401610a1b9061514a565b805182511461204a5760405162461bcd60e51b8152600401610a1b9061504e565b6000612054611df9565b905061207481856000868660405180602001604052806000815250612d00565b60005b835181101561213e57600084828151811061209457612094614d9c565b6020026020010151905060008483815181106120b2576120b2614d9c565b6020908102919091018101516000848152610193835260408082206001600160a01b038c1683529093529190912054909150818110156121045760405162461bcd60e51b8152600401610a1b9061518d565b6000928352610193602090815260408085206001600160a01b038b168652909152909220910390558061213681614db2565b915050612077565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161218f929190615125565b60405180910390a460408051602081019091526000905261134c565b6000611301838361317e565b60008060006121c7868686611770565b915091508161220c5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610a1b565b4261221f610140880161012089016151d1565b6001600160801b031611158015612250575042612244610160880161014089016151d1565b6001600160801b031610155b61228e5760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610a1b565b600061229d6020880188614364565b6001600160a01b031614156122ea5760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610a1b565b60008660c001351161232e5760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610a1b565b61016086013560009081526101d260205260409020805460ff191660011790559150509392505050565b60008281526101c660205260409020805461237290614c92565b151590506123ba576123ba8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5892505050565b6123d5858383604051806020016040528060008152506131a8565b81856001600160a01b03167f04133ee4cb027e1c5fce5e3481289278a93bd16a65a3b65b428a6d239e706bfb6101c66000868152602001908152602001600020846040516124249291906151ec565b60405180910390a35050505050565b60e0810135612473573415611d395760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610a1b565b600061248760c083013560e0840135614d0c565b9050600060016101d05460ff1660018111156124a5576124a5614c21565b146124db576101ce54612710906124cc90600160801b90046001600160801b031684614d0c565b6124d69190614d2b565b6124e0565b6101cf545b9050808210156125315760405162461bcd60e51b815260206004820152601c60248201527b7072696365206c657373207468616e20706c6174666f726d2066656560201b6044820152606401610a1b565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61255861012085016101008601614364565b6001600160a01b031614156125b4578134146125af5760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610a1b565b6125f7565b34156125f75760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610a1b565b60008061260a6080860160608701614364565b6001600160a01b03161461262d576126286080850160608601614364565b61263b565b6101cb546001600160a01b03165b905061266d61265261012086016101008701614364565b61265a611df9565b6101cc546001600160a01b0316856132be565b61134c61268261012086016101008701614364565b61268a611df9565b83612695868861529c565b6132be565b816001600160a01b0316836001600160a01b0316141561270e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610a1b565b6001600160a01b0383811660008181526101946020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b606061278783611cd9565b6127e25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a1b565b600080846001600160a01b0316846040516127fd91906152b3565b600060405180830381855af49150503d8060008114612838576040519150601f19603f3d011682016040523d82523d6000602084013e61283d565b606091505b5091509150612865828260405180606001604052806027815260200161561460279139613308565b95945050505050565b60006128ca83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506128c492506128b89150889050613341565b805190602001206134cd565b9061351b565b949350505050565b6000610a4a825490565b600054610100900460ff166129035760405162461bcd60e51b8152600401610a1b906152cf565b61290b613537565b565b600054610100900460ff166129345760405162461bcd60e51b8152600401610a1b906152cf565b610d438282613565565b600054610100900460ff166129655760405162461bcd60e51b8152600401610a1b906152cf565b61296d6135a6565b611d39816135cd565b600054610100900460ff1661299d5760405162461bcd60e51b8152600401610a1b906152cf565b611d398161365c565b610d438282611fbd565b60006129bb83610ded565b600084815261012f6020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038416612a2a5760405162461bcd60e51b8152600401610a1b90615096565b6000612a34611df9565b90506000612a418561368c565b90506000612a4e8561368c565b9050612a5e838989858589612d00565b6000868152610193602090815260408083206001600160a01b038c16845290915290205485811015612aa25760405162461bcd60e51b8152600401610a1b906150db565b6000878152610193602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612ae2908490614e43565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816916000805160206155d4833981519152910160405180910390a4612b30848a8a8a8a8a6136d7565b505050505050505050565b6001600160a01b038316612b615760405162461bcd60e51b8152600401610a1b9061514a565b6000612b6b611df9565b90506000612b788461368c565b90506000612b858461368c565b9050612ba583876000858560405180602001604052806000815250612d00565b6000858152610193602090815260408083206001600160a01b038a16845290915290205484811015612be95760405162461bcd60e51b8152600401610a1b9061518d565b6000868152610193602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816916000805160206155d4833981519152910160405180910390a4604080516020810190915260009052611767565b60006001600160e01b03198216635a05180f60e01b1480610a4a5750610a4a82613799565b612c818282611308565b610d4357612c99816001600160a01b031660146137ce565b612ca48360206137ce565b604051602001612cb592919061531a565b60408051601f198184030181529082905262461bcd60e51b8252610a1b9160040161432b565b6000612ce6336110e2565b15612cf8575060131936013560601c90565b503390565b90565b612d196000805160206155b48339815191526000611308565b158015612d2e57506001600160a01b03851615155b8015612d4257506001600160a01b03841615155b15612dd557612d5f6000805160206155b483398151915286611308565b80612d7d5750612d7d6000805160206155b483398151915285611308565b612dd55760405162461bcd60e51b8152602060048201526024808201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526332b9399760e11b6064820152608401610a1b565b6001600160a01b038516612e5d5760005b8351811015612e5b57828181518110612e0157612e01614d9c565b60200260200101516101d36000868481518110612e2057612e20614d9c565b602002602001015181526020019081526020016000206000828254612e459190614e43565b90915550612e54905081614db2565b9050612de6565b505b6001600160a01b038416611fb55760005b835181101561176757828181518110612e8957612e89614d9c565b60200260200101516101d36000868481518110612ea857612ea8614d9c565b602002602001015181526020019081526020016000206000828254612ecd919061529c565b90915550612edc905081614db2565b9050612e6e565b612ef5846001600160a01b0316611cd9565b15611fb55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612f2e9089908990889088908890600401615389565b6020604051808303816000875af1925050508015612f69575060408051601f3d908101601f19168201909252612f66918101906153e7565b60015b61301657612f75615404565b806308c379a01415612faf5750612f8a61541f565b80612f955750612fb1565b8060405162461bcd60e51b8152600401610a1b919061432b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610a1b565b6001600160e01b0319811663bc197c8160e01b146117675760405162461bcd60e51b8152600401610a1b906154a8565b6130508282611308565b610d4357600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561308a611df9565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611301836001600160a01b038416613969565b6130ed8282611308565b15610d4357600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19169055613125611df9565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000611301836001600160a01b0384166139b8565b600082600001828154811061319557613195614d9c565b9060005260206000200154905092915050565b6001600160a01b0384166132085760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a1b565b6000613212611df9565b9050600061321f8561368c565b9050600061322c8561368c565b905061323d83600089858589612d00565b6000868152610193602090815260408083206001600160a01b038b16845290915281208054879290613270908490614e43565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716916000805160206155d4833981519152910160405180910390a4611767836000898989896136d7565b806132c85761134c565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156132fc576132f78282613aab565b61134c565b61134c84848484613b4d565b60608315613317575081611301565b8251156133275782518084602001fd5b8160405162461bcd60e51b8152600401610a1b919061432b565b60607fc7a95ef88f83fa833ccfce325157b7111633b181b6a27181b86415d8d501134d6133716020840184614364565b6133816040850160208601614364565b60408501356133966080870160608801614364565b60808701356133a860a0890189614e7f565b6040516133b69291906154f0565b6040805191829003822060208301989098526001600160a01b03968716908201529385166060850152608084019290925290921660a082015260c081019190915260e08101919091526101000160408051601f1981840301815291905260c083013560e084013561342f61012086016101008701614364565b613441610140870161012088016151d1565b613453610160880161014089016151d1565b6040805160208101969096528501939093526001600160a01b0390911660608401526001600160801b0390811660808401521660a082015261016084013560c082015260e00160408051601f19818403018152908290526134b79291602001615500565b6040516020818303038152906040529050919050565b6000610a4a6134da613ba6565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061352a8585613c21565b915091506110da81613c67565b600054610100900460ff1661355e5760405162461bcd60e51b8152600401610a1b906152cf565b6001603555565b600054610100900460ff1661358c5760405162461bcd60e51b8152600401610a1b906152cf565b815160209283012081519190920120600191909155600255565b600054610100900460ff1661290b5760405162461bcd60e51b8152600401610a1b906152cf565b600054610100900460ff166135f45760405162461bcd60e51b8152600401610a1b906152cf565b60005b8151811015610d435760016099600084848151811061361857613618614d9c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061365481614db2565b9150506135f7565b600054610100900460ff166136835760405162461bcd60e51b8152600401610a1b906152cf565b611d3981613e1d565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106136c6576136c6614d9c565b602090810291909101015292915050565b6136e9846001600160a01b0316611cd9565b15611fb55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613722908990899088908890889060040161552f565b6020604051808303816000875af192505050801561375d575060408051601f3d908101601f1916820190925261375a918101906153e7565b60015b61376957612f75615404565b6001600160e01b0319811663f23a6e6160e01b146117675760405162461bcd60e51b8152600401610a1b906154a8565b60006001600160e01b03198216637965db0b60e01b1480610a4a57506301ffc9a760e01b6001600160e01b0319831614610a4a565b606060006137dd836002614d0c565b6137e8906002614e43565b6001600160401b038111156137ff576137ff61437f565b6040519080825280601f01601f191660200182016040528015613829576020820181803683370190505b509050600360fc1b8160008151811061384457613844614d9c565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061387357613873614d9c565b60200101906001600160f81b031916908160001a9053506000613897846002614d0c565b6138a2906001614e43565b90505b600181111561391a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106138d6576138d6614d9c565b1a60f81b8282815181106138ec576138ec614d9c565b60200101906001600160f81b031916908160001a90535060049490941c9361391381615569565b90506138a5565b5083156113015760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a1b565b60008181526001830160205260408120546139b057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a4a565b506000610a4a565b60008181526001830160205260408120548015613aa15760006139dc60018361529c565b85549091506000906139f09060019061529c565b9050818114613a55576000866000018281548110613a1057613a10614d9c565b9060005260206000200154905080876000018481548110613a3357613a33614d9c565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613a6657613a66615580565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a4a565b6000915050610a4a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613af8576040519150601f19603f3d011682016040523d82523d6000602084013e613afd565b606091505b5050905080610eba5760405162461bcd60e51b815260206004820152601c60248201527b1b985d1a5d99481d1bdad95b881d1c985b9cd9995c8819985a5b195960221b6044820152606401610a1b565b816001600160a01b0316836001600160a01b03161415613b6c5761134c565b6001600160a01b038316301415613b91576132f76001600160a01b0385168383613e31565b61134c6001600160a01b038516848484613e87565b60006112e37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613bd560015490565b6002546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600080825160411415613c585760208301516040840151606085015160001a613c4c87828585613ebf565b94509450505050613c60565b506000905060025b9250929050565b6000816004811115613c7b57613c7b614c21565b1415613c845750565b6001816004811115613c9857613c98614c21565b1415613ce15760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a1b565b6002816004811115613cf557613cf5614c21565b1415613d435760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a1b565b6003816004811115613d5757613d57614c21565b1415613db05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a1b565b6004816004811115613dc457613dc4614c21565b1415611d395760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a1b565b8051610d43906101959060208401906141d1565b610eba8363a9059cbb60e01b8484604051602401613e5092919061449c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613fa2565b6040516001600160a01b038085166024830152831660448201526064810182905261134c9085906323b872dd60e01b90608401613e50565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115613eec5750600090506003613f99565b8460ff16601b14158015613f0457508460ff16601c14155b15613f155750600090506004613f99565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613f69573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613f9257600060019250925050613f99565b9150600090505b94509492505050565b6000613ff7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140749092919063ffffffff16565b805190915015610eba57808060200190518101906140159190615596565b610eba5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a1b565b60606128ca84846000858561408885611cd9565b6140d45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a1b565b600080866001600160a01b031685876040516140f091906152b3565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b5091509150614142828286613308565b979650505050505050565b82805461415990614c92565b90600052602060002090601f01602090048101928261417b57600085556141c1565b82601f106141945782800160ff198235161785556141c1565b828001600101855582156141c1579182015b828111156141c15782358255916020019190600101906141a6565b506141cd929150614245565b5090565b8280546141dd90614c92565b90600052602060002090601f0160209004810192826141ff57600085556141c1565b82601f1061421857805160ff19168380011785556141c1565b828001600101855582156141c1579182015b828111156141c157825182559160200191906001019061422a565b5b808211156141cd5760008155600101614246565b80356001600160a01b038116811461427157600080fd5b919050565b6000806040838503121561428957600080fd5b6142928361425a565b946020939093013593505050565b6001600160e01b031981168114611d3957600080fd5b6000602082840312156142c857600080fd5b8135611301816142a0565b60005b838110156142ee5781810151838201526020016142d6565b8381111561134c5750506000910152565b600081518084526143178160208601602086016142d3565b601f01601f19169290920160200192915050565b60208152600061130160208301846142ff565b6001600160a01b03169052565b60006020828403121561435d57600080fd5b5035919050565b60006020828403121561437657600080fd5b6113018261425a565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156143ba576143ba61437f565b6040525050565b600082601f8301126143d257600080fd5b81356001600160401b038111156143eb576143eb61437f565b604051614402601f8301601f191660200182614395565b81815284602083860101111561441757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561444757600080fd5b8235915060208301356001600160401b0381111561446457600080fd5b614470858286016143c1565b9150509250929050565b6000806040838503121561448d57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60006001600160401b038211156144ce576144ce61437f565b5060051b60200190565b600082601f8301126144e957600080fd5b813560206144f6826144b5565b6040516145038282614395565b83815260059390931b850182019282810191508684111561452357600080fd5b8286015b8481101561453e5780358352918301918301614527565b509695505050505050565b600080600080600060a0868803121561456157600080fd5b61456a8661425a565b94506145786020870161425a565b935060408601356001600160401b038082111561459457600080fd5b6145a089838a016144d8565b945060608801359150808211156145b657600080fd5b6145c289838a016144d8565b935060808801359150808211156145d857600080fd5b506145e5888289016143c1565b9150509295509295909350565b6000806040838503121561460557600080fd5b823591506146156020840161425a565b90509250929050565b600082601f83011261462f57600080fd5b8135602061463c826144b5565b6040516146498282614395565b83815260059390931b850182019282810191508684111561466957600080fd5b8286015b8481101561453e5761467e8161425a565b835291830191830161466d565b6000806040838503121561469e57600080fd5b82356001600160401b03808211156146b557600080fd5b6146c18683870161461e565b935060208501359150808211156146d757600080fd5b50614470858286016144d8565b600081518084526020808501945080840160005b83811015614714578151875295820195908201906001016146f8565b509495945050505050565b60208152600061130160208301846146e4565b60008060006060848603121561474757600080fd5b6147508461425a565b925060208401356001600160401b038082111561476c57600080fd5b614778878388016144d8565b9350604086013591508082111561478e57600080fd5b5061479b868287016144d8565b9150509250925092565b60008083601f8401126147b757600080fd5b5081356001600160401b038111156147ce57600080fd5b602083019150836020828501011115613c6057600080fd5b600080602083850312156147f957600080fd5b82356001600160401b0381111561480f57600080fd5b61481b858286016147a5565b90969095509350505050565b60008060006040848603121561483c57600080fd5b83356001600160401b038082111561485357600080fd5b90850190610180828803121561486857600080fd5b9093506020850135908082111561487e57600080fd5b5061488b868287016147a5565b9497909650939450505050565b6000806000606084860312156148ad57600080fd5b833592506148bd6020850161425a565b9150604084013590509250925092565b8015158114611d3957600080fd5b600080604083850312156148ee57600080fd5b6148f78361425a565b91506020830135614907816148cd565b809150509250929050565b6000806020838503121561492557600080fd5b82356001600160401b038082111561493c57600080fd5b818501915085601f83011261495057600080fd5b81358181111561495f57600080fd5b8660208260051b850101111561497457600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156149db57603f198886030184526149c98583516142ff565b945092850192908501906001016149ad565b5092979650505050505050565b600080600080600060808688031215614a0057600080fd5b614a098661425a565b94506020860135935060408601356001600160401b03811115614a2b57600080fd5b614a37888289016147a5565b96999598509660600135949350505050565b600060208284031215614a5b57600080fd5b81356002811061130157600080fd5b80356001600160801b038116811461427157600080fd5b6000806000806000806000806000806101408b8d031215614aa157600080fd5b614aaa8b61425a565b995060208b01356001600160401b0380821115614ac657600080fd5b614ad28e838f016143c1565b9a5060408d0135915080821115614ae857600080fd5b614af48e838f016143c1565b995060608d0135915080821115614b0a57600080fd5b614b168e838f016143c1565b985060808d0135915080821115614b2c57600080fd5b50614b398d828e0161461e565b965050614b4860a08c0161425a565b9450614b5660c08c0161425a565b9350614b6460e08c01614a6a565b9250614b736101008c01614a6a565b9150614b826101208c0161425a565b90509295989b9194979a5092959850565b60008060408385031215614ba657600080fd5b614baf8361425a565b91506146156020840161425a565b600080600080600060a08688031215614bd557600080fd5b614bde8661425a565b9450614bec6020870161425a565b9350604086013592506060860135915060808601356001600160401b03811115614c1557600080fd5b6145e5888289016143c1565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614c5957634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614c7457600080fd5b614c7d8461425a565b95602085013595506040909401359392505050565b600181811c90821680614ca657607f821691505b60208210811415614cc757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614d2657614d26614cf6565b500290565b600082614d4857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614dc657614dc6614cf6565b5060010190565b60208082526012908201527165786365656420726f79616c74792062707360701b604082015260600190565b6020808252602a908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f726040820152691030b8383937bb32b21760b11b606082015260800190565b60008219821115614e5657614e56614cf6565b500190565b6020808252600a90820152691a5b9d985b1a59081a5960b21b604082015260600190565b6000808335601e19843603018112614e9657600080fd5b8301803591506001600160401b03821115614eb057600080fd5b602001915036819003821315613c6057600080fd5b6000808335601e19843603018112614edc57600080fd5b83016020810192503590506001600160401b03811115614efb57600080fd5b803603831315613c6057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152614f4c60208201614f478461425a565b61433e565b6000614f5a6020840161425a565b614f67604084018261433e565b5060408301356060830152614f7e6060840161425a565b614f8b608084018261433e565b50608083013560a0830152614fa360a0840184614ec5565b6101808060c0860152614fbb6101a086018385614f0a565b925060c086013560e0860152610100915060e086013582860152614fe082870161425a565b9150610120614ff18187018461433e565b614ffc818801614a6a565b925050610140615016818701846001600160801b03169052565b615021818801614a6a565b92505061016061503b818701846001600160801b03169052565b9590950135939094019290925250919050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061513860408301856146e4565b828103602084015261286581856146e4565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6000602082840312156151e357600080fd5b61130182614a6a565b60408152600080845481600182811c91508083168061520c57607f831692505b602080841082141561522c57634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561524b576001811461525c57615287565b60ff19871682528282019750615287565b60008c81526020902060005b8781101561528157815484820152908601908401615268565b83019850505b50509690960196909652509095945050505050565b6000828210156152ae576152ae614cf6565b500390565b600082516152c58184602087016142d3565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161534c8160178501602088016142d3565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161537d8160288401602088016142d3565b01602801949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906153b5908301866146e4565b82810360608401526153c781866146e4565b905082810360808401526153db81856142ff565b98975050505050505050565b6000602082840312156153f957600080fd5b8151611301816142a0565b600060033d1115612cfd5760046000803e5060005160e01c90565b600060443d101561542d5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561545c57505050505090565b82850191508151818111156154745750505050505090565b843d870101602082850101111561548e5750505050505090565b61549d60208286010187614395565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b8183823760009101908152919050565b600083516155128184602088016142d3565b8351908301906155268183602088016142d3565b01949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614142908301846142ff565b60008161557857615578614cf6565b506000190190565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156155a857600080fd5b8151611301816148cd56fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6cc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f626bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f80416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220e8fc22cfbf29c95460f59d0365ec357f490ba0b2e7d7169f72e32dd46c042c3064736f6c634300080c0033