[ { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NotCompatibleWithSpotMints", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SequentialMintExceedsLimit", "type": "error" }, { "inputs": [], "name": "SequentialUpToTooSmall", "type": "error" }, { "inputs": [], "name": "SpotMintTokenIdTooSmall", "type": "error" }, { "inputs": [], "name": "TokenAlreadyExists", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "HeraldryFreeMint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "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": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_baseUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "belongingRealm", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "enableMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "getUserTokens", "outputs": [ { "internalType": "uint256[]", "name": "tokens", "type": "uint256[]" } ], "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": "uint256", "name": "", "type": "uint256" } ], "name": "heraldrySupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "heraldrySupplyGap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "realmId", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nftMaxAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "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": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_heraldrySupplyGap", "type": "uint256" } ], "name": "setHeraldrySupplyGap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_price", "type": "uint256" } ], "name": "setPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_nftMaxAmount", "type": "uint256" } ], "name": "setSuuply", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "usersHeraldryCollection", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawerAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
611770600c819055600d5566044364c5bb0000600f5561012060405260726080818152906200231d60a039601090620000399082620002ef565b5034801562000046575f80fd5b506040516200238f3803806200238f8339810160408190526200006991620003b7565b60408051808201825260138082527f484552414c4452593231424a5f5055424c494300000000000000000000000000602080840182905284518086019095529184529083015290826001600160a01b038116620000df57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000ea8162000150565b506003620000f98382620002ef565b506004620001088282620002ef565b50506001808055600a55506200011f5f826200019f565b50600e80546001600160a01b0319166001600160a01b03929092169190911790556011805460ff19169055620003e6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828152600b602090815260408083206001600160a01b038516845290915281205460ff1662000246575f838152600b602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620001fd3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000249565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200027857607f821691505b6020821081036200029757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002ea575f81815260208120601f850160051c81016020861015620002c55750805b601f850160051c820191505b81811015620002e657828155600101620002d1565b5050505b505050565b81516001600160401b038111156200030b576200030b6200024f565b62000323816200031c845462000263565b846200029d565b602080601f83116001811462000359575f8415620003415750858301515b5f19600386901b1c1916600185901b178555620002e6565b5f85815260208120601f198616915b82811015620003895788860151825594840194600190910190840162000368565b5085821015620003a757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620003c8575f80fd5b81516001600160a01b0381168114620003df575f80fd5b9392505050565b611f2980620003f45f395ff3fe608060405260043610610236575f3560e01c806391b7f5ed11610129578063b88d4fde116100a8578063d547741f1161006d578063d547741f14610662578063df708a3714610681578063e985e9c5146106a0578063f2fde38b146106e7578063f832b08414610706575f80fd5b8063b88d4fde146105d9578063bd6ff975146105ec578063c68b33051461060b578063c87b56dd1461062a578063d123973014610649575f80fd5b8063a0bcfc7f116100ee578063a0bcfc7f14610527578063a217fddf14610546578063a22cb46514610559578063a238435214610578578063b2f7a094146105ae575f80fd5b806391b7f5ed146104ad57806391d14854146104cc57806395d89b41146104eb578063a035b1fe146104ff578063a0712d6814610514575f80fd5b80633ccfd60b116101b55780636352211e1161017a5780636352211e1461042a57806370a0823114610449578063715018a6146104685780637cc8bfb41461047c5780638da5cb5b14610491575f80fd5b80633ccfd60b146103ae5780633e63eb2a146103c257806342842e0e146103d65780634fff6ae5146103e9578063519dc8d2146103fe575f80fd5b806318160ddd116101fb57806318160ddd1461031b57806323b872dd1461032f578063248a9ca3146103425780632f2ff15d1461037057806336568abe1461038f575f80fd5b806301ffc9a71461024157806306fdde0314610275578063081812fc14610296578063095ea7b3146102cd57806317142968146102e2575f80fd5b3661023d57005b5f80fd5b34801561024c575f80fd5b5061026061025b366004611952565b610725565b60405190151581526020015b60405180910390f35b348015610280575f80fd5b50610289610735565b60405161026c91906119c1565b3480156102a1575f80fd5b506102b56102b03660046119d3565b6107c5565b6040516001600160a01b03909116815260200161026c565b6102e06102db366004611a00565b6107fe565b005b3480156102ed575f80fd5b5061030d6102fc3660046119d3565b60136020525f908152604090205481565b60405190815260200161026c565b348015610326575f80fd5b5061030d61080e565b6102e061033d366004611a28565b61081b565b34801561034d575f80fd5b5061030d61035c3660046119d3565b5f908152600b602052604090206001015490565b34801561037b575f80fd5b506102e061038a366004611a61565b610976565b34801561039a575f80fd5b506102e06103a9366004611a61565b6109a0565b3480156103b9575f80fd5b506102e06109d8565b3480156103cd575f80fd5b50610289610a18565b6102e06103e4366004611a28565b610aa4565b3480156103f4575f80fd5b5061030d600c5481565b348015610409575f80fd5b5061041d610418366004611a8b565b610abe565b60405161026c9190611aa4565b348015610435575f80fd5b506102b56104443660046119d3565b610b88565b348015610454575f80fd5b5061030d610463366004611a8b565b610b92565b348015610473575f80fd5b506102e0610bd6565b348015610487575f80fd5b5061030d600d5481565b34801561049c575f80fd5b505f546001600160a01b03166102b5565b3480156104b8575f80fd5b506102e06104c73660046119d3565b610be9565b3480156104d7575f80fd5b506102606104e6366004611a61565b610bf9565b3480156104f6575f80fd5b50610289610c23565b34801561050a575f80fd5b5061030d600f5481565b6102e06105223660046119d3565b610c32565b348015610532575f80fd5b506102e0610541366004611b6e565b610f26565b348015610551575f80fd5b5061030d5f81565b348015610564575f80fd5b506102e0610573366004611bc2565b610f3c565b348015610583575f80fd5b5061030d610592366004611a00565b601460209081525f928352604080842090915290825290205481565b3480156105b9575f80fd5b5061030d6105c83660046119d3565b60126020525f908152604090205481565b6102e06105e7366004611bea565b610fa7565b3480156105f7575f80fd5b506102e06106063660046119d3565b610fe2565b348015610616575f80fd5b506102e0610625366004611c61565b610ff2565b348015610635575f80fd5b506102896106443660046119d3565b611010565b348015610654575f80fd5b506011546102609060ff1681565b34801561066d575f80fd5b506102e061067c366004611a61565b6110c5565b34801561068c575f80fd5b50600e546102b5906001600160a01b031681565b3480156106ab575f80fd5b506102606106ba366004611c7a565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205460ff1690565b3480156106f2575f80fd5b506102e0610701366004611a8b565b6110e9565b348015610711575f80fd5b506102e06107203660046119d3565b611123565b5f61072f8261119e565b92915050565b60606003805461074490611ca2565b80601f016020809104026020016040519081016040528092919081815260200182805461077090611ca2565b80156107bb5780601f10610792576101008083540402835291602001916107bb565b820191905f5260205f20905b81548152906001019060200180831161079e57829003601f168201915b5050505050905090565b5f6107cf826111d2565b6107e3576107e36333d1c03960e21b61121d565b505f908152600760205260409020546001600160a01b031690565b61080a82826001611225565b5050565b600254600154035f190190565b5f610825826112c6565b6001600160a01b03948516949091508116841461084b5761084b62a1148160e81b61121d565b5f8281526007602052604090208054338082146001600160a01b0388169091141761088e5761087a86336106ba565b61088e5761088e632ce44b5f60e11b61121d565b8015610898575f82555b6001600160a01b038681165f9081526006602052604080822080545f19019055918716808252919020805460010190554260a01b17600160e11b175f85815260056020526040812091909155600160e11b8416900361092557600184015f818152600560205260408120549003610923576001548114610923575f8181526005602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4805f0361096d5761096d633a954ecd60e21b61121d565b50505050505050565b5f828152600b602052604090206001015461099081611360565b61099a838361136a565b50505050565b6001600160a01b03811633146109c95760405163334bd91960e11b815260040160405180910390fd5b6109d382826113fb565b505050565b5f6109e281611360565b600e546040516001600160a01b03909116904780156108fc02915f818181858888f1935050505015801561080a573d5f803e3d5ffd5b60108054610a2590611ca2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5190611ca2565b8015610a9c5780601f10610a7357610100808354040283529160200191610a9c565b820191905f5260205f20905b815481529060010190602001808311610a7f57829003601f168201915b505050505081565b6109d383838360405180602001604052805f815250610fa7565b60605f610aca83610b92565b90505f8167ffffffffffffffff811115610ae657610ae6611ae7565b604051908082528060200260200182016040528015610b0f578160200160208202803683370190505b50905060015b610b1d61080e565b8111610b8057846001600160a01b0316610b3682610b88565b6001600160a01b031603610b6e578082610b51600183611cee565b81518110610b6157610b61611d01565b6020026020010181815250505b610b79600182611d15565b9050610b15565b509392505050565b5f61072f826112c6565b5f6001600160a01b038216610bb157610bb16323d3ad8160e21b61121d565b506001600160a01b03165f9081526006602052604090205467ffffffffffffffff1690565b610bde611466565b610be75f611492565b565b5f610bf381611360565b50600f55565b5f918252600b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606004805461074490611ca2565b610c3a6114e1565b60018110158015610c4c575060048111155b610c9d5760405162461bcd60e51b815260206004820181905260248201527f5265616c6d204944206d757374206265206265747765656e203120616e64203460448201526064015b60405180910390fd5b60115460ff16610ce55760405162461bcd60e51b8152602060048201526013602482015272135a5b9d081a5cc81b9bdd08195b98589b1959606a1b6044820152606401610c94565b600f54341015610d375760405162461bcd60e51b815260206004820152601960248201527f45746865722073656e74206973206e6f7420636f7272656374000000000000006044820152606401610c94565b600c54610d4261080e565b10610d9b5760405162461bcd60e51b8152602060048201526024808201527f4e66747320666f72207468697320706861736520617265206f7574206f662073604482015263746f636b60e01b6064820152608401610c94565b335f90815260146020908152604080832084845290915290205415610e115760405162461bcd60e51b815260206004820152602660248201527f557365722072656163686564206d617820616d6f756e7420666f722074686973604482015265207265616c6d60d01b6064820152608401610c94565b610e1a8161150b565b610e665760405162461bcd60e51b815260206004820152601b60248201527f486572616c64727920737570706c7920676170206e6f74206d657400000000006044820152606401610c94565b610e71336001611579565b7f4d716488b70a15b44134b43cf703df673ebe71d21c3bc172a515230e1795199433610e9b61080e565b604080516001600160a01b03909316835260208301919091520160405180910390a18060125f610ec961080e565b815260208082019290925260409081015f90812093909355338352601482528083208484528252808320600190819055601390925290912054610f0b91611d15565b5f82815260136020526040902055610f236001600a55565b50565b5f610f3081611360565b60106109d38382611d75565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fb284848461081b565b6001600160a01b0383163b1561099a57610fce84848484611592565b61099a5761099a6368d2bf6b60e11b61121d565b5f610fec81611360565b50600d55565b5f610ffc81611360565b506011805460ff1916911515919091179055565b606061101b826111d2565b61107f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c94565b611087611671565b5f8381526012602052604090205461109e90611680565b6040516020016110af929190611e31565b6040516020818303038152906040529050919050565b5f828152600b60205260409020600101546110df81611360565b61099a83836113fb565b6110f1611466565b6001600160a01b03811661111a57604051631e4fbdf760e01b81525f6004820152602401610c94565b610f2381611492565b5f61112d81611360565b8161113661080e565b11156111985760405162461bcd60e51b815260206004820152602b60248201527f4e6577206d617820737570706c79206d7573742062652067726561746572207460448201526a1a185b8818dd5c9c9958dd60aa1b6064820152608401610c94565b50600c55565b5f6001600160e01b03198216637965db0b60e01b148061072f57506301ffc9a760e01b6001600160e01b031983161461072f565b5f8160011161121857600154821015611218575f5b505f828152600560205260408120549081900361120e5761120783611e6f565b92506111e7565b600160e01b161590505b919050565b805f5260045ffd5b5f61122f83610b88565b90508180156112475750336001600160a01b03821614155b1561126a5761125681336106ba565b61126a5761126a6367d9dca160e11b61121d565b5f8381526007602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b5f8160011161135057505f81815260056020526040902054805f0361133e5760015482106112fe576112fe636f96cda160e11b61121d565b5b505f19015f8181526005602052604090205480156112ff57600160e01b81165f0361132957919050565b611339636f96cda160e11b61121d565b6112ff565b600160e01b81165f0361135057919050565b611218636f96cda160e11b61121d565b610f238133611710565b5f6113758383610bf9565b6113f4575f838152600b602090815260408083206001600160a01b03861684529091529020805460ff191660011790556113ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161072f565b505f61072f565b5f6114068383610bf9565b156113f4575f838152600b602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161072f565b5f546001600160a01b03163314610be75760405163118cdaa760e01b8152336004820152602401610c94565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600a540361150457604051633ee5aeb560e01b815260040160405180910390fd5b6002600a55565b5f81815260136020526040812054808360015b60048111611561575f8181526013602052604090205484111561154f575f8181526013602052604090205492509050805b8061155981611e84565b91505061151e565b50600d5461156f8385611cee565b1095945050505050565b61080a828260405180602001604052805f815250611749565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a02906115c6903390899088908890600401611e9c565b6020604051808303815f875af1925050508015611600575060408051601f3d908101601f191682019092526115fd91810190611ed8565b60015b611653573d80801561162d576040519150601f19603f3d011682016040523d82523d5f602084013e611632565b606091505b5080515f0361164b5761164b6368d2bf6b60e11b61121d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60606010805461074490611ca2565b60605f61168c836117ab565b60010190505f8167ffffffffffffffff8111156116ab576116ab611ae7565b6040519080825280601f01601f1916602001820160405280156116d5576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846116df57509392505050565b61171a8282610bf9565b61080a5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c94565b6117538383611882565b6001600160a01b0383163b156109d3576001548281035b61177c5f868380600101945086611592565b611790576117906368d2bf6b60e11b61121d565b81811061176a5781600154146117a4575f80fd5b5050505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106117e95772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611815576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061183357662386f26fc10000830492506010015b6305f5e100831061184b576305f5e100830492506008015b612710831061185f57612710830492506004015b60648310611871576064830492506002015b600a831061072f5760010192915050565b6001545f82900361189d5761189d63b562e8dd60e01b61121d565b5f8181526005602090815260408083206001600160a01b0387164260a01b6001881460e11b178117909155808452600690925282208054680100000000000000018602019055908190036118fa576118fa622e076360e81b61121d565b818301825b80835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a48181600101915081036118ff575060015550505050565b6001600160e01b031981168114610f23575f80fd5b5f60208284031215611962575f80fd5b813561196d8161193d565b9392505050565b5f5b8381101561198e578181015183820152602001611976565b50505f910152565b5f81518084526119ad816020860160208601611974565b601f01601f19169290920160200192915050565b602081525f61196d6020830184611996565b5f602082840312156119e3575f80fd5b5035919050565b80356001600160a01b0381168114611218575f80fd5b5f8060408385031215611a11575f80fd5b611a1a836119ea565b946020939093013593505050565b5f805f60608486031215611a3a575f80fd5b611a43846119ea565b9250611a51602085016119ea565b9150604084013590509250925092565b5f8060408385031215611a72575f80fd5b82359150611a82602084016119ea565b90509250929050565b5f60208284031215611a9b575f80fd5b61196d826119ea565b602080825282518282018190525f9190848201906040850190845b81811015611adb57835183529284019291840191600101611abf565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611b1557611b15611ae7565b604051601f8501601f19908116603f01168101908282118183101715611b3d57611b3d611ae7565b81604052809350858152868686011115611b55575f80fd5b858560208301375f602087830101525050509392505050565b5f60208284031215611b7e575f80fd5b813567ffffffffffffffff811115611b94575f80fd5b8201601f81018413611ba4575f80fd5b61166984823560208401611afb565b80358015158114611218575f80fd5b5f8060408385031215611bd3575f80fd5b611bdc836119ea565b9150611a8260208401611bb3565b5f805f8060808587031215611bfd575f80fd5b611c06856119ea565b9350611c14602086016119ea565b925060408501359150606085013567ffffffffffffffff811115611c36575f80fd5b8501601f81018713611c46575f80fd5b611c5587823560208401611afb565b91505092959194509250565b5f60208284031215611c71575f80fd5b61196d82611bb3565b5f8060408385031215611c8b575f80fd5b611c94836119ea565b9150611a82602084016119ea565b600181811c90821680611cb657607f821691505b602082108103611cd457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072f5761072f611cda565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561072f5761072f611cda565b601f8211156109d3575f81815260208120601f850160051c81016020861015611d4e5750805b601f850160051c820191505b81811015611d6d57828155600101611d5a565b505050505050565b815167ffffffffffffffff811115611d8f57611d8f611ae7565b611da381611d9d8454611ca2565b84611d28565b602080601f831160018114611dd6575f8415611dbf5750858301515b5f19600386901b1c1916600185901b178555611d6d565b5f85815260208120601f198616915b82811015611e0457888601518255948401946001909101908401611de5565b5085821015611e2157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f8351611e42818460208801611974565b835190830190611e56818360208801611974565b64173539b7b760d91b9101908152600501949350505050565b5f81611e7d57611e7d611cda565b505f190190565b5f60018201611e9557611e95611cda565b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611ece90830184611996565b9695505050505050565b5f60208284031215611ee8575f80fd5b815161196d8161193d56fea26469706673582212207b945d694b6433a3632d5a08416946feda62f6b0cea562f0f98f966b9c55455f64736f6c6343000814003368747470733a2f2f77686974652d61636365707465642d6d61726c696e2d3838352e6d7970696e6174612e636c6f75642f697066732f6261667962656965747a6735707a746d34336276706862726963356c6b32326f7636696163647269616871343633716f72636536736c3774726e692f000000000000000000000000c1ff4ac7ca4c6d959a453811534b7d3963d00b81