ERC-721
Overview
Max Total Supply
1,114 DooggiesSnack
Holders
201
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DooggiesSnackLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DooggiesSnack
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-11 */ // SPDX-License-Identifier: MIT // ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ // █ ██ █ █ █ █ █ █ █ // █ ▄ █ ▄ █ ▄ █ ▄▄▄▄█ ▄▄▄▄█ █ ▄▄▄█ ▄▄▄▄▄█ // █ █ █ █ █ █ █ █ █ █ █ ▄▄█ █ ▄▄█ █ █▄▄▄█ █▄▄▄▄▄ // █ █▄█ █ █▄█ █ █▄█ █ █ █ █ █ █ █ █ ▄▄▄█▄▄▄▄▄ █ // █ █ █ █ █▄▄█ █ █▄▄█ █ █ █▄▄▄ ▄▄▄▄▄█ █ // █▄▄▄▄▄▄██▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ // // ▄▄ ▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄ ▄ ▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ // █ █▄█ █ █ ██ █ █ █ ▄ █ █ █ █ █ █ █ // █ █ ▄ █ ▄ █ ▄▄▄█ █ ██ ██ █ █▄ ▄█ █▄█ █ // █ █ █▄█ █ █ █ █ █▄▄▄ █ █ █ █ █ █ █ // █ █ █ █▄█ █ ▄▄▄█ █ █ █ █ █ █ ▄ █ // █ ██▄██ █ ▄ █ █ █▄▄▄ █ ▄ █ █ █ █ █ █ █ █ // █▄█ █▄█▄█ █▄▄█▄▄▄▄▄▄██▄▄▄▄▄▄▄█ █▄▄█ █▄▄█▄▄▄█ █▄▄▄█ █▄▄█ █▄▄█ // // ▄▄▄ ▄▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄▄ // █ █ █ █ █ █ █ █ // █ █ █ ▄ █ █▄█ █ ▄▄▄█ // █ █ █ █ █ █ █ █▄▄▄ // █ █▄▄▄█ █▄█ █ █ ▄▄▄█ // █ █ ██ ██ █▄▄▄ // █▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█ █▄▄▄█ █▄▄▄▄▄▄▄█ // pragma solidity 0.8.10; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; _status = _NOT_ENTERED; } } interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC1155Receiver is IERC165 { function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC1155 is IERC165 { event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); event ApprovalForAll(address indexed account, address indexed operator, bool approved); event URI(string value, uint256 indexed id); function balanceOf(address account, uint256 id) external view returns (uint256); function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); function setApprovalForAll(address operator, bool approved) external; function isApprovedForAll(address account, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } library Strings { function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; IERC1155 internal dooggies; bool internal _isMintedOut = false; string private _name; string private _symbol; mapping(uint256 => address) internal _owners; mapping(address => uint256) internal _balances; mapping(uint => uint) internal idStakeLockTimes; mapping(uint => bool) internal OGDooggiesMintedNewNew; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_, address dooggiesContract) { _name = name_; _symbol = symbol_; dooggies = IERC1155(dooggiesContract); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) external view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); if(_isMintedOut == false && idStakeLockTimes[tokenId] != 0 && OGDooggiesMintedNewNew[tokenId] == false) { return address(this); } return owner; } function name() external view virtual override returns (string memory) { return _name; } function symbol() external view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function _baseURI() internal view virtual returns (string memory) { return ""; } function approve(address to, uint256 tokenId) external virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) external virtual override { _setApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) external virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender || owner == address(this)); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { if(_isMintedOut == false) { require(idStakeLockTimes[tokenId] == 0 || OGDooggiesMintedNewNew[tokenId], "NFT Cant currently be sent cause its staked"); } require(ERC721.ownerOf(tokenId) == from || from == address(this), "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } } error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; } uint256 internal _currentIndex; string private _name; string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 1; } function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _startTokenId(); } } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) external view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } revert OwnerQueryForNonexistentToken(); } function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } function name() external view virtual override returns (string memory) { return _name; } function symbol() external view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function approve(address to, uint256 tokenId) external override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) external virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) external virtual override { _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } } function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); } function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } } contract DooggiesSnack is ERC721A, Ownable { address private devOwner; address private whoCanMint; bool internal _revealed = false; bool internal mintEnabled = true; string private baseURIForNewNew = "ipfs://QmUtKHbiThL5FikUuUgvLrH7HdNzQ9KmfUtDsE6o3hUKTp"; string private baseExt = ""; constructor(address owner_, address whoCanMint_) ERC721A("DooggiesSnack", "DooggiesSnack") { // not the real name ;) devOwner = owner_; whoCanMint = whoCanMint_; } receive() external payable { (bool sent, ) = payable(owner()).call{value: msg.value}(""); require(sent, "Failed to send Ether"); } function mint(uint256 numberOfTokens, address user) external { require(mintEnabled, "Cant mint yet"); require(whoCanMint == msg.sender, "You cant mint"); require( numberOfTokens + totalSupply() <= 5000, "Not enough supply" ); _safeMint(user, numberOfTokens); } function reveal(bool revealed, string calldata _baseURI) external { require(msg.sender == devOwner, "You are not the owner"); _revealed = revealed; baseURIForNewNew = _baseURI; } function setExtension(string calldata _baseExt) external { require(msg.sender == devOwner, "You are not the owner"); baseExt = _baseExt; } function updateOwner(address owner_) external { require(msg.sender == devOwner, "You are not the owner"); require(owner_ != address(0)); devOwner = owner_; } function toggleMint() external { require(msg.sender == devOwner, "You are not the owner"); mintEnabled = !mintEnabled; } function isMintEnabled() external view returns (bool) { return mintEnabled; } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { if (_revealed) { return string(abi.encodePacked(baseURIForNewNew, Strings.toString(tokenId), baseExt)); } else { return string(abi.encodePacked(baseURIForNewNew)); } } } contract WrapYourDooggies is ERC721, ReentrancyGuard, IERC721Receiver, IERC1155Receiver, Ownable { address private devOwner; bool private lockMintForever = false; uint private totalAmount = 0; uint constant private dayCount = 60 days; uint constant private mintOutLock = 365 days; uint private whenDidWeDeploy; string private baseURIForOGDooggies = "ipfs://QmSRPvb4E4oT8J73QoWGyvdFizWzpMkkSozAnCEMjT5K7G/"; string private baseExt = ""; DooggiesSnack dooggiesSnack; // Hmm you curious what this could be if youre a reader of the github??? constructor(address dooggiesContract) ERC721("Dooggies", "Dooggies", dooggiesContract) { devOwner = address(0xf8c45B2375a574BecA18224C47353969C044a9EC); dooggiesSnack = new DooggiesSnack(devOwner, address(this)); whenDidWeDeploy = block.timestamp; } receive() external payable { (bool sent, ) = payable(owner()).call{value: msg.value}(""); require(sent, "Failed to send Ether"); } function wrapMany(uint[] calldata tokenIds) nonReentrant external { require( dooggies.isApprovedForAll(msg.sender, address(this)), "You need approval" ); require(tokenIds.length > 0, "Must have something"); unchecked { uint count = tokenIds.length; uint[] memory qty = new uint[](count); for(uint i = 0; i < count; i++) { qty[i] = 1; } dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, ""); for(uint i = 0; i < count; i++) { require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that"); safeTransferFrom(address(this), msg.sender, tokenIds[i]); } } } function unwrapMany(uint[] calldata tokenIds) nonReentrant external { require(tokenIds.length > 0, "Must have something"); unchecked { uint count = tokenIds.length; uint[] memory qty = new uint[](count); for(uint i = 0; i < count; i++) { require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that"); safeTransferFrom(msg.sender, address(this), tokenIds[i]); } for(uint i = 0; i < count; i++) { qty[i] = 1; } dooggies.safeBatchTransferFrom(address(this), msg.sender, tokenIds, qty, ""); } } function wrapManyAndStake(uint[] calldata tokenIds) nonReentrant external { require( dooggies.isApprovedForAll(msg.sender, address(this)), "You need approval" ); require(tokenIds.length > 0, "Must have something"); require(_isMintedOut == false, "Already minted out"); unchecked { uint count = tokenIds.length; uint[] memory qty = new uint[](count); for(uint i = 0; i < count; i++) { qty[i] = 1; } dooggies.safeBatchTransferFrom(msg.sender, address(this), tokenIds, qty, ""); for(uint i = 0; i < count; i++) { require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked"); require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that"); require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once"); _owners[tokenIds[i]] = msg.sender; idStakeLockTimes[tokenIds[i]] = block.timestamp; // lol so it shows up on Opensea xD // since we want to funnel people here on first wrap :) // This will put it in the users wallet on opensea but not allow // them to sell since they dont own the asset emit Transfer(msg.sender, address(this), tokenIds[i]); } } } function stakeMany(uint[] calldata tokenIds) nonReentrant external { require(tokenIds.length > 0, "Must have something"); require(_isMintedOut == false, "Already minted out"); unchecked { uint count = tokenIds.length; for(uint i = 0; i < count; i++) { require(msg.sender == ownerOf(tokenIds[i]), "Bruh.. you dont own that"); safeTransferFrom(msg.sender, address(this), tokenIds[i]); } for(uint i = 0; i < count; i++) { require(idStakeLockTimes[tokenIds[i]] == 0, "This is already staked"); require(address(this) == ownerOf(tokenIds[i]), "Bruh.. we dont own that"); require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once"); _owners[tokenIds[i]] = msg.sender; idStakeLockTimes[tokenIds[i]] = block.timestamp; } } } function unStakeMany(uint[] calldata tokenIds) nonReentrant external { require(tokenIds.length > 0, "Must have something"); unchecked { uint count = tokenIds.length; for(uint i = 0; i < count; i++) { require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that"); require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only stake once"); require(idStakeLockTimes[tokenIds[i]] != 0, "Bruh.. this is not staked"); idStakeLockTimes[tokenIds[i]] = 0; safeTransferFrom(address(this), msg.sender, tokenIds[i]); } } } function zMintNewNew(uint[] calldata tokenIds) nonReentrant external { require(_isMintedOut == false, "Already minted out"); unchecked { uint count = tokenIds.length; require(count >= 2, "You need at least two dooggies to mint"); uint amountToMint = 0; uint8 localCounter = 0; for(uint i = 0; i < count; i++) { require(OGDooggiesMintedNewNew[tokenIds[i]] == false, "Bruh.. this NFT can only mint once."); require(msg.sender == _owners[tokenIds[i]], "Bruh.. you dont own that"); if(block.timestamp - idStakeLockTimes[tokenIds[i]] >= dayCount) { OGDooggiesMintedNewNew[tokenIds[i]] = true; localCounter += 1; if(localCounter >= 2) { localCounter = 0; amountToMint += 1; } safeTransferFrom(address(this), msg.sender, tokenIds[i]); } } require(amountToMint > 0, "Need to have some to mint"); dooggiesSnack.mint(amountToMint, msg.sender); } } function zzMintOutMystery(uint amount) external { require(msg.sender == devOwner, "You are not the owner"); // give people time to wrap for the mystery mint. // they will always be able to wrap but not be able to mint out require(block.timestamp - whenDidWeDeploy >= mintOutLock); dooggiesSnack.mint(amount, msg.sender); if(dooggiesSnack.totalSupply() > 4999) { _isMintedOut = true; } } function zzLockMint() external { require(msg.sender == devOwner, "You are not the owner"); require(lockMintForever == false, "Mint is already locked"); lockMintForever = true; } function zzinitialise(uint256[] calldata tokenIds) external { require(lockMintForever == false, "You can no longer mint"); require(msg.sender == devOwner, "You are not the owner"); uint count = tokenIds.length; require(count > 0, "Must have something"); _balances[address(this)] += count; emit Transfer(address(this), address(this), tokenIds[0]); unchecked { totalAmount += count; } // update the balances so that on wrapping the contract logic works for (uint256 i = 0; i < count; i++) { require(_owners[tokenIds[i]] == address(0), "You cant mint twice"); _owners[tokenIds[i]] = address(this); } } function updateOwner(address owner_) external { require(msg.sender == devOwner, "You are not the owner"); require(owner_ != address(0)); devOwner = owner_; } function setExtension(string calldata _baseExt) external { require(msg.sender == devOwner, "You are not the owner"); baseExt = _baseExt; } function onERC721Received(address, address, uint256, bytes calldata) pure external returns(bytes4) { return WrapYourDooggies.onERC721Received.selector; } function onERC1155Received( address, address, uint256, uint256, bytes calldata ) pure external returns (bytes4) { return WrapYourDooggies.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) pure external returns (bytes4) { return WrapYourDooggies.onERC1155BatchReceived.selector; } function tokenURI(uint256 tokenId) external view virtual override returns (string memory) { return string(abi.encodePacked(baseURIForOGDooggies, Strings.toString(tokenId), baseExt)); } function setURIOG(string calldata _baseURI) external { require(msg.sender == devOwner, "Step off brah"); baseURIForOGDooggies = _baseURI; } function totalSupply() external view returns (uint256) { return totalAmount; } function newnewAddress() external view returns (address) { return address(dooggiesSnack); } function timeLeftForID(uint tokenID) external view returns (uint) { if((block.timestamp - idStakeLockTimes[tokenID]) < dayCount) { return dayCount - (block.timestamp - idStakeLockTimes[tokenID]); } else { return 0; } } function hasIDBeenMinted(uint tokenID) external view returns (bool) { return OGDooggiesMintedNewNew[tokenID]; } function isStaked(uint tokenID) external view returns (bool) { return idStakeLockTimes[tokenID] != 0 && OGDooggiesMintedNewNew[tokenID] == false; } function isMintLocked() external view returns (bool) { return lockMintForever; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"whoCanMint_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"isMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"reveal","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseExt","type":"string"}],"name":"setExtension","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":[],"name":"toggleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6009805461ffff60a01b1916600160a81b17905560e0604052603560808181529062001ca760a03980516200003d91600a9160209091019062000184565b506040805160208101918290526000908190526200005e91600b9162000184565b503480156200006c57600080fd5b5060405162001cdc38038062001cdc8339810160408190526200008f9162000247565b604080518082018252600d8082526c446f6f6767696573536e61636b60981b602080840182815285518087019096529285528401528151919291620000d79160019162000184565b508051620000ed90600290602084019062000184565b5050600160005550620001003362000132565b600880546001600160a01b039384166001600160a01b03199182161790915560098054929093169116179055620002bc565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000192906200027f565b90600052602060002090601f016020900481019282620001b6576000855562000201565b82601f10620001d157805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000201578251825591602001919060010190620001e4565b506200020f92915062000213565b5090565b5b808211156200020f576000815560010162000214565b80516001600160a01b03811681146200024257600080fd5b919050565b600080604083850312156200025b57600080fd5b62000266836200022a565b915062000276602084016200022a565b90509250929050565b600181811c908216806200029457607f821691505b60208210811415620002b657634e487b7160e01b600052602260045260246000fd5b50919050565b6119db80620002cc6000396000f3fe6080604052600436106101395760003560e01c8063880cdc31116100ab578063a22cb4651161006f578063a22cb4651461041c578063b88d4fde1461043c578063c87b56dd1461045c578063d3dd5fe01461047c578063e985e9c514610491578063f2fde38b146104da57600080fd5b8063880cdc31146103895780638da5cb5b146103a957806394bf804d146103c757806395d89b41146103e7578063a101ff6d146103fc57600080fd5b806323b872dd116100fd57806323b872dd146102ca578063346de50a146102ea57806342842e0e146103095780636352211e1461032957806370a08231146103495780637e2285aa1461036957600080fd5b806301ffc9a7146101f657806306fdde031461022b578063081812fc1461024d578063095ea7b31461028557806318160ddd146102a757600080fd5b366101f15760006101526007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461019c576040519150601f19603f3d011682016040523d82523d6000602084013e6101a1565b606091505b50509050806101ee5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b34801561020257600080fd5b506102166102113660046113b4565b6104fa565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b5061024061054c565b6040516102229190611430565b34801561025957600080fd5b5061026d610268366004611443565b6105de565b6040516001600160a01b039091168152602001610222565b34801561029157600080fd5b506102a56102a0366004611473565b610622565b005b3480156102b357600080fd5b50600054600019015b604051908152602001610222565b3480156102d657600080fd5b506102a56102e536600461149d565b6106b0565b3480156102f657600080fd5b50600954600160a81b900460ff16610216565b34801561031557600080fd5b506102a561032436600461149d565b6106bb565b34801561033557600080fd5b5061026d610344366004611443565b6106d6565b34801561035557600080fd5b506102bc6103643660046114d9565b6106e8565b34801561037557600080fd5b506102a561038436600461153d565b610737565b34801561039557600080fd5b506102a56103a43660046114d9565b61076d565b3480156103b557600080fd5b506007546001600160a01b031661026d565b3480156103d357600080fd5b506102a56103e236600461157f565b6107cc565b3480156103f357600080fd5b506102406108c9565b34801561040857600080fd5b506102a56104173660046115bb565b6108d8565b34801561042857600080fd5b506102a561043736600461160e565b61092b565b34801561044857600080fd5b506102a561045736600461164e565b6109c1565b34801561046857600080fd5b50610240610477366004611443565b610a0c565b34801561048857600080fd5b506102a5610a6d565b34801561049d57600080fd5b506102166104ac36600461172a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156104e657600080fd5b506102a56104f53660046114d9565b610ab8565b60006001600160e01b031982166380ac58cd60e01b148061052b57506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461055b90611754565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611754565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b60006105e982610b31565b610606576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061062d826106d6565b9050806001600160a01b0316836001600160a01b031614156106625760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610682575061068081336104ac565b155b156106a0576040516367d9dca160e11b815260040160405180910390fd5b6106ab838383610b47565b505050565b6106ab838383610ba3565b6106ab838383604051806020016040528060008152506109c1565b60006106e182610d92565b5192915050565b60006001600160a01b038216610711576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107615760405162461bcd60e51b81526004016101e59061178f565b6106ab600b8383611305565b6008546001600160a01b031633146107975760405162461bcd60e51b81526004016101e59061178f565b6001600160a01b0381166107aa57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600160a81b900460ff166108155760405162461bcd60e51b815260206004820152600d60248201526c10d85b9d081b5a5b9d081e595d609a1b60448201526064016101e5565b6009546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820152600d60248201526c165bdd4818d85b9d081b5a5b9d609a1b60448201526064016101e5565b61138861086f6000546000190190565b61087990846117d4565b11156108bb5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101e5565b6108c58183610e7b565b5050565b60606002805461055b90611754565b6008546001600160a01b031633146109025760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a01b1916600160a01b85151502179055610925600a8383611305565b50505050565b6001600160a01b0382163314156109555760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109cc848484610ba3565b6001600160a01b0383163b151580156109ee57506109ec84848484610e95565b155b15610925576040516368d2bf6b60e11b815260040160405180910390fd5b600954606090600160a01b900460ff1615610a5657600a610a2c83610f7e565b600b604051602001610a4093929190611886565b6040516020818303038152906040529050919050565b600a604051602001610a4091906118b9565b919050565b6008546001600160a01b03163314610a975760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610ac061107c565b6001600160a01b038116610b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101e5565b610b2e816110d8565b50565b6000816001111580156105465750506000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610bae82610d92565b9050836001600160a01b031681600001516001600160a01b031614610be55760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610c035750610c0385336104ac565b80610c1e575033610c13846105de565b6001600160a01b0316145b905080610c3e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610c6557604051633a954ecd60e21b815260040160405180910390fd5b610c7160008487610b47565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610d47576000548214610d47578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051808201909152600080825260208201528180600111158015610db9575060005481105b15610e62576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e0b579392505050565b50600019016000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e5d579392505050565b610e0b565b604051636f96cda160e11b815260040160405180910390fd5b6108c582826040518060200160405280600081525061112a565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610eca9033908990889088906004016118c5565b6020604051808303816000875af1925050508015610f05575060408051601f3d908101601f19168201909252610f0291810190611902565b60015b610f60573d808015610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b508051610f58576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610fa25750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fcc5780610fb68161191f565b9150610fc59050600a83611950565b9150610fa6565b60008167ffffffffffffffff811115610fe757610fe7611638565b6040519080825280601f01601f191660200182016040528015611011576020820181803683370190505b5090505b8415610f7657611026600183611964565b9150611033600a8661197b565b61103e9060306117d4565b60f81b8183815181106110535761105361198f565b60200101906001600160f81b031916908160001a905350611075600a86611950565b9450611015565b6007546001600160a01b031633146110d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101e5565b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106ab83838360016000546001600160a01b03851661115b57604051622e076360e81b815260040160405180910390fd5b836111795760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600390925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561122b57506001600160a01b0387163b15155b156112b4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461127c6000888480600101955088610e95565b611299576040516368d2bf6b60e11b815260040160405180910390fd5b808214156112315782600054146112af57600080fd5b6112fa565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156112b5575b506000555050505050565b82805461131190611754565b90600052602060002090601f0160209004810192826113335760008555611379565b82601f1061134c5782800160ff19823516178555611379565b82800160010185558215611379579182015b8281111561137957823582559160200191906001019061135e565b50611385929150611389565b5090565b5b80821115611385576000815560010161138a565b6001600160e01b031981168114610b2e57600080fd5b6000602082840312156113c657600080fd5b81356113d18161139e565b9392505050565b60005b838110156113f35781810151838201526020016113db565b838111156109255750506000910152565b6000815180845261141c8160208601602086016113d8565b601f01601f19169290920160200192915050565b6020815260006113d16020830184611404565b60006020828403121561145557600080fd5b5035919050565b80356001600160a01b0381168114610a6857600080fd5b6000806040838503121561148657600080fd5b61148f8361145c565b946020939093013593505050565b6000806000606084860312156114b257600080fd5b6114bb8461145c565b92506114c96020850161145c565b9150604084013590509250925092565b6000602082840312156114eb57600080fd5b6113d18261145c565b60008083601f84011261150657600080fd5b50813567ffffffffffffffff81111561151e57600080fd5b60208301915083602082850101111561153657600080fd5b9250929050565b6000806020838503121561155057600080fd5b823567ffffffffffffffff81111561156757600080fd5b611573858286016114f4565b90969095509350505050565b6000806040838503121561159257600080fd5b823591506115a26020840161145c565b90509250929050565b80358015158114610a6857600080fd5b6000806000604084860312156115d057600080fd5b6115d9846115ab565b9250602084013567ffffffffffffffff8111156115f557600080fd5b611601868287016114f4565b9497909650939450505050565b6000806040838503121561162157600080fd5b61162a8361145c565b91506115a2602084016115ab565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561166457600080fd5b61166d8561145c565b935061167b6020860161145c565b925060408501359150606085013567ffffffffffffffff8082111561169f57600080fd5b818701915087601f8301126116b357600080fd5b8135818111156116c5576116c5611638565b604051601f8201601f19908116603f011681019083821181831017156116ed576116ed611638565b816040528281528a602084870101111561170657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561173d57600080fd5b6117468361145c565b91506115a26020840161145c565b600181811c9082168061176857607f821691505b6020821081141561178957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117e7576117e76117be565b500190565b8054600090600181811c908083168061180657607f831692505b602080841082141561182857634e487b7160e01b600052602260045260246000fd5b81801561183c576001811461184d5761187a565b60ff1986168952848901965061187a565b60008881526020902060005b868110156118725781548b820152908501908301611859565b505084890196505b50505050505092915050565b600061189282866117ec565b84516118a28183602089016113d8565b6118ae818301866117ec565b979650505050505050565b60006113d182846117ec565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118f890830184611404565b9695505050505050565b60006020828403121561191457600080fd5b81516113d18161139e565b6000600019821415611933576119336117be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261195f5761195f61193a565b500490565b600082821015611976576119766117be565b500390565b60008261198a5761198a61193a565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af64736f6c634300080a0033697066733a2f2f516d55744b48626954684c3546696b55755567764c72483748644e7a51394b6d665574447345366f3368554b5470000000000000000000000000f8c45b2375a574beca18224c47353969c044a9ec000000000000000000000000b4e62d6363f82e0e74e8963828815f907eab2c66
Deployed Bytecode
0x6080604052600436106101395760003560e01c8063880cdc31116100ab578063a22cb4651161006f578063a22cb4651461041c578063b88d4fde1461043c578063c87b56dd1461045c578063d3dd5fe01461047c578063e985e9c514610491578063f2fde38b146104da57600080fd5b8063880cdc31146103895780638da5cb5b146103a957806394bf804d146103c757806395d89b41146103e7578063a101ff6d146103fc57600080fd5b806323b872dd116100fd57806323b872dd146102ca578063346de50a146102ea57806342842e0e146103095780636352211e1461032957806370a08231146103495780637e2285aa1461036957600080fd5b806301ffc9a7146101f657806306fdde031461022b578063081812fc1461024d578063095ea7b31461028557806318160ddd146102a757600080fd5b366101f15760006101526007546001600160a01b031690565b6001600160a01b03163460405160006040518083038185875af1925050503d806000811461019c576040519150601f19603f3d011682016040523d82523d6000602084013e6101a1565b606091505b50509050806101ee5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064015b60405180910390fd5b50005b600080fd5b34801561020257600080fd5b506102166102113660046113b4565b6104fa565b60405190151581526020015b60405180910390f35b34801561023757600080fd5b5061024061054c565b6040516102229190611430565b34801561025957600080fd5b5061026d610268366004611443565b6105de565b6040516001600160a01b039091168152602001610222565b34801561029157600080fd5b506102a56102a0366004611473565b610622565b005b3480156102b357600080fd5b50600054600019015b604051908152602001610222565b3480156102d657600080fd5b506102a56102e536600461149d565b6106b0565b3480156102f657600080fd5b50600954600160a81b900460ff16610216565b34801561031557600080fd5b506102a561032436600461149d565b6106bb565b34801561033557600080fd5b5061026d610344366004611443565b6106d6565b34801561035557600080fd5b506102bc6103643660046114d9565b6106e8565b34801561037557600080fd5b506102a561038436600461153d565b610737565b34801561039557600080fd5b506102a56103a43660046114d9565b61076d565b3480156103b557600080fd5b506007546001600160a01b031661026d565b3480156103d357600080fd5b506102a56103e236600461157f565b6107cc565b3480156103f357600080fd5b506102406108c9565b34801561040857600080fd5b506102a56104173660046115bb565b6108d8565b34801561042857600080fd5b506102a561043736600461160e565b61092b565b34801561044857600080fd5b506102a561045736600461164e565b6109c1565b34801561046857600080fd5b50610240610477366004611443565b610a0c565b34801561048857600080fd5b506102a5610a6d565b34801561049d57600080fd5b506102166104ac36600461172a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156104e657600080fd5b506102a56104f53660046114d9565b610ab8565b60006001600160e01b031982166380ac58cd60e01b148061052b57506001600160e01b03198216635b5e139f60e01b145b8061054657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461055b90611754565b80601f016020809104026020016040519081016040528092919081815260200182805461058790611754565b80156105d45780601f106105a9576101008083540402835291602001916105d4565b820191906000526020600020905b8154815290600101906020018083116105b757829003601f168201915b5050505050905090565b60006105e982610b31565b610606576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061062d826106d6565b9050806001600160a01b0316836001600160a01b031614156106625760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610682575061068081336104ac565b155b156106a0576040516367d9dca160e11b815260040160405180910390fd5b6106ab838383610b47565b505050565b6106ab838383610ba3565b6106ab838383604051806020016040528060008152506109c1565b60006106e182610d92565b5192915050565b60006001600160a01b038216610711576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526004602052604090205467ffffffffffffffff1690565b6008546001600160a01b031633146107615760405162461bcd60e51b81526004016101e59061178f565b6106ab600b8383611305565b6008546001600160a01b031633146107975760405162461bcd60e51b81526004016101e59061178f565b6001600160a01b0381166107aa57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600954600160a81b900460ff166108155760405162461bcd60e51b815260206004820152600d60248201526c10d85b9d081b5a5b9d081e595d609a1b60448201526064016101e5565b6009546001600160a01b0316331461085f5760405162461bcd60e51b815260206004820152600d60248201526c165bdd4818d85b9d081b5a5b9d609a1b60448201526064016101e5565b61138861086f6000546000190190565b61087990846117d4565b11156108bb5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016101e5565b6108c58183610e7b565b5050565b60606002805461055b90611754565b6008546001600160a01b031633146109025760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a01b1916600160a01b85151502179055610925600a8383611305565b50505050565b6001600160a01b0382163314156109555760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109cc848484610ba3565b6001600160a01b0383163b151580156109ee57506109ec84848484610e95565b155b15610925576040516368d2bf6b60e11b815260040160405180910390fd5b600954606090600160a01b900460ff1615610a5657600a610a2c83610f7e565b600b604051602001610a4093929190611886565b6040516020818303038152906040529050919050565b600a604051602001610a4091906118b9565b919050565b6008546001600160a01b03163314610a975760405162461bcd60e51b81526004016101e59061178f565b6009805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610ac061107c565b6001600160a01b038116610b255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101e5565b610b2e816110d8565b50565b6000816001111580156105465750506000541190565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610bae82610d92565b9050836001600160a01b031681600001516001600160a01b031614610be55760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b0386161480610c035750610c0385336104ac565b80610c1e575033610c13846105de565b6001600160a01b0316145b905080610c3e57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038416610c6557604051633a954ecd60e21b815260040160405180910390fd5b610c7160008487610b47565b6001600160a01b038581166000908152600460209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600390945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116610d47576000548214610d47578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051808201909152600080825260208201528180600111158015610db9575060005481105b15610e62576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e0b579392505050565b50600019016000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b90910467ffffffffffffffff169183019190915215610e5d579392505050565b610e0b565b604051636f96cda160e11b815260040160405180910390fd5b6108c582826040518060200160405280600081525061112a565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290610eca9033908990889088906004016118c5565b6020604051808303816000875af1925050508015610f05575060408051601f3d908101601f19168201909252610f0291810190611902565b60015b610f60573d808015610f33576040519150601f19603f3d011682016040523d82523d6000602084013e610f38565b606091505b508051610f58576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b606081610fa25750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610fcc5780610fb68161191f565b9150610fc59050600a83611950565b9150610fa6565b60008167ffffffffffffffff811115610fe757610fe7611638565b6040519080825280601f01601f191660200182016040528015611011576020820181803683370190505b5090505b8415610f7657611026600183611964565b9150611033600a8661197b565b61103e9060306117d4565b60f81b8183815181106110535761105361198f565b60200101906001600160f81b031916908160001a905350611075600a86611950565b9450611015565b6007546001600160a01b031633146110d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101e5565b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6106ab83838360016000546001600160a01b03851661115b57604051622e076360e81b815260040160405180910390fd5b836111795760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260046020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600390925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561122b57506001600160a01b0387163b15155b156112b4575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461127c6000888480600101955088610e95565b611299576040516368d2bf6b60e11b815260040160405180910390fd5b808214156112315782600054146112af57600080fd5b6112fa565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808214156112b5575b506000555050505050565b82805461131190611754565b90600052602060002090601f0160209004810192826113335760008555611379565b82601f1061134c5782800160ff19823516178555611379565b82800160010185558215611379579182015b8281111561137957823582559160200191906001019061135e565b50611385929150611389565b5090565b5b80821115611385576000815560010161138a565b6001600160e01b031981168114610b2e57600080fd5b6000602082840312156113c657600080fd5b81356113d18161139e565b9392505050565b60005b838110156113f35781810151838201526020016113db565b838111156109255750506000910152565b6000815180845261141c8160208601602086016113d8565b601f01601f19169290920160200192915050565b6020815260006113d16020830184611404565b60006020828403121561145557600080fd5b5035919050565b80356001600160a01b0381168114610a6857600080fd5b6000806040838503121561148657600080fd5b61148f8361145c565b946020939093013593505050565b6000806000606084860312156114b257600080fd5b6114bb8461145c565b92506114c96020850161145c565b9150604084013590509250925092565b6000602082840312156114eb57600080fd5b6113d18261145c565b60008083601f84011261150657600080fd5b50813567ffffffffffffffff81111561151e57600080fd5b60208301915083602082850101111561153657600080fd5b9250929050565b6000806020838503121561155057600080fd5b823567ffffffffffffffff81111561156757600080fd5b611573858286016114f4565b90969095509350505050565b6000806040838503121561159257600080fd5b823591506115a26020840161145c565b90509250929050565b80358015158114610a6857600080fd5b6000806000604084860312156115d057600080fd5b6115d9846115ab565b9250602084013567ffffffffffffffff8111156115f557600080fd5b611601868287016114f4565b9497909650939450505050565b6000806040838503121561162157600080fd5b61162a8361145c565b91506115a2602084016115ab565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561166457600080fd5b61166d8561145c565b935061167b6020860161145c565b925060408501359150606085013567ffffffffffffffff8082111561169f57600080fd5b818701915087601f8301126116b357600080fd5b8135818111156116c5576116c5611638565b604051601f8201601f19908116603f011681019083821181831017156116ed576116ed611638565b816040528281528a602084870101111561170657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561173d57600080fd5b6117468361145c565b91506115a26020840161145c565b600181811c9082168061176857607f821691505b6020821081141561178957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156117e7576117e76117be565b500190565b8054600090600181811c908083168061180657607f831692505b602080841082141561182857634e487b7160e01b600052602260045260246000fd5b81801561183c576001811461184d5761187a565b60ff1986168952848901965061187a565b60008881526020902060005b868110156118725781548b820152908501908301611859565b505084890196505b50505050505092915050565b600061189282866117ec565b84516118a28183602089016113d8565b6118ae818301866117ec565b979650505050505050565b60006113d182846117ec565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906118f890830184611404565b9695505050505050565b60006020828403121561191457600080fd5b81516113d18161139e565b6000600019821415611933576119336117be565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261195f5761195f61193a565b500490565b600082821015611976576119766117be565b500390565b60008261198a5761198a61193a565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f8c45b2375a574beca18224c47353969c044a9ec000000000000000000000000b4e62d6363f82e0e74e8963828815f907eab2c66
-----Decoded View---------------
Arg [0] : owner_ (address): 0xf8c45B2375a574BecA18224C47353969C044a9EC
Arg [1] : whoCanMint_ (address): 0xB4e62D6363f82E0E74E8963828815f907Eab2C66
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8c45b2375a574beca18224c47353969c044a9ec
Arg [1] : 000000000000000000000000b4e62d6363f82e0e74e8963828815f907eab2c66
Deployed Bytecode Sourcemap
27595:2228:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28153:9;28176:7;6169:6;;-1:-1:-1;;;;;6169:6:0;;6096:87;28176:7;-1:-1:-1;;;;;28168:21:0;28197:9;28168:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:59;;;28230:4;28222:37;;;;-1:-1:-1;;;28222:37:0;;426:2:1;28222:37:0;;;408:21:1;465:2;445:18;;;438:30;-1:-1:-1;;;484:18:1;;;477:50;544:18;;28222:37:0;;;;;;;;;28141:126;27595:2228;;;;;18749:305;;;;;;;;;;-1:-1:-1;18749:305:0;;;;;:::i;:::-;;:::i;:::-;;;1124:14:1;;1117:22;1099:41;;1087:2;1072:18;18749:305:0;;;;;;;;20151:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21186:204::-;;;;;;;;;;-1:-1:-1;21186:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2251:32:1;;;2233:51;;2221:2;2206:18;21186:204:0;2087:203:1;20805:373:0;;;;;;;;;;-1:-1:-1;20805:373:0;;;;;:::i;:::-;;:::i;:::-;;18453:288;;;;;;;;;;-1:-1:-1;18497:7:0;18691:13;-1:-1:-1;;18691:31:0;18453:288;;;2878:25:1;;;2866:2;2851:18;18453:288:0;2732:177:1;21867:172:0;;;;;;;;;;-1:-1:-1;21867:172:0;;;;;:::i;:::-;;:::i;29354:91::-;;;;;;;;;;-1:-1:-1;29426:11:0;;-1:-1:-1;;;29426:11:0;;;;29354:91;;22047:185;;;;;;;;;;-1:-1:-1;22047:185:0;;;;;:::i;:::-;;:::i;20018:125::-;;;;;;;;;;-1:-1:-1;20018:125:0;;;;;:::i;:::-;;:::i;19062:208::-;;;;;;;;;;-1:-1:-1;19062:208:0;;;;;:::i;:::-;;:::i;28837:161::-;;;;;;;;;;-1:-1:-1;28837:161:0;;;;;:::i;:::-;;:::i;29006:189::-;;;;;;;;;;-1:-1:-1;29006:189:0;;;;;:::i;:::-;;:::i;6096:87::-;;;;;;;;;;-1:-1:-1;6169:6:0;;-1:-1:-1;;;;;6169:6:0;6096:87;;28275:336;;;;;;;;;;-1:-1:-1;28275:336:0;;;;;:::i;:::-;;:::i;20261:106::-;;;;;;;;;;;;;:::i;28619:210::-;;;;;;;;;;-1:-1:-1;28619:210:0;;;;;:::i;:::-;;:::i;21398:289::-;;;;;;;;;;-1:-1:-1;21398:289:0;;;;;:::i;:::-;;:::i;22240:369::-;;;;;;;;;;-1:-1:-1;22240:369:0;;;;;:::i;:::-;;:::i;29453:367::-;;;;;;;;;;-1:-1:-1;29453:367:0;;;;;:::i;:::-;;:::i;29203:143::-;;;;;;;;;;;;;:::i;21695:164::-;;;;;;;;;;-1:-1:-1;21695:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;21816:25:0;;;21792:4;21816:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;21695:164;6331:201;;;;;;;;;;-1:-1:-1;6331:201:0;;;;;:::i;:::-;;:::i;18749:305::-;18851:4;-1:-1:-1;;;;;;18888:40:0;;-1:-1:-1;;;18888:40:0;;:105;;-1:-1:-1;;;;;;;18945:48:0;;-1:-1:-1;;;18945:48:0;18888:105;:158;;;-1:-1:-1;;;;;;;;;;9144:40:0;;;19010:36;18868:178;18749:305;-1:-1:-1;;18749:305:0:o;20151:102::-;20207:13;20240:5;20233:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20151:102;:::o;21186:204::-;21254:7;21279:16;21287:7;21279;:16::i;:::-;21274:64;;21304:34;;-1:-1:-1;;;21304:34:0;;;;;;;;;;;21274:64;-1:-1:-1;21358:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;21358:24:0;;21186:204::o;20805:373::-;20880:13;20896:24;20912:7;20896:15;:24::i;:::-;20880:40;;20941:5;-1:-1:-1;;;;;20935:11:0;:2;-1:-1:-1;;;;;20935:11:0;;20931:48;;;20955:24;;-1:-1:-1;;;20955:24:0;;;;;;;;;;;20931:48;5758:10;-1:-1:-1;;;;;20996:21:0;;;;;;:63;;-1:-1:-1;21022:37:0;21039:5;5758:10;21695:164;:::i;21022:37::-;21021:38;20996:63;20992:138;;;21083:35;;-1:-1:-1;;;21083:35:0;;;;;;;;;;;20992:138;21142:28;21151:2;21155:7;21164:5;21142:8;:28::i;:::-;20869:309;20805:373;;:::o;21867:172::-;22003:28;22013:4;22019:2;22023:7;22003:9;:28::i;22047:185::-;22185:39;22202:4;22208:2;22212:7;22185:39;;;;;;;;;;;;:16;:39::i;20018:125::-;20082:7;20109:21;20122:7;20109:12;:21::i;:::-;:26;;20018:125;-1:-1:-1;;20018:125:0:o;19062:208::-;19128:7;-1:-1:-1;;;;;19152:19:0;;19148:60;;19180:28;;-1:-1:-1;;;19180:28:0;;;;;;;;;;;19148:60;-1:-1:-1;;;;;;19234:19:0;;;;;:12;:19;;;;;:27;;;;19062:208::o;28837:161::-;28927:8;;-1:-1:-1;;;;;28927:8:0;28913:10;:22;28905:56;;;;-1:-1:-1;;;28905:56:0;;;;;;;:::i;:::-;28972:18;:7;28982:8;;28972:18;:::i;29006:189::-;29085:8;;-1:-1:-1;;;;;29085:8:0;29071:10;:22;29063:56;;;;-1:-1:-1;;;29063:56:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29138:20:0;;29130:29;;;;;;29170:8;:17;;-1:-1:-1;;;;;;29170:17:0;-1:-1:-1;;;;;29170:17:0;;;;;;;;;;29006:189::o;28275:336::-;28355:11;;-1:-1:-1;;;28355:11:0;;;;28347:37;;;;-1:-1:-1;;;28347:37:0;;7851:2:1;28347:37:0;;;7833:21:1;7890:2;7870:18;;;7863:30;-1:-1:-1;;;7909:18:1;;;7902:43;7962:18;;28347:37:0;7649:337:1;28347:37:0;28403:10;;-1:-1:-1;;;;;28403:10:0;28417;28403:24;28395:50;;;;-1:-1:-1;;;28395:50:0;;8193:2:1;28395:50:0;;;8175:21:1;8232:2;8212:18;;;8205:30;-1:-1:-1;;;8251:18:1;;;8244:43;8304:18;;28395:50:0;7991:337:1;28395:50:0;28512:4;28495:13;18497:7;18691:13;-1:-1:-1;;18691:31:0;;18453:288;28495:13;28478:30;;:14;:30;:::i;:::-;:38;;28456:105;;;;-1:-1:-1;;;28456:105:0;;8800:2:1;28456:105:0;;;8782:21:1;8839:2;8819:18;;;8812:30;-1:-1:-1;;;8858:18:1;;;8851:47;8915:18;;28456:105:0;8598:341:1;28456:105:0;28572:31;28582:4;28588:14;28572:9;:31::i;:::-;28275:336;;:::o;20261:106::-;20319:13;20352:7;20345:14;;;;;:::i;28619:210::-;28718:8;;-1:-1:-1;;;;;28718:8:0;28704:10;:22;28696:56;;;;-1:-1:-1;;;28696:56:0;;;;;;;:::i;:::-;28763:9;:20;;-1:-1:-1;;;;28763:20:0;-1:-1:-1;;;28763:20:0;;;;;;;28794:27;:16;28813:8;;28794:27;:::i;:::-;;28619:210;;;:::o;21398:289::-;-1:-1:-1;;;;;21499:24:0;;5758:10;21499:24;21495:54;;;21532:17;;-1:-1:-1;;;21532:17:0;;;;;;;;;;;21495:54;5758:10;21562:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;21562:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;21562:53:0;;;;;;;;;;21631:48;;1099:41:1;;;21562:42:0;;5758:10;21631:48;;1072:18:1;21631:48:0;;;;;;;21398:289;;:::o;22240:369::-;22407:28;22417:4;22423:2;22427:7;22407:9;:28::i;:::-;-1:-1:-1;;;;;22450:13:0;;5607:19;:23;;22450:76;;;;;22470:56;22501:4;22507:2;22511:7;22520:5;22470:30;:56::i;:::-;22469:57;22450:76;22446:156;;;22550:40;;-1:-1:-1;;;22550:40:0;;;;;;;;;;;29453:367;29608:9;;29573:13;;-1:-1:-1;;;29608:9:0;;;;29604:209;;;29665:16;29683:25;29700:7;29683:16;:25::i;:::-;29710:7;29648:70;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29634:85;;29453:367;;;:::o;29604:209::-;29783:16;29766:34;;;;;;;;:::i;29604:209::-;29453:367;;;:::o;29203:143::-;29267:8;;-1:-1:-1;;;;;29267:8:0;29253:10;:22;29245:56;;;;-1:-1:-1;;;29245:56:0;;;;;;;:::i;:::-;29327:11;;;-1:-1:-1;;;;29312:26:0;;-1:-1:-1;;;29327:11:0;;;;;;29326:12;29312:26;;;;;;29203:143::o;6331:201::-;6055:13;:11;:13::i;:::-;-1:-1:-1;;;;;6420:22:0;::::1;6412:73;;;::::0;-1:-1:-1;;;6412:73:0;;10913:2:1;6412:73:0::1;::::0;::::1;10895:21:1::0;10952:2;10932:18;;;10925:30;10991:34;10971:18;;;10964:62;-1:-1:-1;;;11042:18:1;;;11035:36;11088:19;;6412:73:0::1;10711:402:1::0;6412:73:0::1;6496:28;6515:8;6496:18;:28::i;:::-;6331:201:::0;:::o;22617:142::-;22674:4;22717:7;18436:1;22698:26;;:53;;;;-1:-1:-1;;22738:13:0;;-1:-1:-1;22728:23:0;22617:142::o;26717:196::-;26832:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;26832:29:0;-1:-1:-1;;;;;26832:29:0;;;;;;;;;26877:28;;26832:24;;26877:28;;;;;;;26717:196;;;:::o;24688:2021::-;24803:35;24841:21;24854:7;24841:12;:21::i;:::-;24803:59;;24901:4;-1:-1:-1;;;;;24879:26:0;:13;:18;;;-1:-1:-1;;;;;24879:26:0;;24875:67;;24914:28;;-1:-1:-1;;;24914:28:0;;;;;;;;;;;24875:67;24955:22;5758:10;-1:-1:-1;;;;;24981:20:0;;;;:73;;-1:-1:-1;25018:36:0;25035:4;5758:10;21695:164;:::i;25018:36::-;24981:126;;;-1:-1:-1;5758:10:0;25071:20;25083:7;25071:11;:20::i;:::-;-1:-1:-1;;;;;25071:36:0;;24981:126;24955:153;;25126:17;25121:66;;25152:35;;-1:-1:-1;;;25152:35:0;;;;;;;;;;;25121:66;-1:-1:-1;;;;;25202:16:0;;25198:52;;25227:23;;-1:-1:-1;;;25227:23:0;;;;;;;;;;;25198:52;25315:35;25332:1;25336:7;25345:4;25315:8;:35::i;:::-;-1:-1:-1;;;;;25646:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;25646:31:0;;;;;;;-1:-1:-1;;25646:31:0;;;;;;;25692:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;25692:29:0;;;;;;;;;;;25772:20;;;:11;:20;;;;;;25807:18;;-1:-1:-1;;;;;;25840:49:0;;;;-1:-1:-1;;;25873:15:0;25840:49;;;;;;;;;;26163:11;;26223:24;;;;;26266:13;;25772:20;;26223:24;;26266:13;26262:384;;26476:13;;26461:11;:28;26457:174;;26514:20;;26583:28;;;;26557:54;;-1:-1:-1;;;26557:54:0;-1:-1:-1;;;;;;26557:54:0;;;-1:-1:-1;;;;;26514:20:0;;26557:54;;;;26457:174;25621:1036;;;26693:7;26689:2;-1:-1:-1;;;;;26674:27:0;26683:4;-1:-1:-1;;;;;26674:27:0;;;;;;;;;;;24792:1917;;24688:2021;;;:::o;19278:732::-;-1:-1:-1;;;;;;;;;;;;;;;;;19389:7:0;;18436:1;19438:23;;:47;;;;;19472:13;;19465:4;:20;19438:47;19434:509;;;19506:31;19540:17;;;:11;:17;;;;;;;;;19506:51;;;;;;;;;-1:-1:-1;;;;;19506:51:0;;;;;-1:-1:-1;;;19506:51:0;;;;;;;;;;;;19580:28;19576:93;;19640:9;19278:732;-1:-1:-1;;;19278:732:0:o;19576:93::-;-1:-1:-1;;;19723:6:0;19764:17;;;;:11;:17;;;;;;;;;19752:29;;;;;;;;;-1:-1:-1;;;;;19752:29:0;;;;;-1:-1:-1;;;19752:29:0;;;;;;;;;;;;19808:28;19804:105;;19876:9;19278:732;-1:-1:-1;;;19278:732:0:o;19804:105::-;19687:241;;19434:509;19971:31;;-1:-1:-1;;;19971:31:0;;;;;;;;;;;22767:104;22836:27;22846:2;22850:8;22836:27;;;;;;;;;;;;:9;:27::i;26921:667::-;27105:72;;-1:-1:-1;;;27105:72:0;;27084:4;;-1:-1:-1;;;;;27105:36:0;;;;;:72;;5758:10;;27156:4;;27162:7;;27171:5;;27105:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27105:72:0;;;;;;;;-1:-1:-1;;27105:72:0;;;;;;;;;;;;:::i;:::-;;;27101:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27339:13:0;;27335:235;;27385:40;;-1:-1:-1;;;27385:40:0;;;;;;;;;;;27335:235;27528:6;27522:13;27513:6;27509:2;27505:15;27498:38;27101:480;-1:-1:-1;;;;;;27224:55:0;-1:-1:-1;;;27224:55:0;;-1:-1:-1;27101:480:0;26921:667;;;;;;:::o;8016:723::-;8072:13;8293:10;8289:53;;-1:-1:-1;;8320:10:0;;;;;;;;;;;;-1:-1:-1;;;8320:10:0;;;;;8016:723::o;8289:53::-;8367:5;8352:12;8408:78;8415:9;;8408:78;;8441:8;;;;:::i;:::-;;-1:-1:-1;8464:10:0;;-1:-1:-1;8472:2:0;8464:10;;:::i;:::-;;;8408:78;;;8496:19;8528:6;8518:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8518:17:0;;8496:39;;8546:154;8553:10;;8546:154;;8580:11;8590:1;8580:11;;:::i;:::-;;-1:-1:-1;8649:10:0;8657:2;8649:5;:10;:::i;:::-;8636:24;;:2;:24;:::i;:::-;8623:39;;8606:6;8613;8606:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8606:56:0;;;;;;;;-1:-1:-1;8677:11:0;8686:2;8677:11;;:::i;:::-;;;8546:154;;6191:132;6169:6;;-1:-1:-1;;;;;6169:6:0;5758:10;6255:23;6247:68;;;;-1:-1:-1;;;6247:68:0;;12844:2:1;6247:68:0;;;12826:21:1;;;12863:18;;;12856:30;12922:34;12902:18;;;12895:62;12974:18;;6247:68:0;12642:356:1;6247:68:0;6191:132::o;6540:191::-;6633:6;;;-1:-1:-1;;;;;6650:17:0;;;-1:-1:-1;;;;;;6650:17:0;;;;;;;6683:40;;6633:6;;;6650:17;6633:6;;6683:40;;6614:16;;6683:40;6603:128;6540:191;:::o;22879:163::-;23002:32;23008:2;23012:8;23022:5;23029:4;23189:20;23212:13;-1:-1:-1;;;;;23240:16:0;;23236:48;;23265:19;;-1:-1:-1;;;23265:19:0;;;;;;;;;;;23236:48;23299:13;23295:44;;23321:18;;-1:-1:-1;;;23321:18:0;;;;;;;;;;;23295:44;-1:-1:-1;;;;;23616:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;23675:49:0;;23616:44;;;;;;;;23675:49;;;;-1:-1:-1;;23616:44:0;;;;;;23675:49;;;;;;;;;;;;;;;;23741:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;23791:66:0;;;;-1:-1:-1;;;23841:15:0;23791:66;;;;;;;;;;23741:25;23938:23;;;23982:4;:23;;;;-1:-1:-1;;;;;;23990:13:0;;5607:19;:23;;23990:15;23978:641;;;24026:314;24057:38;;24082:12;;-1:-1:-1;;;;;24057:38:0;;;24074:1;;24057:38;;24074:1;;24057:38;24123:69;24162:1;24166:2;24170:14;;;;;;24186:5;24123:30;:69::i;:::-;24118:174;;24228:40;;-1:-1:-1;;;24228:40:0;;;;;;;;;;;24118:174;24335:3;24319:12;:19;;24026:314;;24421:12;24404:13;;:29;24400:43;;24435:8;;;24400:43;23978:641;;;24484:120;24515:40;;24540:14;;;;;-1:-1:-1;;;;;24515:40:0;;;24532:1;;24515:40;;24532:1;;24515:40;24599:3;24583:12;:19;;24484:120;;23978:641;-1:-1:-1;24633:13:0;:28;-1:-1:-1;;;;;23050:1630:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;573:131:1;-1:-1:-1;;;;;;647:32:1;;637:43;;627:71;;694:1;691;684:12;709:245;767:6;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:30;918:5;894:30;:::i;:::-;943:5;709:245;-1:-1:-1;;;709:245:1:o;1151:258::-;1223:1;1233:113;1247:6;1244:1;1241:13;1233:113;;;1323:11;;;1317:18;1304:11;;;1297:39;1269:2;1262:10;1233:113;;;1364:6;1361:1;1358:13;1355:48;;;-1:-1:-1;;1399:1:1;1381:16;;1374:27;1151:258::o;1414:::-;1456:3;1494:5;1488:12;1521:6;1516:3;1509:19;1537:63;1593:6;1586:4;1581:3;1577:14;1570:4;1563:5;1559:16;1537:63;:::i;:::-;1654:2;1633:15;-1:-1:-1;;1629:29:1;1620:39;;;;1661:4;1616:50;;1414:258;-1:-1:-1;;1414:258:1:o;1677:220::-;1826:2;1815:9;1808:21;1789:4;1846:45;1887:2;1876:9;1872:18;1864:6;1846:45;:::i;1902:180::-;1961:6;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;-1:-1:-1;2053:23:1;;1902:180;-1:-1:-1;1902:180:1:o;2295:173::-;2363:20;;-1:-1:-1;;;;;2412:31:1;;2402:42;;2392:70;;2458:1;2455;2448:12;2473:254;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2641:29;2660:9;2641:29;:::i;:::-;2631:39;2717:2;2702:18;;;;2689:32;;-1:-1:-1;;;2473:254:1:o;2914:328::-;2991:6;2999;3007;3060:2;3048:9;3039:7;3035:23;3031:32;3028:52;;;3076:1;3073;3066:12;3028:52;3099:29;3118:9;3099:29;:::i;:::-;3089:39;;3147:38;3181:2;3170:9;3166:18;3147:38;:::i;:::-;3137:48;;3232:2;3221:9;3217:18;3204:32;3194:42;;2914:328;;;;;:::o;3247:186::-;3306:6;3359:2;3347:9;3338:7;3334:23;3330:32;3327:52;;;3375:1;3372;3365:12;3327:52;3398:29;3417:9;3398:29;:::i;3438:348::-;3490:8;3500:6;3554:3;3547:4;3539:6;3535:17;3531:27;3521:55;;3572:1;3569;3562:12;3521:55;-1:-1:-1;3595:20:1;;3638:18;3627:30;;3624:50;;;3670:1;3667;3660:12;3624:50;3707:4;3699:6;3695:17;3683:29;;3759:3;3752:4;3743:6;3735;3731:19;3727:30;3724:39;3721:59;;;3776:1;3773;3766:12;3721:59;3438:348;;;;;:::o;3791:411::-;3862:6;3870;3923:2;3911:9;3902:7;3898:23;3894:32;3891:52;;;3939:1;3936;3929:12;3891:52;3979:9;3966:23;4012:18;4004:6;4001:30;3998:50;;;4044:1;4041;4034:12;3998:50;4083:59;4134:7;4125:6;4114:9;4110:22;4083:59;:::i;:::-;4161:8;;4057:85;;-1:-1:-1;3791:411:1;-1:-1:-1;;;;3791:411:1:o;4207:254::-;4275:6;4283;4336:2;4324:9;4315:7;4311:23;4307:32;4304:52;;;4352:1;4349;4342:12;4304:52;4388:9;4375:23;4365:33;;4417:38;4451:2;4440:9;4436:18;4417:38;:::i;:::-;4407:48;;4207:254;;;;;:::o;4466:160::-;4531:20;;4587:13;;4580:21;4570:32;;4560:60;;4616:1;4613;4606:12;4631:479;4708:6;4716;4724;4777:2;4765:9;4756:7;4752:23;4748:32;4745:52;;;4793:1;4790;4783:12;4745:52;4816:26;4832:9;4816:26;:::i;:::-;4806:36;;4893:2;4882:9;4878:18;4865:32;4920:18;4912:6;4909:30;4906:50;;;4952:1;4949;4942:12;4906:50;4991:59;5042:7;5033:6;5022:9;5018:22;4991:59;:::i;:::-;4631:479;;5069:8;;-1:-1:-1;4965:85:1;;-1:-1:-1;;;;4631:479:1:o;5115:254::-;5180:6;5188;5241:2;5229:9;5220:7;5216:23;5212:32;5209:52;;;5257:1;5254;5247:12;5209:52;5280:29;5299:9;5280:29;:::i;:::-;5270:39;;5328:35;5359:2;5348:9;5344:18;5328:35;:::i;5374:127::-;5435:10;5430:3;5426:20;5423:1;5416:31;5466:4;5463:1;5456:15;5490:4;5487:1;5480:15;5506:1138;5601:6;5609;5617;5625;5678:3;5666:9;5657:7;5653:23;5649:33;5646:53;;;5695:1;5692;5685:12;5646:53;5718:29;5737:9;5718:29;:::i;:::-;5708:39;;5766:38;5800:2;5789:9;5785:18;5766:38;:::i;:::-;5756:48;;5851:2;5840:9;5836:18;5823:32;5813:42;;5906:2;5895:9;5891:18;5878:32;5929:18;5970:2;5962:6;5959:14;5956:34;;;5986:1;5983;5976:12;5956:34;6024:6;6013:9;6009:22;5999:32;;6069:7;6062:4;6058:2;6054:13;6050:27;6040:55;;6091:1;6088;6081:12;6040:55;6127:2;6114:16;6149:2;6145;6142:10;6139:36;;;6155:18;;:::i;:::-;6230:2;6224:9;6198:2;6284:13;;-1:-1:-1;;6280:22:1;;;6304:2;6276:31;6272:40;6260:53;;;6328:18;;;6348:22;;;6325:46;6322:72;;;6374:18;;:::i;:::-;6414:10;6410:2;6403:22;6449:2;6441:6;6434:18;6489:7;6484:2;6479;6475;6471:11;6467:20;6464:33;6461:53;;;6510:1;6507;6500:12;6461:53;6566:2;6561;6557;6553:11;6548:2;6540:6;6536:15;6523:46;6611:1;6606:2;6601;6593:6;6589:15;6585:24;6578:35;6632:6;6622:16;;;;;;;5506:1138;;;;;;;:::o;6649:260::-;6717:6;6725;6778:2;6766:9;6757:7;6753:23;6749:32;6746:52;;;6794:1;6791;6784:12;6746:52;6817:29;6836:9;6817:29;:::i;:::-;6807:39;;6865:38;6899:2;6888:9;6884:18;6865:38;:::i;6914:380::-;6993:1;6989:12;;;;7036;;;7057:61;;7111:4;7103:6;7099:17;7089:27;;7057:61;7164:2;7156:6;7153:14;7133:18;7130:38;7127:161;;;7210:10;7205:3;7201:20;7198:1;7191:31;7245:4;7242:1;7235:15;7273:4;7270:1;7263:15;7127:161;;6914:380;;;:::o;7299:345::-;7501:2;7483:21;;;7540:2;7520:18;;;7513:30;-1:-1:-1;;;7574:2:1;7559:18;;7552:51;7635:2;7620:18;;7299:345::o;8333:127::-;8394:10;8389:3;8385:20;8382:1;8375:31;8425:4;8422:1;8415:15;8449:4;8446:1;8439:15;8465:128;8505:3;8536:1;8532:6;8529:1;8526:13;8523:39;;;8542:18;;:::i;:::-;-1:-1:-1;8578:9:1;;8465:128::o;9070:973::-;9155:12;;9120:3;;9210:1;9230:18;;;;9283;;;;9310:61;;9364:4;9356:6;9352:17;9342:27;;9310:61;9390:2;9438;9430:6;9427:14;9407:18;9404:38;9401:161;;;9484:10;9479:3;9475:20;9472:1;9465:31;9519:4;9516:1;9509:15;9547:4;9544:1;9537:15;9401:161;9578:18;9605:104;;;;9723:1;9718:319;;;;9571:466;;9605:104;-1:-1:-1;;9638:24:1;;9626:37;;9683:16;;;;-1:-1:-1;9605:104:1;;9718:319;9017:1;9010:14;;;9054:4;9041:18;;9812:1;9826:165;9840:6;9837:1;9834:13;9826:165;;;9918:14;;9905:11;;;9898:35;9961:16;;;;9855:10;;9826:165;;;9830:3;;10020:6;10015:3;10011:16;10004:23;;9571:466;;;;;;;9070:973;;;;:::o;10048:456::-;10269:3;10297:38;10331:3;10323:6;10297:38;:::i;:::-;10364:6;10358:13;10380:52;10425:6;10421:2;10414:4;10406:6;10402:17;10380:52;:::i;:::-;10448:50;10490:6;10486:2;10482:15;10474:6;10448:50;:::i;:::-;10441:57;10048:456;-1:-1:-1;;;;;;;10048:456:1:o;10509:197::-;10637:3;10662:38;10696:3;10688:6;10662:38;:::i;11118:489::-;-1:-1:-1;;;;;11387:15:1;;;11369:34;;11439:15;;11434:2;11419:18;;11412:43;11486:2;11471:18;;11464:34;;;11534:3;11529:2;11514:18;;11507:31;;;11312:4;;11555:46;;11581:19;;11573:6;11555:46;:::i;:::-;11547:54;11118:489;-1:-1:-1;;;;;;11118:489:1:o;11612:249::-;11681:6;11734:2;11722:9;11713:7;11709:23;11705:32;11702:52;;;11750:1;11747;11740:12;11702:52;11782:9;11776:16;11801:30;11825:5;11801:30;:::i;11866:135::-;11905:3;-1:-1:-1;;11926:17:1;;11923:43;;;11946:18;;:::i;:::-;-1:-1:-1;11993:1:1;11982:13;;11866:135::o;12006:127::-;12067:10;12062:3;12058:20;12055:1;12048:31;12098:4;12095:1;12088:15;12122:4;12119:1;12112:15;12138:120;12178:1;12204;12194:35;;12209:18;;:::i;:::-;-1:-1:-1;12243:9:1;;12138:120::o;12263:125::-;12303:4;12331:1;12328;12325:8;12322:34;;;12336:18;;:::i;:::-;-1:-1:-1;12373:9:1;;12263:125::o;12393:112::-;12425:1;12451;12441:35;;12456:18;;:::i;:::-;-1:-1:-1;12490:9:1;;12393:112::o;12510:127::-;12571:10;12566:3;12562:20;12559:1;12552:31;12602:4;12599:1;12592:15;12626:4;12623:1;12616:15
Swarm Source
ipfs://df351fb233231b03d7eb0632cebb32cdf1c4a3c0f28139886491502ead2ad1af
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.