[ { "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": "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": 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": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "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": "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": "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": "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" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b62001dd81760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b6155a9806200015c6000396000f3fe6080604052600436106102f75760003560e01c806391d148541161019a578063bd85b039116100e1578063e8a3d4851161008a578063eb13554f11610064578063eb13554f1461098b578063f242432a146109ac578063f5298aca146109cc57600080fd5b8063e8a3d485146108f5578063e985e9c51461090a578063ea500d691461095457600080fd5b8063d45573f6116100bb578063d45573f61461087f578063d547741f146108b5578063e1591634146108d557600080fd5b8063bd85b0391461080f578063ca15c8731461083d578063cb2ef6f71461085d57600080fd5b8063a217fddf11610143578063b03f45281161011d578063b03f452814610781578063b17cd86f146107a1578063b24f2d39146107e057600080fd5b8063a217fddf1461071f578063a22cb46514610734578063ac9650d81461075457600080fd5b806398a6e9931161017457806398a6e993146106d05780639bcf7a15146106e3578063a0a8e4601461070357600080fd5b806391d148541461067b578063938e3d7b1461069b57806395d89b41146106bb57600080fd5b806332f0cd641161025e578063572b6c05116102075780636f4f2837116101e15780636f4f2837146106265780638da5cb5b146106465780639010d07c1461065b57600080fd5b8063572b6c05146105ad578063600dd5ea146105e65780636b20c4541461060657600080fd5b80634cc157df116102385780634cc157df146105235780634e1273f414610565578063504c6e011461059257600080fd5b806332f0cd64146104cc57806336568abe146104ec5780633b1475a71461050c57600080fd5b806313af4035116102c05780632a55205a1161029a5780632a55205a1461044d5780632eb2c2d61461048c5780632f2ff15d146104ac57600080fd5b806313af4035146103da5780631e7ac488146103fc578063248a9ca31461041c57600080fd5b8062fdd58e146102fc57806301ffc9a71461032f57806306fdde031461035f578063079fe40e146103815780630e89341c146103ba575b600080fd5b34801561030857600080fd5b5061031c61031736600461430d565b6109ec565b6040519081526020015b60405180910390f35b34801561033b57600080fd5b5061034f61034a36600461434d565b610a88565b6040519015158152602001610326565b34801561036b57600080fd5b50610374610ace565b60405161032691906143c2565b34801561038d57600080fd5b506101ca546103a2906001600160a01b031681565b6040516001600160a01b039091168152602001610326565b3480156103c657600080fd5b506103746103d53660046143d5565b610b5d565b3480156103e657600080fd5b506103fa6103f53660046143ee565b610c00565b005b34801561040857600080fd5b506103fa61041736600461430d565b610cb6565b34801561042857600080fd5b5061031c6104373660046143d5565b600090815261012f602052604090206001015490565b34801561045957600080fd5b5061046d610468366004614409565b610d7e565b604080516001600160a01b039093168352602083019190915201610326565b34801561049857600080fd5b506103fa6104a7366004614574565b610dbb565b3480156104b857600080fd5b506103fa6104c736600461461d565b610ea8565b3480156104d857600080fd5b506103fa6104e7366004614657565b610ed3565b3480156104f857600080fd5b506103fa61050736600461461d565b610f47565b34801561051857600080fd5b5061031c6101c95481565b34801561052f57600080fd5b5061054361053e3660046143d5565b610fd5565b604080516001600160a01b03909316835261ffff909116602083015201610326565b34801561057157600080fd5b506105856105803660046146e1565b611045565b604051610326919061477f565b34801561059e57600080fd5b506101935461034f9060ff1681565b3480156105b957600080fd5b5061034f6105c83660046143ee565b6001600160a01b031660009081526099602052604090205460ff1690565b3480156105f257600080fd5b506103fa61060136600461430d565b61116e565b34801561061257600080fd5b506103fa610621366004614792565b611234565b34801561063257600080fd5b506103fa6106413660046143ee565b611289565b34801561065257600080fd5b506103a26112e0565b34801561066757600080fd5b506103a2610676366004614409565b611318565b34801561068757600080fd5b5061034f61069636600461461d565b611338565b3480156106a757600080fd5b506103fa6106b6366004614846565b611364565b3480156106c757600080fd5b50610374611382565b6103fa6106de366004614887565b611390565b3480156106ef57600080fd5b506103fa6106fe3660046148f8565b611583565b34801561070f57600080fd5b5060405160018152602001610326565b34801561072b57600080fd5b5061031c600081565b34801561074057600080fd5b506103fa61074f36600461492d565b61165c565b34801561076057600080fd5b5061077461076f366004614964565b61172d565b60405161032691906149d8565b34801561078d57600080fd5b506103fa61079c366004614a3a565b611821565b3480156107ad57600080fd5b506107c16107bc366004614887565b6118d0565b6040805192151583526001600160a01b03909116602083015201610326565b3480156107ec57600080fd5b506101cc546101cd546001600160a01b03909116906001600160801b0316610543565b34801561081b57600080fd5b5061031c61082a3660046143d5565b6101d16020526000908152604090205481565b34801561084957600080fd5b5061031c6108583660046143d5565b611939565b34801561086957600080fd5b506b546f6b656e4552433131353560a01b61031c565b34801561088b57600080fd5b506101cb546101cd546001600160a01b0390911690600160801b90046001600160801b0316610543565b3480156108c157600080fd5b506103fa6108d036600461461d565b611951565b3480156108e157600080fd5b506103fa6108f0366004614ab2565b611977565b34801561090157600080fd5b50610374611c95565b34801561091657600080fd5b5061034f610925366004614bc4565b6001600160a01b0391821660009081526101956020908152604080832093909416825291909152205460ff1690565b34801561096057600080fd5b506103a261096f3660046143d5565b6101d2602052600090815260409020546001600160a01b031681565b34801561099757600080fd5b506101cb546103a2906001600160a01b031681565b3480156109b857600080fd5b506103fa6109c7366004614bee565b611ca3565b3480156109d857600080fd5b506103fa6109e7366004614c52565b611d83565b60006001600160a01b038316610a5c5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152610194602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610a9382611de7565b80610aae57506001600160e01b03198216636cdb3d1360e11b145b80610a8257506001600160e01b0319821663152a902d60e11b1492915050565b6101c68054610adc90614c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0890614c85565b8015610b555780601f10610b2a57610100808354040283529160200191610b55565b820191906000526020600020905b815481529060010190602001808311610b3857829003601f168201915b505050505081565b60008181526101d060205260409020805460609190610b7b90614c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba790614c85565b8015610bf45780601f10610bc957610100808354040283529160200191610bf4565b820191906000526020600020905b815481529060010190602001808311610bd757829003601f168201915b50505050509050919050565b6000610c0b81611e27565b610c16600083611338565b610c625760405162461bcd60e51b815260206004820152601b60248201527f6e6577206f776e6572206e6f74206d6f64756c652061646d696e2e00000000006044820152606401610a53565b6101c880546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b6000610cc181611e27565b612710821115610d055760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610a53565b6101cd80546001600160801b03166001600160401b038416600160801b021790556101cb80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b600080600080610d8d86610fd5565b90945084925061ffff169050612710610da68287614cd6565b610db09190614cf5565b925050509250929050565b61019354859060ff1615610e93576daaeb6d7670e522a718067333cd4e3b15610e93576001600160a01b038116331415610e0157610dfc8686868686611e38565b610ea0565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e749190614d17565b610e9357604051633b79c77360e21b8152336004820152602401610a53565b610ea08686868686611e38565b505050505050565b600082815261012f6020526040902060010154610ec481611e27565b610ece8383611e96565b505050565b610edb611eb9565b610f3b5760405162461bcd60e51b815260206004820152602b60248201527f4e6f7420617574686f72697a656420746f20736574206f70657261746f72207260448201526a32b9ba3934b1ba34b7b71760a91b6064820152608401610a53565b610f4481611ec7565b50565b610f4f611f0f565b6001600160a01b0316816001600160a01b031614610fc75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a53565b610fd18282611f19565b5050565b60008181526101d360209081526040808320815180830190925280546001600160a01b03168083526001909101549282019290925282911561101d578051602082015161103b565b6101cc546101cd546001600160a01b03909116906001600160801b03165b9250925050915091565b606081518351146110aa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610a53565b600083516001600160401b038111156110c5576110c561442b565b6040519080825280602002602001820160405280156110ee578160200160208202803683370190505b50905060005b84518110156111665761113985828151811061111257611112614d34565b602002602001015185838151811061112c5761112c614d34565b60200260200101516109ec565b82828151811061114b5761114b614d34565b602090810291909101015261115f81614d4a565b90506110f4565b509392505050565b600061117981611e27565b6127108211156111c05760405162461bcd60e51b815260206004820152601260248201527165786365656420726f79616c74792062707360701b6044820152606401610a53565b6101cc80546001600160a01b0319166001600160a01b0385169081179091556101cd80546fffffffffffffffffffffffffffffffff19166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610d71565b61123c611f0f565b6001600160a01b0316836001600160a01b03161480611262575061126283610925611f0f565b61127e5760405162461bcd60e51b8152600401610a5390614d65565b610ece838383611f3c565b600061129481611e27565b6101ca80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b6101c8546000906112fb9082906001600160a01b0316611338565b6113055750600090565b6101c8546001600160a01b03165b905090565b60008281526101616020526040812061133190836120e4565b9392505050565b600091825261012f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061136f81611e27565b61137c6101ce84846141e4565b50505050565b6101c78054610adc90614c85565b600260355414156113e35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a53565b600260355560006113f58484846120f0565b9050600061140660208601866143ee565b905060006000198660800135141561143957506101c9805490600190600061142e8385614daf565b909155506114839050565b6101c95486608001351061147c5760405162461bcd60e51b815260206004820152600a6024820152691a5b9d985b1a59081a5960b21b6044820152606401610a53565b5060808501355b600061149560408801602089016143ee565b6001600160a01b0316146115055760405180604001604052808760200160208101906114c191906143ee565b6001600160a01b03908116825260408981013560209384015260008581526101d3845220835181546001600160a01b03191692169190911781559101516001909101555b6115218261151660a0890189614dc7565b848a60c00135612291565b61152a86612382565b80826001600160a01b0316846001600160a01b03167f0b35afaf155daeef41cc46df86f058df2855c57d30ab134647a6b587e7cc8c398960405161156e9190614e7b565b60405180910390a45050600160355550505050565b600061158e81611e27565b6127108211156115d55760405162461bcd60e51b815260206004820152601260248201527165786365656420726f79616c74792062707360701b6044820152606401610a53565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101d38352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b61019354829060ff1615611723576daaeb6d7670e522a718067333cd4e3b1561172357604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156116d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fb9190614d17565b61172357604051633b79c77360e21b81526001600160a01b0382166004820152602401610a53565b610ece8383612546565b6060816001600160401b038111156117475761174761442b565b60405190808252806020026020018201604052801561177a57816020015b60608152602001906001900390816117655790505b50905060005b8281101561181a576117ea3085858481811061179e5761179e614d34565b90506020028101906117b09190614dc7565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061255892505050565b8282815181106117fc576117fc614d34565b6020026020010181905250808061181290614d4a565b915050611780565b5092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661184b81611e27565b600060001986141561187857506101c9805490600190600061186d8385614daf565b909155506118ba9050565b6101c95486106118b75760405162461bcd60e51b815260206004820152600a6024820152691a5b9d985b1a59081a5960b21b6044820152606401610a53565b50845b6118c78786868487612291565b50505050505050565b60008060006118e086868661264c565b61016087013560009081526101cf602052604090205490915060ff1615801561192e575061192e7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682611338565b969095509350505050565b600081815261016160205260408120610a82906126b0565b600082815261012f602052604090206001015461196d81611e27565b610ece8383611f19565b600054610100900460ff16158080156119975750600054600160ff909116105b806119b15750303b1580156119b1575060005460ff166001145b611a145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a53565b6000805460ff191660011790558015611a37576000805461ff0019166101001790555b611a3f6126ba565b611a866040518060400160405280600c81526020016b546f6b656e4552433131353560a01b815250604051806040016040528060018152602001603160f81b8152506126eb565b611a8f8761271c565b611aa760405180602001604052806000815250612754565b611ab16001611ec7565b8951611ac5906101c69060208d0190614268565b508851611ada906101c79060208c0190614268565b506101cc80546001600160a01b03199081166001600160a01b03888116919091179092556101cd80546fffffffffffffffffffffffffffffffff19166001600160801b0388161790556101cb805482168584161790556101ca80549091169188169190911790558751611b55906101ce9060208b0190614268565b50612710836001600160801b03161115611ba35760405162461bcd60e51b815260206004820152600f60248201526e65786365656473204d41585f42505360881b6044820152606401610a53565b6101cd80546001600160801b03808616600160801b0291161790556101c880546001600160a01b038d166001600160a01b0319909116179055611be760008c612784565b611c117f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68c612784565b611c2960008051602061552d8339815191528c612784565b611c4260008051602061552d8339815191526000612784565b8015611c88576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101ce8054610adc90614c85565b61019354859060ff1615611d76576daaeb6d7670e522a718067333cd4e3b15611d76576001600160a01b038116331415611ce457610dfc868686868661278e565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015611d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d579190614d17565b611d7657604051633b79c77360e21b8152336004820152602401610a53565b610ea0868686868661278e565b611d8b611f0f565b6001600160a01b0316836001600160a01b03161480611db15750611db183610925611f0f565b611dcd5760405162461bcd60e51b8152600401610a5390614d65565b610ece8383836127e5565b6001600160a01b03163b151590565b60006001600160e01b03198216636cdb3d1360e11b1480611e1857506001600160e01b031982166303a24d0760e21b145b80610a825750610a828261290e565b610f4481611e33611f0f565b612933565b611e40611f0f565b6001600160a01b0316856001600160a01b03161480611e665750611e6685610925611f0f565b611e825760405162461bcd60e51b8152600401610a5390614faa565b611e8f8585858585612997565b5050505050565b611ea08282612b49565b600082815261016160205260409020610ece9082612bd1565b600061131381610696611f0f565b610193805460ff19168215159081179091556040519081527f38475885990d8dfe9ca01f0ef160a1b5514426eab9ddbc953a3353410ba780969060200160405180910390a150565b6000611313612be6565b611f238282612c13565b600082815261016160205260409020610ece9082612c99565b6001600160a01b038316611f625760405162461bcd60e51b8152600401610a5390614ff9565b8051825114611f835760405162461bcd60e51b8152600401610a539061503c565b6000611f8d611f0f565b9050611fad81856000868660405180602001604052806000815250612cae565b60005b8351811015612077576000848281518110611fcd57611fcd614d34565b602002602001015190506000848381518110611feb57611feb614d34565b6020908102919091018101516000848152610194835260408082206001600160a01b038c16835290935291909120549091508181101561203d5760405162461bcd60e51b8152600401610a5390615084565b6000928352610194602090815260408085206001600160a01b038b168652909152909220910390558061206f81614d4a565b915050611fb0565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516120c89291906150c8565b60405180910390a460408051602081019091526000905261137c565b60006113318383612e91565b60008060006121008686866118d0565b91509150816121455760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610a53565b42612158610140880161012089016150ed565b6001600160801b03161115801561218957504261217d610160880161014089016150ed565b6001600160801b031610155b6121c75760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610a53565b60006121d660208801886143ee565b6001600160a01b031614156122235760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610a53565b60008660c00135116122675760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610a53565b61016086013560009081526101cf60205260409020805460ff191660011790559150509392505050565b60008281526101d06020526040902080546122ab90614c85565b1515905061230957826122ed5760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610a53565b60008281526101d0602052604090206123079085856141e4565b505b61232485838360405180602001604052806000815250612ebb565b81856001600160a01b03167f04133ee4cb027e1c5fce5e3481289278a93bd16a65a3b65b428a6d239e706bfb6101d0600086815260200190815260200160002084604051612373929190615108565b60405180910390a35050505050565b60e081013561238e5750565b60006123a260c083013560e0840135614cd6565b6101cd54909150600090612710906123ca90600160801b90046001600160801b031684614cd6565b6123d49190614cf5565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6123fd610120850161010086016143ee565b6001600160a01b031614156124605781341461245b5760405162461bcd60e51b815260206004820152601660248201527f6d7573742073656e6420746f74616c2070726963652e000000000000000000006044820152606401610a53565b6124a3565b34156124a35760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610a53565b6000806124b660808601606087016143ee565b6001600160a01b0316146124d9576124d460808501606086016143ee565b6124e7565b6101ca546001600160a01b03165b90506125196124fe610120860161010087016143ee565b612506611f0f565b6101cb546001600160a01b031685612fe3565b61137c61252e610120860161010087016143ee565b612536611f0f565b8361254186886151b8565b612fe3565b610fd1612551611f0f565b838361302d565b60606001600160a01b0383163b6125c05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a53565b600080846001600160a01b0316846040516125db91906151cf565b600060405180830381855af49150503d8060008114612616576040519150601f19603f3d011682016040523d82523d6000602084013e61261b565b606091505b5091509150612643828260405180606001604052806027815260200161554d6027913961310f565b95945050505050565b60006126a883838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126a292506126969150889050613148565b8051906020012061329e565b906132ec565b949350505050565b6000610a82825490565b600054610100900460ff166126e15760405162461bcd60e51b8152600401610a53906151eb565b6126e9613308565b565b600054610100900460ff166127125760405162461bcd60e51b8152600401610a53906151eb565b610fd18282613336565b600054610100900460ff166127435760405162461bcd60e51b8152600401610a53906151eb565b61274b613377565b610f448161339e565b600054610100900460ff1661277b5760405162461bcd60e51b8152600401610a53906151eb565b610f448161342d565b610fd18282611e96565b612796611f0f565b6001600160a01b0316856001600160a01b031614806127bc57506127bc85610925611f0f565b6127d85760405162461bcd60e51b8152600401610a5390614faa565b611e8f858585858561345d565b6001600160a01b03831661280b5760405162461bcd60e51b8152600401610a5390614ff9565b6000612815611f0f565b90506000612822846135a6565b9050600061282f846135a6565b905061284f83876000858560405180602001604052806000815250612cae565b6000858152610194602090815260408083206001600160a01b038a168452909152902054848110156128935760405162461bcd60e51b8152600401610a5390615084565b6000868152610194602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526118c7565b60006001600160e01b03198216635a05180f60e01b1480610a825750610a82826135f1565b61293d8282611338565b610fd157612955816001600160a01b03166014613626565b612960836020613626565b604051602001612971929190615236565b60408051601f198184030181529082905262461bcd60e51b8252610a53916004016143c2565b81518351146129b85760405162461bcd60e51b8152600401610a539061503c565b6001600160a01b0384166129de5760405162461bcd60e51b8152600401610a53906152ab565b60006129e8611f0f565b90506129f8818787878787612cae565b60005b8451811015612ae3576000858281518110612a1857612a18614d34565b602002602001015190506000858381518110612a3657612a36614d34565b6020908102919091018101516000848152610194835260408082206001600160a01b038e168352909352919091205490915081811015612a885760405162461bcd60e51b8152600401610a53906152f0565b6000838152610194602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612ac8908490614daf565b9250508190555050505080612adc90614d4a565b90506129fb565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612b339291906150c8565b60405180910390a4610ea08187878787876137c1565b612b538282611338565b610fd157600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b8d611f0f565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611331836001600160a01b038416613926565b3360009081526099602052604081205460ff1615612c0b575060131936013560601c90565b503390565b90565b612c1d8282611338565b15610fd157600082815261012f602090815260408083206001600160a01b03851684529091529020805460ff19169055612c55611f0f565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000611331836001600160a01b038416613975565b612cc760008051602061552d8339815191526000611338565b158015612cdc57506001600160a01b03851615155b8015612cf057506001600160a01b03841615155b15612d8357612d0d60008051602061552d83398151915286611338565b80612d2b5750612d2b60008051602061552d83398151915285611338565b612d835760405162461bcd60e51b8152602060048201526024808201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526332b9399760e11b6064820152608401610a53565b6001600160a01b038516612e0b5760005b8351811015612e0957828181518110612daf57612daf614d34565b60200260200101516101d16000868481518110612dce57612dce614d34565b602002602001015181526020019081526020016000206000828254612df39190614daf565b90915550612e02905081614d4a565b9050612d94565b505b6001600160a01b038416610ea05760005b83518110156118c757828181518110612e3757612e37614d34565b60200260200101516101d16000868481518110612e5657612e56614d34565b602002602001015181526020019081526020016000206000828254612e7b91906151b8565b90915550612e8a905081614d4a565b9050612e1c565b6000826000018281548110612ea857612ea8614d34565b9060005260206000200154905092915050565b6001600160a01b038416612f1b5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a53565b6000612f25611f0f565b90506000612f32856135a6565b90506000612f3f856135a6565b9050612f5083600089858589612cae565b6000868152610194602090815260408083206001600160a01b038b16845290915281208054879290612f83908490614daf565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118c783600089898989613a68565b80612fed5761137c565b6001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156130215761301c8282613b23565b61137c565b61137c84848484613bc6565b816001600160a01b0316836001600160a01b031614156130a15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610a53565b6001600160a01b0383811660008181526101956020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060831561311e575081611331565b82511561312e5782518084602001fd5b8160405162461bcd60e51b8152600401610a5391906143c2565b60607fc7a95ef88f83fa833ccfce325157b7111633b181b6a27181b86415d8d501134d61317860208401846143ee565b61318860408501602086016143ee565b604085013561319d60808701606088016143ee565b60808701356131af60a0890189614dc7565b6040516131bd92919061533a565b60405190819003902060c089013560e08a01356131e26101208c016101008d016143ee565b6131f46101408d016101208e016150ed565b6132066101608e016101408f016150ed565b60408051602081019d909d526001600160a01b039b8c16908d0152988a1660608c015260808b019790975294881660a08a015260c089019390935260e08801919091526101008701526101208601529092166101408401526001600160801b039182166101608085019190915291166101808301528301356101a08201526101c0016040516020818303038152906040529050919050565b6000610a826132ab613c1f565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006132fb8585613c9a565b9150915061116681613ce0565b600054610100900460ff1661332f5760405162461bcd60e51b8152600401610a53906151eb565b6001603555565b600054610100900460ff1661335d5760405162461bcd60e51b8152600401610a53906151eb565b815160209283012081519190920120600191909155600255565b600054610100900460ff166126e95760405162461bcd60e51b8152600401610a53906151eb565b600054610100900460ff166133c55760405162461bcd60e51b8152600401610a53906151eb565b60005b8151811015610fd1576001609960008484815181106133e9576133e9614d34565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061342581614d4a565b9150506133c8565b600054610100900460ff166134545760405162461bcd60e51b8152600401610a53906151eb565b610f4481613e9b565b6001600160a01b0384166134835760405162461bcd60e51b8152600401610a53906152ab565b600061348d611f0f565b9050600061349a856135a6565b905060006134a7856135a6565b90506134b7838989858589612cae565b6000868152610194602090815260408083206001600160a01b038c168452909152902054858110156134fb5760405162461bcd60e51b8152600401610a53906152f0565b6000878152610194602090815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061353b908490614daf565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461359b848a8a8a8a8a613a68565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106135e0576135e0614d34565b602090810291909101015292915050565b60006001600160e01b03198216637965db0b60e01b1480610a8257506301ffc9a760e01b6001600160e01b0319831614610a82565b60606000613635836002614cd6565b613640906002614daf565b6001600160401b038111156136575761365761442b565b6040519080825280601f01601f191660200182016040528015613681576020820181803683370190505b509050600360fc1b8160008151811061369c5761369c614d34565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106136cb576136cb614d34565b60200101906001600160f81b031916908160001a90535060006136ef846002614cd6565b6136fa906001614daf565b90505b6001811115613772576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061372e5761372e614d34565b1a60f81b82828151811061374457613744614d34565b60200101906001600160f81b031916908160001a90535060049490941c9361376b8161534a565b90506136fd565b5083156113315760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a53565b6001600160a01b0384163b15610ea05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906138059089908990889088908890600401615361565b6020604051808303816000875af1925050508015613840575060408051601f3d908101601f1916820190925261383d918101906153bf565b60015b6138f65761384c6153dc565b806308c379a0141561388657506138616153f7565b8061386c5750613888565b8060405162461bcd60e51b8152600401610a5391906143c2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610a53565b6001600160e01b0319811663bc197c8160e01b146118c75760405162461bcd60e51b8152600401610a5390615480565b600081815260018301602052604081205461396d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a82565b506000610a82565b60008181526001830160205260408120548015613a5e5760006139996001836151b8565b85549091506000906139ad906001906151b8565b9050818114613a125760008660000182815481106139cd576139cd614d34565b90600052602060002001549050808760000184815481106139f0576139f0614d34565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613a2357613a236154c8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a82565b6000915050610a82565b6001600160a01b0384163b15610ea05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613aac90899089908890889088906004016154de565b6020604051808303816000875af1925050508015613ae7575060408051601f3d908101601f19168201909252613ae4918101906153bf565b60015b613af35761384c6153dc565b6001600160e01b0319811663f23a6e6160e01b146118c75760405162461bcd60e51b8152600401610a5390615480565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613b70576040519150601f19603f3d011682016040523d82523d6000602084013e613b75565b606091505b5050905080610ece5760405162461bcd60e51b815260206004820152601c60248201527f6e617469766520746f6b656e207472616e73666572206661696c6564000000006044820152606401610a53565b816001600160a01b0316836001600160a01b03161415613be55761137c565b6001600160a01b038316301415613c0a5761301c6001600160a01b0385168383613eaf565b61137c6001600160a01b038516848484613f12565b60006113137f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613c4e60015490565b6002546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b600080825160411415613cd15760208301516040840151606085015160001a613cc587828585613f4a565b94509450505050613cd9565b506000905060025b9250929050565b6000816004811115613cf457613cf4615516565b1415613cfd5750565b6001816004811115613d1157613d11615516565b1415613d5f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a53565b6002816004811115613d7357613d73615516565b1415613dc15760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a53565b6003816004811115613dd557613dd5615516565b1415613e2e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a53565b6004816004811115613e4257613e42615516565b1415610f445760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a53565b8051610fd190610196906020840190614268565b6040516001600160a01b038316602482015260448101829052610ece90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614037565b6040516001600160a01b038085166024830152831660448201526064810182905261137c9085906323b872dd60e01b90608401613edb565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613f81575060009050600361402e565b8460ff16601b14158015613f9957508460ff16601c14155b15613faa575060009050600461402e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613ffe573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166140275760006001925092505061402e565b9150600090505b94509492505050565b600061408c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166141099092919063ffffffff16565b805190915015610ece57808060200190518101906140aa9190614d17565b610ece5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a53565b60606126a88484600085856001600160a01b0385163b61416b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a53565b600080866001600160a01b0316858760405161418791906151cf565b60006040518083038185875af1925050503d80600081146141c4576040519150601f19603f3d011682016040523d82523d6000602084013e6141c9565b606091505b50915091506141d982828661310f565b979650505050505050565b8280546141f090614c85565b90600052602060002090601f0160209004810192826142125760008555614258565b82601f1061422b5782800160ff19823516178555614258565b82800160010185558215614258579182015b8281111561425857823582559160200191906001019061423d565b506142649291506142dc565b5090565b82805461427490614c85565b90600052602060002090601f0160209004810192826142965760008555614258565b82601f106142af57805160ff1916838001178555614258565b82800160010185558215614258579182015b828111156142585782518255916020019190600101906142c1565b5b8082111561426457600081556001016142dd565b80356001600160a01b038116811461430857600080fd5b919050565b6000806040838503121561432057600080fd5b614329836142f1565b946020939093013593505050565b6001600160e01b031981168114610f4457600080fd5b60006020828403121561435f57600080fd5b813561133181614337565b60005b8381101561438557818101518382015260200161436d565b8381111561137c5750506000910152565b600081518084526143ae81602086016020860161436a565b601f01601f19169290920160200192915050565b6020815260006113316020830184614396565b6000602082840312156143e757600080fd5b5035919050565b60006020828403121561440057600080fd5b611331826142f1565b6000806040838503121561441c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156144665761446661442b565b6040525050565b60006001600160401b038211156144865761448661442b565b5060051b60200190565b600082601f8301126144a157600080fd5b813560206144ae8261446d565b6040516144bb8282614441565b83815260059390931b85018201928281019150868411156144db57600080fd5b8286015b848110156144f657803583529183019183016144df565b509695505050505050565b600082601f83011261451257600080fd5b81356001600160401b0381111561452b5761452b61442b565b604051614542601f8301601f191660200182614441565b81815284602083860101111561455757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561458c57600080fd5b614595866142f1565b94506145a3602087016142f1565b935060408601356001600160401b03808211156145bf57600080fd5b6145cb89838a01614490565b945060608801359150808211156145e157600080fd5b6145ed89838a01614490565b9350608088013591508082111561460357600080fd5b5061461088828901614501565b9150509295509295909350565b6000806040838503121561463057600080fd5b82359150614640602084016142f1565b90509250929050565b8015158114610f4457600080fd5b60006020828403121561466957600080fd5b813561133181614649565b600082601f83011261468557600080fd5b813560206146928261446d565b60405161469f8282614441565b83815260059390931b85018201928281019150868411156146bf57600080fd5b8286015b848110156144f6576146d4816142f1565b83529183019183016146c3565b600080604083850312156146f457600080fd5b82356001600160401b038082111561470b57600080fd5b61471786838701614674565b9350602085013591508082111561472d57600080fd5b5061473a85828601614490565b9150509250929050565b600081518084526020808501945080840160005b8381101561477457815187529582019590820190600101614758565b509495945050505050565b6020815260006113316020830184614744565b6000806000606084860312156147a757600080fd5b6147b0846142f1565b925060208401356001600160401b03808211156147cc57600080fd5b6147d887838801614490565b935060408601359150808211156147ee57600080fd5b506147fb86828701614490565b9150509250925092565b60008083601f84011261481757600080fd5b5081356001600160401b0381111561482e57600080fd5b602083019150836020828501011115613cd957600080fd5b6000806020838503121561485957600080fd5b82356001600160401b0381111561486f57600080fd5b61487b85828601614805565b90969095509350505050565b60008060006040848603121561489c57600080fd5b83356001600160401b03808211156148b357600080fd5b9085019061018082880312156148c857600080fd5b909350602085013590808211156148de57600080fd5b506148eb86828701614805565b9497909650939450505050565b60008060006060848603121561490d57600080fd5b8335925061491d602085016142f1565b9150604084013590509250925092565b6000806040838503121561494057600080fd5b614949836142f1565b9150602083013561495981614649565b809150509250929050565b6000806020838503121561497757600080fd5b82356001600160401b038082111561498e57600080fd5b818501915085601f8301126149a257600080fd5b8135818111156149b157600080fd5b8660208260051b85010111156149c657600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614a2d57603f19888603018452614a1b858351614396565b945092850192908501906001016149ff565b5092979650505050505050565b600080600080600060808688031215614a5257600080fd5b614a5b866142f1565b94506020860135935060408601356001600160401b03811115614a7d57600080fd5b614a8988828901614805565b96999598509660600135949350505050565b80356001600160801b038116811461430857600080fd5b6000806000806000806000806000806101408b8d031215614ad257600080fd5b614adb8b6142f1565b995060208b01356001600160401b0380821115614af757600080fd5b614b038e838f01614501565b9a5060408d0135915080821115614b1957600080fd5b614b258e838f01614501565b995060608d0135915080821115614b3b57600080fd5b614b478e838f01614501565b985060808d0135915080821115614b5d57600080fd5b50614b6a8d828e01614674565b965050614b7960a08c016142f1565b9450614b8760c08c016142f1565b9350614b9560e08c01614a9b565b9250614ba46101008c01614a9b565b9150614bb36101208c016142f1565b90509295989b9194979a5092959850565b60008060408385031215614bd757600080fd5b614be0836142f1565b9150614640602084016142f1565b600080600080600060a08688031215614c0657600080fd5b614c0f866142f1565b9450614c1d602087016142f1565b9350604086013592506060860135915060808601356001600160401b03811115614c4657600080fd5b61461088828901614501565b600080600060608486031215614c6757600080fd5b614c70846142f1565b95602085013595506040909401359392505050565b600181811c90821680614c9957607f821691505b60208210811415614cba57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615614cf057614cf0614cc0565b500290565b600082614d1257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614d2957600080fd5b815161133181614649565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614d5e57614d5e614cc0565b5060010190565b6020808252602a908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f726040820152691030b8383937bb32b21760b11b606082015260800190565b60008219821115614dc257614dc2614cc0565b500190565b6000808335601e19843603018112614dde57600080fd5b8301803591506001600160401b03821115614df857600080fd5b602001915036819003821315613cd957600080fd5b6000808335601e19843603018112614e2457600080fd5b83016020810192503590506001600160401b03811115614e4357600080fd5b803603831315613cd957600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152614e9c60208201614e8f846142f1565b6001600160a01b03169052565b6000614eaa602084016142f1565b6001600160a01b03811660408401525060408301356060830152614ed0606084016142f1565b6001600160a01b038116608084015250608083013560a0830152614ef760a0840184614e0d565b6101808060c0860152614f0f6101a086018385614e52565b925060c086013560e0860152610100915060e086013582860152614f348287016142f1565b9150610120614f4d818701846001600160a01b03169052565b614f58818801614a9b565b925050610140614f72818701846001600160801b03169052565b614f7d818801614a9b565b925050610160614f97818701846001600160801b03169052565b9590950135939094019290925250919050565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6040815260006150db6040830185614744565b82810360208401526126438185614744565b6000602082840312156150ff57600080fd5b61133182614a9b565b60408152600080845481600182811c91508083168061512857607f831692505b602080841082141561514857634e487b7160e01b86526022600452602486fd5b60408801849052606088018280156151675760018114615178576151a3565b60ff198716825282820197506151a3565b60008c81526020902060005b8781101561519d57815484820152908601908401615184565b83019850505b50509690960196909652509095945050505050565b6000828210156151ca576151ca614cc0565b500390565b600082516151e181846020870161436a565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161526e81601785016020880161436a565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161529f81602884016020880161436a565b01602801949350505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b8183823760009101908152919050565b60008161535957615359614cc0565b506000190190565b60006001600160a01b03808816835280871660208401525060a0604083015261538d60a0830186614744565b828103606084015261539f8186614744565b905082810360808401526153b38185614396565b98975050505050505050565b6000602082840312156153d157600080fd5b815161133181614337565b600060033d1115612c105760046000803e5060005160e01c90565b600060443d10156154055790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561543457505050505090565b828501915081518181111561544c5750505050505090565b843d87010160208285010111156154665750505050505090565b61547560208286010187614441565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526141d960a0830184614396565b634e487b7160e01b600052602160045260246000fdfe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220eed6be0f7877d1325ec6bd16e9f2a8a70683e2c80cdc3f8415c0b9934139b17c64736f6c634300080c0033