ETH Price: $2,492.35 (+0.58%)

Token

The Panther NFTs (PNFT)
 

Overview

Max Total Supply

300 PNFT

Holders

71

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
0x3rtn.eth
Balance
1 PNFT
0xae915b0ab0fa713d58c66432f2523efc632c9b34
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PantherNFTs

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-10
*/

// SPDX-License-Identifier: GPL-3.0
// Panther NFTs Smart Contract
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

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
    ) external;

  
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    
    function approve(address to, uint256 tokenId) external;

    
    function getApproved(uint256 tokenId) external view returns (address operator);

   
    function setApprovalForAll(address operator, bool _approved) external;

    
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);


    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

   
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol

 

pragma solidity ^0.8.0;


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

   
    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);
    }

    
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

 

pragma solidity ^0.8.0;


library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

   
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

   
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

   
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

   
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

   
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

   
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

   
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

 

pragma solidity ^0.8.0;



interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

 

pragma solidity ^0.8.0;


interface IERC721Receiver {
    
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // 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_;
    }

   
    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) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        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");
        return owner;
    }

  
    function name() public view virtual override returns (string memory) {
        return _name;
    }

 
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

   
    function tokenURI(uint256 tokenId) public 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) public 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) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _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
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

   
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

   
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // 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 _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;
        }
    }

    
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol

 

pragma solidity ^0.8.0;

 


abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

   
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

   
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

   
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

   
    function owner() public view virtual returns (address) {
        return _owner;
    }

    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

   
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}



pragma solidity ^0.8.0;

//import "@openzeppelin/contracts/utils/Counters.sol";

/// @author 1001.digital
/// @title A token tracker that limits the token supply and increments token IDs on each new mint.
abstract contract WithLimitedSupply {
    using Counters for Counters.Counter;

    // Keeps track of how many we have minted
    Counters.Counter private _tokenCount;

    /// @dev The maximum count of tokens this token tracker will hold.
    uint256 private _totalSupply;

    /// Instanciate the contract
    /// @param totalSupply_ how many tokens this collection should hold
    constructor (uint256 totalSupply_) {
        _totalSupply = totalSupply_;
    }

    /// @dev Get the max Supply
    /// @return the maximum token count
    function totalLimitedSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /// @dev Get the current token count
    /// @return the created token count
    function tokenCount() public view returns (uint256) {
        return _tokenCount.current();
    }

    /// @dev Check whether tokens are still available
    /// @return the available token count
    function availableTokenCount() public view returns (uint256) {
        return totalLimitedSupply() - tokenCount();
    }

    /// @dev Increment the token count and fetch the latest count
    /// @return the next token id
    function nextToken() internal virtual ensureAvailability returns (uint256) {
        uint256 token = _tokenCount.current();

        _tokenCount.increment();

        return token;
    }

    /// @dev Check whether another token is still available
    modifier ensureAvailability() {
        require(availableTokenCount() > 0, "No more tokens available");
        _;
    }

    /// @param amount Check whether number of tokens are still available
    /// @dev Check whether tokens are still available
    modifier ensureAvailabilityFor(uint256 amount) {
        require(availableTokenCount() >= amount, "Requested number of tokens not available");
        _;
    }
}


pragma solidity ^0.8.0;


/// @author 1001.digital
/// @title Randomly assign tokenIDs from a given set of tokens.
abstract contract RandomlyAssigned is WithLimitedSupply {
    // Used for random index assignment
    mapping(uint256 => uint256) private tokenMatrix;

    // The initial token ID
    uint256 private startFrom;

    /// Instanciate the contract
    /// @param _totalSupply how many tokens this collection should hold
    /// @param _startFrom the tokenID with which to start counting
    constructor (uint256 _totalSupply, uint256 _startFrom)
        WithLimitedSupply(_totalSupply)
    {
        startFrom = _startFrom;
    }

    /// Get the next token ID
    /// @dev Randomly gets a new token ID and keeps track of the ones that are still available.
    /// @return the next token ID
    function nextToken() internal override ensureAvailability returns (uint256) {
        uint256 maxIndex = totalLimitedSupply() - tokenCount();
        uint256 random = uint256(keccak256(
            abi.encodePacked(
                msg.sender,
                block.coinbase,
                block.difficulty,
                block.gaslimit,
                block.timestamp
            )
        )) % maxIndex;

        uint256 value = 0;
        if (tokenMatrix[random] == 0) {
            // If this matrix position is empty, set the value to the generated random number.
            value = random;
        } else {
            // Otherwise, use the previously stored number from the matrix.
            value = tokenMatrix[random];
        }

        // If the last available tokenID is still unused...
        if (tokenMatrix[maxIndex - 1] == 0) {
            // ...store that ID in the current matrix position.
            tokenMatrix[random] = maxIndex - 1;
        } else {
            // ...otherwise copy over the stored number to the current matrix position.
            tokenMatrix[random] = tokenMatrix[maxIndex - 1];
        }

        // Increment counts
        super.nextToken();

        return value + startFrom;
    }
}

 
pragma solidity ^0.8.0;

contract PantherNFTs is ERC721Enumerable, Ownable, RandomlyAssigned {
  using Strings for uint256;

  string private baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 0.04 ether;
  uint256 public maxSupply = 6666;
  uint256 public serialMaxSupply = 20;
  uint256 public maxMintAmount = 110;
  bool public paused = false;
  bool public revealed = false;
  
  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  )  ERC721(_name, _symbol)
  RandomlyAssigned(maxSupply,serialMaxSupply+1)
  {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    mint(110); // 40 minted for marketing and other for presalers
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  // public
  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused,"Minting is currently paused");
    require(_mintAmount > 0,"Minimum minting amount is 1");
    require(_mintAmount <= maxMintAmount,"Maximum minting amount is 20");
    require(supply + _mintAmount  <= maxSupply,"minting amount is exceeding total supply");

    if (msg.sender != owner()) {
    require(msg.value >= cost * _mintAmount,"you are sending less ETH than required");
       
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
        if(supply<serialMaxSupply){
             _safeMint(msg.sender, supply + i);
        }else{
            uint256 nextId = nextToken();
             _safeMint(msg.sender, nextId); 
        }
      
    }
  }
   

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
     if(revealed == false) {
        return notRevealedUri;
    }


    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner
  function setCost(uint256 _newCost) public onlyOwner() {
    cost = _newCost;
  }
 

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
  function withdraw() public payable onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }

  
  function reveal() public onlyOwner() {
      revealed = true;
  }

  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }
  
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[],"name":"availableTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"serialMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalLimitedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a090815262000028916010919062000d87565b50668e1bc9bf040000601255611a0a60135560148055606e6015556016805461ffff191690553480156200005b57600080fd5b50604051620039b3380380620039b38339810160408190526200007e9162000f07565b6013546014546200009190600162000fd6565b8186868160009080519060200190620000ac92919062000d87565b508051620000c290600190602084019062000d87565b505050620000df620000d96200011260201b60201c565b62000116565b600c55600e5550620000f18262000168565b620000fc81620001d0565b62000108606e62000230565b5050505062001160565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001b75760405162461bcd60e51b815260206004820181905260248201526000805160206200399383398151915260448201526064015b60405180910390fd5b8051620001cc90600f90602084019062000d87565b5050565b600a546001600160a01b031633146200021b5760405162461bcd60e51b81526020600482018190526024820152600080516020620039938339815191526044820152606401620001ae565b8051620001cc90601190602084019062000d87565b60006200023c60085490565b60165490915060ff1615620002945760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e672069732063757272656e746c792070617573656400000000006044820152606401620001ae565b60008211620002e65760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d206d696e74696e6720616d6f756e74206973203100000000006044820152606401620001ae565b6015548211156200033a5760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d206d696e74696e6720616d6f756e74206973203230000000006044820152606401620001ae565b60135462000349838362000fd6565b1115620003aa5760405162461bcd60e51b815260206004820152602860248201527f6d696e74696e6720616d6f756e7420697320657863656564696e6720746f74616044820152676c20737570706c7960c01b6064820152608401620001ae565b600a546001600160a01b031633146200042d5781601254620003cd919062000ff1565b3410156200042d5760405162461bcd60e51b815260206004820152602660248201527f796f75206172652073656e64696e67206c65737320455448207468616e2072656044820152651c5d5a5c995960d21b6064820152608401620001ae565b60015b828111620004915760145482101562000460576200045a3362000454838562000fd6565b62000496565b6200047c565b60006200046c620004b8565b90506200047a338262000496565b505b80620004888162001013565b91505062000430565b505050565b620001cc8282604051806020016040528060008152506200066e60201b60201c565b600080620004c5620006e1565b11620005145760405162461bcd60e51b815260206004820152601860248201527f4e6f206d6f726520746f6b656e7320617661696c61626c6500000000000000006044820152606401620001ae565b60006200052062000701565b600c546200052f919062001031565b6040516001600160601b031933606090811b8216602084015241901b166034820152446048820152456068820152426088820152909150600090829060a8016040516020818303038152906040528051906020012060001c6200059391906200104b565b6000818152600d602052604081205491925090620005b3575080620005c4565b506000818152600d60205260409020545b600d6000620005d560018662001031565b815260200190815260200160002054600014156200060f57620005fa60018462001031565b6000838152600d602052604090205562000641565b600d60006200062060018662001031565b81526020808201929092526040908101600090812054858252600d90935220555b620006566200071a60201b620014c21760201c565b50600e5462000666908262000fd6565b935050505090565b6200067a8383620007a8565b620006896000848484620008fe565b620004915760405162461bcd60e51b815260206004820152603260248201526000805160206200397383398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401620001ae565b6000620006ed62000701565b600c54620006fc919062001031565b905090565b6000620006fc600b62000a5760201b620015301760201c565b60008062000727620006e1565b11620007765760405162461bcd60e51b815260206004820152601860248201527f4e6f206d6f726520746f6b656e7320617661696c61626c6500000000000000006044820152606401620001ae565b60006200078f600b62000a5760201b620015301760201c565b9050620006fc600b62000a5b60201b620015341760201c565b6001600160a01b038216620008005760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401620001ae565b6000818152600260205260409020546001600160a01b031615620008675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401620001ae565b620008756000838362000a64565b6001600160a01b0382166000908152600360205260408120805460019290620008a090849062000fd6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200091f846001600160a01b031662000b4060201b6200153d1760201c565b1562000a4b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620009599033908990889088906004016200106e565b6020604051808303816000875af192505050801562000997575060408051601f3d908101601f191682019092526200099491810190620010c4565b60015b62000a30573d808015620009c8576040519150601f19603f3d011682016040523d82523d6000602084013e620009cd565b606091505b50805162000a285760405162461bcd60e51b815260206004820152603260248201526000805160206200397383398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401620001ae565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905062000a4f565b5060015b949350505050565b5490565b80546001019055565b62000a7c8383836200049160201b62000a331760201c565b6001600160a01b03831662000ada5762000ad481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b62000b00565b816001600160a01b0316836001600160a01b03161462000b005762000b00838262000b46565b6001600160a01b03821662000b1a57620004918162000bf3565b826001600160a01b0316826001600160a01b031614620004915762000491828262000cad565b3b151590565b6000600162000b608462000cfe60201b62000d861760201c565b62000b6c919062001031565b60008381526007602052604090205490915080821462000bc0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009062000c079060019062001031565b6000838152600960205260408120546008805493945090928490811062000c325762000c32620010f7565b90600052602060002001549050806008838154811062000c565762000c56620010f7565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548062000c915762000c916200110d565b6001900381819060005260206000200160009055905550505050565b600062000cc58362000cfe60201b62000d861760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b03821662000d6b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401620001ae565b506001600160a01b031660009081526003602052604090205490565b82805462000d959062001123565b90600052602060002090601f01602090048101928262000db9576000855562000e04565b82601f1062000dd457805160ff191683800117855562000e04565b8280016001018555821562000e04579182015b8281111562000e0457825182559160200191906001019062000de7565b5062000e1292915062000e16565b5090565b5b8082111562000e12576000815560010162000e17565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000e6057818101518382015260200162000e46565b8381111562000e70576000848401525b50505050565b600082601f83011262000e8857600080fd5b81516001600160401b038082111562000ea55762000ea562000e2d565b604051601f8301601f19908116603f0116810190828211818310171562000ed05762000ed062000e2d565b8160405283815286602085880101111562000eea57600080fd5b62000efd84602083016020890162000e43565b9695505050505050565b6000806000806080858703121562000f1e57600080fd5b84516001600160401b038082111562000f3657600080fd5b62000f448883890162000e76565b9550602087015191508082111562000f5b57600080fd5b62000f698883890162000e76565b9450604087015191508082111562000f8057600080fd5b62000f8e8883890162000e76565b9350606087015191508082111562000fa557600080fd5b5062000fb48782880162000e76565b91505092959194509250565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000fec5762000fec62000fc0565b500190565b60008160001904831182151516156200100e576200100e62000fc0565b500290565b60006000198214156200102a576200102a62000fc0565b5060010190565b60008282101562001046576200104662000fc0565b500390565b6000826200106957634e487b7160e01b600052601260045260246000fd5b500690565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620010ad8160a085016020870162000e43565b601f01601f19169190910160a00195945050505050565b600060208284031215620010d757600080fd5b81516001600160e01b031981168114620010f057600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600181811c908216806200113857607f821691505b602082108114156200115a57634e487b7160e01b600052602260045260246000fd5b50919050565b61280380620011706000396000f3fe60806040526004361061023b5760003560e01c80635c975abb1161012e578063a475b5dd116100ab578063da3ef23f1161006f578063da3ef23f1461063e578063e14ca3531461065e578063e985e9c514610673578063f2c4ce1e146106bc578063f2fde38b146106dc57600080fd5b8063a475b5dd146105be578063b88d4fde146105d3578063c6682862146105f3578063c87b56dd14610608578063d5abeb011461062857600080fd5b80638da5cb5b116100f25780638da5cb5b1461054357806395d89b41146105615780639f181b5e14610576578063a0712d681461058b578063a22cb4651461059e57600080fd5b80635c975abb146104b45780636352211e146104ce57806370a08231146104ee578063715018a61461050e5780637f00c7a61461052357600080fd5b80632ca2cfbb116101bc57806344a0d68a1161018057806344a0d68a146104205780634f6ccce714610440578063518302271461046057806352010ec91461047f57806355f804b31461049457600080fd5b80632ca2cfbb146103955780632f745c59146103ab5780633ccfd60b146103cb57806342842e0e146103d3578063438b6300146103f357600080fd5b8063095ea7b311610203578063095ea7b31461030657806313faede61461032657806318160ddd1461034a578063239c70ae1461035f57806323b872dd1461037557600080fd5b806301ffc9a71461024057806302329a291461027557806306fdde0314610297578063081812fc146102b9578063081c8c44146102f1575b600080fd5b34801561024c57600080fd5b5061026061025b366004612158565b6106fc565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061029561029036600461218a565b610727565b005b3480156102a357600080fd5b506102ac61076d565b60405161026c91906121fd565b3480156102c557600080fd5b506102d96102d4366004612210565b6107ff565b6040516001600160a01b03909116815260200161026c565b3480156102fd57600080fd5b506102ac610894565b34801561031257600080fd5b50610295610321366004612240565b610922565b34801561033257600080fd5b5061033c60125481565b60405190815260200161026c565b34801561035657600080fd5b5060085461033c565b34801561036b57600080fd5b5061033c60155481565b34801561038157600080fd5b5061029561039036600461226a565b610a38565b3480156103a157600080fd5b5061033c60145481565b3480156103b757600080fd5b5061033c6103c6366004612240565b610a69565b610295610aff565b3480156103df57600080fd5b506102956103ee36600461226a565b610b4f565b3480156103ff57600080fd5b5061041361040e3660046122a6565b610b6a565b60405161026c91906122c1565b34801561042c57600080fd5b5061029561043b366004612210565b610c0c565b34801561044c57600080fd5b5061033c61045b366004612210565b610c3b565b34801561046c57600080fd5b5060165461026090610100900460ff1681565b34801561048b57600080fd5b50600c5461033c565b3480156104a057600080fd5b506102956104af366004612391565b610cce565b3480156104c057600080fd5b506016546102609060ff1681565b3480156104da57600080fd5b506102d96104e9366004612210565b610d0f565b3480156104fa57600080fd5b5061033c6105093660046122a6565b610d86565b34801561051a57600080fd5b50610295610e0d565b34801561052f57600080fd5b5061029561053e366004612210565b610e41565b34801561054f57600080fd5b50600a546001600160a01b03166102d9565b34801561056d57600080fd5b506102ac610e70565b34801561058257600080fd5b5061033c610e7f565b610295610599366004612210565b610e8f565b3480156105aa57600080fd5b506102956105b93660046123da565b6110d2565b3480156105ca57600080fd5b50610295611197565b3480156105df57600080fd5b506102956105ee36600461240d565b6111d2565b3480156105ff57600080fd5b506102ac61120a565b34801561061457600080fd5b506102ac610623366004612210565b611217565b34801561063457600080fd5b5061033c60135481565b34801561064a57600080fd5b50610295610659366004612391565b611396565b34801561066a57600080fd5b5061033c6113d3565b34801561067f57600080fd5b5061026061068e366004612489565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106c857600080fd5b506102956106d7366004612391565b6113ea565b3480156106e857600080fd5b506102956106f73660046122a6565b611427565b60006001600160e01b0319821663780e9d6360e01b1480610721575061072182611543565b92915050565b600a546001600160a01b0316331461075a5760405162461bcd60e51b8152600401610751906124b3565b60405180910390fd5b6016805460ff1916911515919091179055565b60606000805461077c906124e8565b80601f01602080910402602001604051908101604052809291908181526020018280546107a8906124e8565b80156107f55780601f106107ca576101008083540402835291602001916107f5565b820191906000526020600020905b8154815290600101906020018083116107d857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610751565b506000908152600460205260409020546001600160a01b031690565b601180546108a1906124e8565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd906124e8565b801561091a5780601f106108ef5761010080835404028352916020019161091a565b820191906000526020600020905b8154815290600101906020018083116108fd57829003601f168201915b505050505081565b600061092d82610d0f565b9050806001600160a01b0316836001600160a01b0316141561099b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610751565b336001600160a01b03821614806109b757506109b7813361068e565b610a295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610751565b610a338383611593565b505050565b610a423382611601565b610a5e5760405162461bcd60e51b815260040161075190612523565b610a338383836116f8565b6000610a7483610d86565b8210610ad65760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610751565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610b295760405162461bcd60e51b8152600401610751906124b3565b60405133904780156108fc02916000818181858888f19350505050610b4d57600080fd5b565b610a33838383604051806020016040528060008152506111d2565b60606000610b7783610d86565b905060008167ffffffffffffffff811115610b9457610b94612305565b604051908082528060200260200182016040528015610bbd578160200160208202803683370190505b50905060005b82811015610c0457610bd58582610a69565b828281518110610be757610be7612574565b602090810291909101015280610bfc816125a0565b915050610bc3565b509392505050565b600a546001600160a01b03163314610c365760405162461bcd60e51b8152600401610751906124b3565b601255565b6000610c4660085490565b8210610ca95760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610751565b60088281548110610cbc57610cbc612574565b90600052602060002001549050919050565b600a546001600160a01b03163314610cf85760405162461bcd60e51b8152600401610751906124b3565b8051610d0b90600f9060208401906120a9565b5050565b6000818152600260205260408120546001600160a01b0316806107215760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610751565b60006001600160a01b038216610df15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610751565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610e375760405162461bcd60e51b8152600401610751906124b3565b610b4d60006118a3565b600a546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610751906124b3565b601555565b60606001805461077c906124e8565b6000610e8a600b5490565b905090565b6000610e9a60085490565b60165490915060ff1615610ef05760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e672069732063757272656e746c792070617573656400000000006044820152606401610751565b60008211610f405760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d206d696e74696e6720616d6f756e74206973203100000000006044820152606401610751565b601554821115610f925760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d206d696e74696e6720616d6f756e74206973203230000000006044820152606401610751565b601354610f9f83836125bb565b1115610ffe5760405162461bcd60e51b815260206004820152602860248201527f6d696e74696e6720616d6f756e7420697320657863656564696e6720746f74616044820152676c20737570706c7960c01b6064820152608401610751565b600a546001600160a01b0316331461107c578160125461101e91906125d3565b34101561107c5760405162461bcd60e51b815260206004820152602660248201527f796f75206172652073656e64696e67206c65737320455448207468616e2072656044820152651c5d5a5c995960d21b6064820152608401610751565b60015b828111610a33576014548210156110a8576110a33361109e83856125bb565b6118f5565b6110c0565b60006110b261190f565b90506110be33826118f5565b505b806110ca816125a0565b91505061107f565b6001600160a01b03821633141561112b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610751565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146111c15760405162461bcd60e51b8152600401610751906124b3565b6016805461ff001916610100179055565b6111dc3383611601565b6111f85760405162461bcd60e51b815260040161075190612523565b61120484848484611aa2565b50505050565b601080546108a1906124e8565b6000818152600260205260409020546060906001600160a01b03166112965760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610751565b601654610100900460ff1661133757601180546112b2906124e8565b80601f01602080910402602001604051908101604052809291908181526020018280546112de906124e8565b801561132b5780601f106113005761010080835404028352916020019161132b565b820191906000526020600020905b81548152906001019060200180831161130e57829003601f168201915b50505050509050919050565b6000611341611ad5565b90506000815111611361576040518060200160405280600081525061138f565b8061136b84611ae4565b601060405160200161137f939291906125f2565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146113c05760405162461bcd60e51b8152600401610751906124b3565b8051610d0b9060109060208401906120a9565b60006113dd610e7f565b600c54610e8a91906126b6565b600a546001600160a01b031633146114145760405162461bcd60e51b8152600401610751906124b3565b8051610d0b9060119060208401906120a9565b600a546001600160a01b031633146114515760405162461bcd60e51b8152600401610751906124b3565b6001600160a01b0381166114b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610751565b6114bf816118a3565b50565b6000806114cd6113d3565b116115155760405162461bcd60e51b81526020600482015260186024820152774e6f206d6f726520746f6b656e7320617661696c61626c6560401b6044820152606401610751565b6000611520600b5490565b9050610e8a600b80546001019055565b5490565b80546001019055565b3b151590565b60006001600160e01b031982166380ac58cd60e01b148061157457506001600160e01b03198216635b5e139f60e01b145b8061072157506301ffc9a760e01b6001600160e01b0319831614610721565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115c882610d0f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661167a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610751565b600061168583610d0f565b9050806001600160a01b0316846001600160a01b031614806116c05750836001600160a01b03166116b5846107ff565b6001600160a01b0316145b806116f057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661170b82610d0f565b6001600160a01b0316146117735760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610751565b6001600160a01b0382166117d55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610751565b6117e0838383611be2565b6117eb600082611593565b6001600160a01b03831660009081526003602052604081208054600192906118149084906126b6565b90915550506001600160a01b03821660009081526003602052604081208054600192906118429084906125bb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d0b828260405180602001604052806000815250611c9a565b60008061191a6113d3565b116119625760405162461bcd60e51b81526020600482015260186024820152774e6f206d6f726520746f6b656e7320617661696c61626c6560401b6044820152606401610751565b600061196c610e7f565b600c5461197991906126b6565b6040516bffffffffffffffffffffffff1933606090811b8216602084015241901b166034820152446048820152456068820152426088820152909150600090829060a8016040516020818303038152906040528051906020012060001c6119e091906126e3565b6000818152600d6020526040812054919250906119fe575080611a0f565b506000818152600d60205260409020545b600d6000611a1e6001866126b6565b81526020019081526020016000205460001415611a5457611a406001846126b6565b6000838152600d6020526040902055611a84565b600d6000611a636001866126b6565b81526020808201929092526040908101600090812054858252600d90935220555b611a8c6114c2565b50600e54611a9a90826125bb565b935050505090565b611aad8484846116f8565b611ab984848484611ccd565b6112045760405162461bcd60e51b8152600401610751906126f7565b6060600f805461077c906124e8565b606081611b085750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b325780611b1c816125a0565b9150611b2b9050600a83612749565b9150611b0c565b60008167ffffffffffffffff811115611b4d57611b4d612305565b6040519080825280601f01601f191660200182016040528015611b77576020820181803683370190505b5090505b84156116f057611b8c6001836126b6565b9150611b99600a866126e3565b611ba49060306125bb565b60f81b818381518110611bb957611bb9612574565b60200101906001600160f81b031916908160001a905350611bdb600a86612749565b9450611b7b565b6001600160a01b038316611c3d57611c3881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c60565b816001600160a01b0316836001600160a01b031614611c6057611c608382611dcb565b6001600160a01b038216611c7757610a3381611e68565b826001600160a01b0316826001600160a01b031614610a3357610a338282611f17565b611ca48383611f5b565b611cb16000848484611ccd565b610a335760405162461bcd60e51b8152600401610751906126f7565b60006001600160a01b0384163b15611dc057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d1190339089908890889060040161275d565b6020604051808303816000875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d499181019061279a565b60015b611da6573d808015611d7a576040519150601f19603f3d011682016040523d82523d6000602084013e611d7f565b606091505b508051611d9e5760405162461bcd60e51b8152600401610751906126f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116f0565b506001949350505050565b60006001611dd884610d86565b611de291906126b6565b600083815260076020526040902054909150808214611e35576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611e7a906001906126b6565b60008381526009602052604081205460088054939450909284908110611ea257611ea2612574565b906000526020600020015490508060088381548110611ec357611ec3612574565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611efb57611efb6127b7565b6001900381819060005260206000200160009055905550505050565b6000611f2283610d86565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611fb15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610751565b6000818152600260205260409020546001600160a01b0316156120165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610751565b61202260008383611be2565b6001600160a01b038216600090815260036020526040812080546001929061204b9084906125bb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546120b5906124e8565b90600052602060002090601f0160209004810192826120d7576000855561211d565b82601f106120f057805160ff191683800117855561211d565b8280016001018555821561211d579182015b8281111561211d578251825591602001919060010190612102565b5061212992915061212d565b5090565b5b80821115612129576000815560010161212e565b6001600160e01b0319811681146114bf57600080fd5b60006020828403121561216a57600080fd5b813561138f81612142565b8035801515811461218557600080fd5b919050565b60006020828403121561219c57600080fd5b61138f82612175565b60005b838110156121c05781810151838201526020016121a8565b838111156112045750506000910152565b600081518084526121e98160208601602086016121a5565b601f01601f19169290920160200192915050565b60208152600061138f60208301846121d1565b60006020828403121561222257600080fd5b5035919050565b80356001600160a01b038116811461218557600080fd5b6000806040838503121561225357600080fd5b61225c83612229565b946020939093013593505050565b60008060006060848603121561227f57600080fd5b61228884612229565b925061229660208501612229565b9150604084013590509250925092565b6000602082840312156122b857600080fd5b61138f82612229565b6020808252825182820181905260009190848201906040850190845b818110156122f9578351835292840192918401916001016122dd565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561233657612336612305565b604051601f8501601f19908116603f0116810190828211818310171561235e5761235e612305565b8160405280935085815286868601111561237757600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156123a357600080fd5b813567ffffffffffffffff8111156123ba57600080fd5b8201601f810184136123cb57600080fd5b6116f08482356020840161231b565b600080604083850312156123ed57600080fd5b6123f683612229565b915061240460208401612175565b90509250929050565b6000806000806080858703121561242357600080fd5b61242c85612229565b935061243a60208601612229565b925060408501359150606085013567ffffffffffffffff81111561245d57600080fd5b8501601f8101871361246e57600080fd5b61247d8782356020840161231b565b91505092959194509250565b6000806040838503121561249c57600080fd5b6124a583612229565b915061240460208401612229565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124fc57607f821691505b6020821081141561251d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156125b4576125b461258a565b5060010190565b600082198211156125ce576125ce61258a565b500190565b60008160001904831182151516156125ed576125ed61258a565b500290565b6000845160206126058285838a016121a5565b8551918401916126188184848a016121a5565b8554920191600090600181811c908083168061263557607f831692505b85831081141561265357634e487b7160e01b85526022600452602485fd5b8080156126675760018114612678576126a5565b60ff198516885283880195506126a5565b60008b81526020902060005b8581101561269d5781548a820152908401908801612684565b505083880195505b50939b9a5050505050505050505050565b6000828210156126c8576126c861258a565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826126f2576126f26126cd565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082612758576127586126cd565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612790908301846121d1565b9695505050505050565b6000602082840312156127ac57600080fd5b815161138f81612142565b634e487b7160e01b600052603160045260246000fdfea264697066735822122081221828e689bdbe63629db071e1e930ef357980a56de8a89a0e0cd15d2e54cd64736f6c634300080a00334552433732313a207472616e7366657220746f206e6f6e2045524337323152654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000105468652050616e74686572204e465473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d644d4c514d3847624c7567366a4c74636e5978356e377551454a70355763394a6f47457448596b50595753532f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d595a43516e7a7241414272724a69574e647a61644859326e5a7871744a6a534134455a316a6d5171444d44592f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80635c975abb1161012e578063a475b5dd116100ab578063da3ef23f1161006f578063da3ef23f1461063e578063e14ca3531461065e578063e985e9c514610673578063f2c4ce1e146106bc578063f2fde38b146106dc57600080fd5b8063a475b5dd146105be578063b88d4fde146105d3578063c6682862146105f3578063c87b56dd14610608578063d5abeb011461062857600080fd5b80638da5cb5b116100f25780638da5cb5b1461054357806395d89b41146105615780639f181b5e14610576578063a0712d681461058b578063a22cb4651461059e57600080fd5b80635c975abb146104b45780636352211e146104ce57806370a08231146104ee578063715018a61461050e5780637f00c7a61461052357600080fd5b80632ca2cfbb116101bc57806344a0d68a1161018057806344a0d68a146104205780634f6ccce714610440578063518302271461046057806352010ec91461047f57806355f804b31461049457600080fd5b80632ca2cfbb146103955780632f745c59146103ab5780633ccfd60b146103cb57806342842e0e146103d3578063438b6300146103f357600080fd5b8063095ea7b311610203578063095ea7b31461030657806313faede61461032657806318160ddd1461034a578063239c70ae1461035f57806323b872dd1461037557600080fd5b806301ffc9a71461024057806302329a291461027557806306fdde0314610297578063081812fc146102b9578063081c8c44146102f1575b600080fd5b34801561024c57600080fd5b5061026061025b366004612158565b6106fc565b60405190151581526020015b60405180910390f35b34801561028157600080fd5b5061029561029036600461218a565b610727565b005b3480156102a357600080fd5b506102ac61076d565b60405161026c91906121fd565b3480156102c557600080fd5b506102d96102d4366004612210565b6107ff565b6040516001600160a01b03909116815260200161026c565b3480156102fd57600080fd5b506102ac610894565b34801561031257600080fd5b50610295610321366004612240565b610922565b34801561033257600080fd5b5061033c60125481565b60405190815260200161026c565b34801561035657600080fd5b5060085461033c565b34801561036b57600080fd5b5061033c60155481565b34801561038157600080fd5b5061029561039036600461226a565b610a38565b3480156103a157600080fd5b5061033c60145481565b3480156103b757600080fd5b5061033c6103c6366004612240565b610a69565b610295610aff565b3480156103df57600080fd5b506102956103ee36600461226a565b610b4f565b3480156103ff57600080fd5b5061041361040e3660046122a6565b610b6a565b60405161026c91906122c1565b34801561042c57600080fd5b5061029561043b366004612210565b610c0c565b34801561044c57600080fd5b5061033c61045b366004612210565b610c3b565b34801561046c57600080fd5b5060165461026090610100900460ff1681565b34801561048b57600080fd5b50600c5461033c565b3480156104a057600080fd5b506102956104af366004612391565b610cce565b3480156104c057600080fd5b506016546102609060ff1681565b3480156104da57600080fd5b506102d96104e9366004612210565b610d0f565b3480156104fa57600080fd5b5061033c6105093660046122a6565b610d86565b34801561051a57600080fd5b50610295610e0d565b34801561052f57600080fd5b5061029561053e366004612210565b610e41565b34801561054f57600080fd5b50600a546001600160a01b03166102d9565b34801561056d57600080fd5b506102ac610e70565b34801561058257600080fd5b5061033c610e7f565b610295610599366004612210565b610e8f565b3480156105aa57600080fd5b506102956105b93660046123da565b6110d2565b3480156105ca57600080fd5b50610295611197565b3480156105df57600080fd5b506102956105ee36600461240d565b6111d2565b3480156105ff57600080fd5b506102ac61120a565b34801561061457600080fd5b506102ac610623366004612210565b611217565b34801561063457600080fd5b5061033c60135481565b34801561064a57600080fd5b50610295610659366004612391565b611396565b34801561066a57600080fd5b5061033c6113d3565b34801561067f57600080fd5b5061026061068e366004612489565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106c857600080fd5b506102956106d7366004612391565b6113ea565b3480156106e857600080fd5b506102956106f73660046122a6565b611427565b60006001600160e01b0319821663780e9d6360e01b1480610721575061072182611543565b92915050565b600a546001600160a01b0316331461075a5760405162461bcd60e51b8152600401610751906124b3565b60405180910390fd5b6016805460ff1916911515919091179055565b60606000805461077c906124e8565b80601f01602080910402602001604051908101604052809291908181526020018280546107a8906124e8565b80156107f55780601f106107ca576101008083540402835291602001916107f5565b820191906000526020600020905b8154815290600101906020018083116107d857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610751565b506000908152600460205260409020546001600160a01b031690565b601180546108a1906124e8565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd906124e8565b801561091a5780601f106108ef5761010080835404028352916020019161091a565b820191906000526020600020905b8154815290600101906020018083116108fd57829003601f168201915b505050505081565b600061092d82610d0f565b9050806001600160a01b0316836001600160a01b0316141561099b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610751565b336001600160a01b03821614806109b757506109b7813361068e565b610a295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610751565b610a338383611593565b505050565b610a423382611601565b610a5e5760405162461bcd60e51b815260040161075190612523565b610a338383836116f8565b6000610a7483610d86565b8210610ad65760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610751565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610b295760405162461bcd60e51b8152600401610751906124b3565b60405133904780156108fc02916000818181858888f19350505050610b4d57600080fd5b565b610a33838383604051806020016040528060008152506111d2565b60606000610b7783610d86565b905060008167ffffffffffffffff811115610b9457610b94612305565b604051908082528060200260200182016040528015610bbd578160200160208202803683370190505b50905060005b82811015610c0457610bd58582610a69565b828281518110610be757610be7612574565b602090810291909101015280610bfc816125a0565b915050610bc3565b509392505050565b600a546001600160a01b03163314610c365760405162461bcd60e51b8152600401610751906124b3565b601255565b6000610c4660085490565b8210610ca95760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610751565b60088281548110610cbc57610cbc612574565b90600052602060002001549050919050565b600a546001600160a01b03163314610cf85760405162461bcd60e51b8152600401610751906124b3565b8051610d0b90600f9060208401906120a9565b5050565b6000818152600260205260408120546001600160a01b0316806107215760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610751565b60006001600160a01b038216610df15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610751565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610e375760405162461bcd60e51b8152600401610751906124b3565b610b4d60006118a3565b600a546001600160a01b03163314610e6b5760405162461bcd60e51b8152600401610751906124b3565b601555565b60606001805461077c906124e8565b6000610e8a600b5490565b905090565b6000610e9a60085490565b60165490915060ff1615610ef05760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e672069732063757272656e746c792070617573656400000000006044820152606401610751565b60008211610f405760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d756d206d696e74696e6720616d6f756e74206973203100000000006044820152606401610751565b601554821115610f925760405162461bcd60e51b815260206004820152601c60248201527f4d6178696d756d206d696e74696e6720616d6f756e74206973203230000000006044820152606401610751565b601354610f9f83836125bb565b1115610ffe5760405162461bcd60e51b815260206004820152602860248201527f6d696e74696e6720616d6f756e7420697320657863656564696e6720746f74616044820152676c20737570706c7960c01b6064820152608401610751565b600a546001600160a01b0316331461107c578160125461101e91906125d3565b34101561107c5760405162461bcd60e51b815260206004820152602660248201527f796f75206172652073656e64696e67206c65737320455448207468616e2072656044820152651c5d5a5c995960d21b6064820152608401610751565b60015b828111610a33576014548210156110a8576110a33361109e83856125bb565b6118f5565b6110c0565b60006110b261190f565b90506110be33826118f5565b505b806110ca816125a0565b91505061107f565b6001600160a01b03821633141561112b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610751565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146111c15760405162461bcd60e51b8152600401610751906124b3565b6016805461ff001916610100179055565b6111dc3383611601565b6111f85760405162461bcd60e51b815260040161075190612523565b61120484848484611aa2565b50505050565b601080546108a1906124e8565b6000818152600260205260409020546060906001600160a01b03166112965760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610751565b601654610100900460ff1661133757601180546112b2906124e8565b80601f01602080910402602001604051908101604052809291908181526020018280546112de906124e8565b801561132b5780601f106113005761010080835404028352916020019161132b565b820191906000526020600020905b81548152906001019060200180831161130e57829003601f168201915b50505050509050919050565b6000611341611ad5565b90506000815111611361576040518060200160405280600081525061138f565b8061136b84611ae4565b601060405160200161137f939291906125f2565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146113c05760405162461bcd60e51b8152600401610751906124b3565b8051610d0b9060109060208401906120a9565b60006113dd610e7f565b600c54610e8a91906126b6565b600a546001600160a01b031633146114145760405162461bcd60e51b8152600401610751906124b3565b8051610d0b9060119060208401906120a9565b600a546001600160a01b031633146114515760405162461bcd60e51b8152600401610751906124b3565b6001600160a01b0381166114b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610751565b6114bf816118a3565b50565b6000806114cd6113d3565b116115155760405162461bcd60e51b81526020600482015260186024820152774e6f206d6f726520746f6b656e7320617661696c61626c6560401b6044820152606401610751565b6000611520600b5490565b9050610e8a600b80546001019055565b5490565b80546001019055565b3b151590565b60006001600160e01b031982166380ac58cd60e01b148061157457506001600160e01b03198216635b5e139f60e01b145b8061072157506301ffc9a760e01b6001600160e01b0319831614610721565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115c882610d0f565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661167a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610751565b600061168583610d0f565b9050806001600160a01b0316846001600160a01b031614806116c05750836001600160a01b03166116b5846107ff565b6001600160a01b0316145b806116f057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661170b82610d0f565b6001600160a01b0316146117735760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610751565b6001600160a01b0382166117d55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610751565b6117e0838383611be2565b6117eb600082611593565b6001600160a01b03831660009081526003602052604081208054600192906118149084906126b6565b90915550506001600160a01b03821660009081526003602052604081208054600192906118429084906125bb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d0b828260405180602001604052806000815250611c9a565b60008061191a6113d3565b116119625760405162461bcd60e51b81526020600482015260186024820152774e6f206d6f726520746f6b656e7320617661696c61626c6560401b6044820152606401610751565b600061196c610e7f565b600c5461197991906126b6565b6040516bffffffffffffffffffffffff1933606090811b8216602084015241901b166034820152446048820152456068820152426088820152909150600090829060a8016040516020818303038152906040528051906020012060001c6119e091906126e3565b6000818152600d6020526040812054919250906119fe575080611a0f565b506000818152600d60205260409020545b600d6000611a1e6001866126b6565b81526020019081526020016000205460001415611a5457611a406001846126b6565b6000838152600d6020526040902055611a84565b600d6000611a636001866126b6565b81526020808201929092526040908101600090812054858252600d90935220555b611a8c6114c2565b50600e54611a9a90826125bb565b935050505090565b611aad8484846116f8565b611ab984848484611ccd565b6112045760405162461bcd60e51b8152600401610751906126f7565b6060600f805461077c906124e8565b606081611b085750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b325780611b1c816125a0565b9150611b2b9050600a83612749565b9150611b0c565b60008167ffffffffffffffff811115611b4d57611b4d612305565b6040519080825280601f01601f191660200182016040528015611b77576020820181803683370190505b5090505b84156116f057611b8c6001836126b6565b9150611b99600a866126e3565b611ba49060306125bb565b60f81b818381518110611bb957611bb9612574565b60200101906001600160f81b031916908160001a905350611bdb600a86612749565b9450611b7b565b6001600160a01b038316611c3d57611c3881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c60565b816001600160a01b0316836001600160a01b031614611c6057611c608382611dcb565b6001600160a01b038216611c7757610a3381611e68565b826001600160a01b0316826001600160a01b031614610a3357610a338282611f17565b611ca48383611f5b565b611cb16000848484611ccd565b610a335760405162461bcd60e51b8152600401610751906126f7565b60006001600160a01b0384163b15611dc057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d1190339089908890889060040161275d565b6020604051808303816000875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d499181019061279a565b60015b611da6573d808015611d7a576040519150601f19603f3d011682016040523d82523d6000602084013e611d7f565b606091505b508051611d9e5760405162461bcd60e51b8152600401610751906126f7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506116f0565b506001949350505050565b60006001611dd884610d86565b611de291906126b6565b600083815260076020526040902054909150808214611e35576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611e7a906001906126b6565b60008381526009602052604081205460088054939450909284908110611ea257611ea2612574565b906000526020600020015490508060088381548110611ec357611ec3612574565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611efb57611efb6127b7565b6001900381819060005260206000200160009055905550505050565b6000611f2283610d86565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611fb15760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610751565b6000818152600260205260409020546001600160a01b0316156120165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610751565b61202260008383611be2565b6001600160a01b038216600090815260036020526040812080546001929061204b9084906125bb565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546120b5906124e8565b90600052602060002090601f0160209004810192826120d7576000855561211d565b82601f106120f057805160ff191683800117855561211d565b8280016001018555821561211d579182015b8281111561211d578251825591602001919060010190612102565b5061212992915061212d565b5090565b5b80821115612129576000815560010161212e565b6001600160e01b0319811681146114bf57600080fd5b60006020828403121561216a57600080fd5b813561138f81612142565b8035801515811461218557600080fd5b919050565b60006020828403121561219c57600080fd5b61138f82612175565b60005b838110156121c05781810151838201526020016121a8565b838111156112045750506000910152565b600081518084526121e98160208601602086016121a5565b601f01601f19169290920160200192915050565b60208152600061138f60208301846121d1565b60006020828403121561222257600080fd5b5035919050565b80356001600160a01b038116811461218557600080fd5b6000806040838503121561225357600080fd5b61225c83612229565b946020939093013593505050565b60008060006060848603121561227f57600080fd5b61228884612229565b925061229660208501612229565b9150604084013590509250925092565b6000602082840312156122b857600080fd5b61138f82612229565b6020808252825182820181905260009190848201906040850190845b818110156122f9578351835292840192918401916001016122dd565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561233657612336612305565b604051601f8501601f19908116603f0116810190828211818310171561235e5761235e612305565b8160405280935085815286868601111561237757600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156123a357600080fd5b813567ffffffffffffffff8111156123ba57600080fd5b8201601f810184136123cb57600080fd5b6116f08482356020840161231b565b600080604083850312156123ed57600080fd5b6123f683612229565b915061240460208401612175565b90509250929050565b6000806000806080858703121561242357600080fd5b61242c85612229565b935061243a60208601612229565b925060408501359150606085013567ffffffffffffffff81111561245d57600080fd5b8501601f8101871361246e57600080fd5b61247d8782356020840161231b565b91505092959194509250565b6000806040838503121561249c57600080fd5b6124a583612229565b915061240460208401612229565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124fc57607f821691505b6020821081141561251d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156125b4576125b461258a565b5060010190565b600082198211156125ce576125ce61258a565b500190565b60008160001904831182151516156125ed576125ed61258a565b500290565b6000845160206126058285838a016121a5565b8551918401916126188184848a016121a5565b8554920191600090600181811c908083168061263557607f831692505b85831081141561265357634e487b7160e01b85526022600452602485fd5b8080156126675760018114612678576126a5565b60ff198516885283880195506126a5565b60008b81526020902060005b8581101561269d5781548a820152908401908801612684565b505083880195505b50939b9a5050505050505050505050565b6000828210156126c8576126c861258a565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826126f2576126f26126cd565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082612758576127586126cd565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612790908301846121d1565b9695505050505050565b6000602082840312156127ac57600080fd5b815161138f81612142565b634e487b7160e01b600052603160045260246000fdfea264697066735822122081221828e689bdbe63629db071e1e930ef357980a56de8a89a0e0cd15d2e54cd64736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000105468652050616e74686572204e465473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004504e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d644d4c514d3847624c7567366a4c74636e5978356e377551454a70355763394a6f47457448596b50595753532f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d595a43516e7a7241414272724a69574e647a61644859326e5a7871744a6a534134455a316a6d5171444d44592f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): The Panther NFTs
Arg [1] : _symbol (string): PNFT
Arg [2] : _initBaseURI (string): ipfs://QmdMLQM8GbLug6jLtcnYx5n7uQEJp5Wc9JoGEtHYkPYWSS/
Arg [3] : _initNotRevealedUri (string): ipfs://QmYZCQnzrAABrrJiWNdzadHY2nZxqtJjSA4EZ1jmQqDMDY/hidden.json

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [5] : 5468652050616e74686572204e46547300000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 504e465400000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d644d4c514d3847624c7567366a4c74636e5978356e3775
Arg [10] : 51454a70355763394a6f47457448596b50595753532f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d595a43516e7a7241414272724a69574e647a6164485932
Arg [13] : 6e5a7871744a6a534134455a316a6d5171444d44592f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28791:3458:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18086:224;;;;;;;;;;-1:-1:-1;18086:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;18086:224:0;;;;;;;;31841:73;;;;;;;;;;-1:-1:-1;31841:73:0;;;;;:::i;:::-;;:::i;:::-;;10926:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12032:221::-;;;;;;;;;;-1:-1:-1;12032:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:32:1;;;2024:51;;2012:2;1997:18;12032:221:0;1878:203:1;28965:28:0;;;;;;;;;;;;;:::i;11609:411::-;;;;;;;;;;-1:-1:-1;11609:411:0;;;;;:::i;:::-;;:::i;28998:32::-;;;;;;;;;;;;;;;;;;;2669:25:1;;;2657:2;2642:18;28998:32:0;2523:177:1;18593:113:0;;;;;;;;;;-1:-1:-1;18681:10:0;:17;18593:113;;29111:34;;;;;;;;;;;;;;;;12743:339;;;;;;;;;;-1:-1:-1;12743:339:0;;;;;:::i;:::-;;:::i;29071:35::-;;;;;;;;;;;;;;;;18324:256;;;;;;;;;;-1:-1:-1;18324:256:0;;;;;:::i;:::-;;:::i;31921:114::-;;;:::i;13094:185::-;;;;;;;;;;-1:-1:-1;13094:185:0;;;;;:::i;:::-;;:::i;30524:348::-;;;;;;;;;;-1:-1:-1;30524:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31394:82::-;;;;;;;;;;-1:-1:-1;31394:82:0;;;;;:::i;:::-;;:::i;18720:233::-;;;;;;;;;;-1:-1:-1;18720:233:0;;;;;:::i;:::-;;:::i;29181:28::-;;;;;;;;;;-1:-1:-1;29181:28:0;;;;;;;;;;;25334:98;;;;;;;;;;-1:-1:-1;25412:12:0;;25334:98;;31609;;;;;;;;;;-1:-1:-1;31609:98:0;;;;;:::i;:::-;;:::i;29150:26::-;;;;;;;;;;-1:-1:-1;29150:26:0;;;;;;;;10675:239;;;;;;;;;;-1:-1:-1;10675:239:0;;;;;:::i;:::-;;:::i;10454:208::-;;;;;;;;;;-1:-1:-1;10454:208:0;;;;;:::i;:::-;;:::i;22720:94::-;;;;;;;;;;;;;:::i;31485:118::-;;;;;;;;;;-1:-1:-1;31485:118:0;;;;;:::i;:::-;;:::i;22486:87::-;;;;;;;;;;-1:-1:-1;22559:6:0;;-1:-1:-1;;;;;22559:6:0;22486:87;;11037:104;;;;;;;;;;;;;:::i;25523:99::-;;;;;;;;;;;;;:::i;29729:784::-;;;;;;:::i;:::-;;:::i;12264:295::-;;;;;;;;;;-1:-1:-1;12264:295:0;;;;;:::i;:::-;;:::i;32045:67::-;;;;;;;;;;;;;:::i;13291:328::-;;;;;;;;;;-1:-1:-1;13291:328:0;;;;;:::i;:::-;;:::i;28923:37::-;;;;;;;;;;;;;:::i;30878:494::-;;;;;;;;;;-1:-1:-1;30878:494:0;;;;;:::i;:::-;;:::i;29035:31::-;;;;;;;;;;;;;;;;31713:122;;;;;;;;;;-1:-1:-1;31713:122:0;;;;;:::i;:::-;;:::i;25728:::-;;;;;;;;;;;;;:::i;12571:164::-;;;;;;;;;;-1:-1:-1;12571:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12692:25:0;;;12668:4;12692:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12571:164;32118:120;;;;;;;;;;-1:-1:-1;32118:120:0;;;;;:::i;:::-;;:::i;22828:192::-;;;;;;;;;;-1:-1:-1;22828:192:0;;;;;:::i;:::-;;:::i;18086:224::-;18188:4;-1:-1:-1;;;;;;18212:50:0;;-1:-1:-1;;;18212:50:0;;:90;;;18266:36;18290:11;18266:23;:36::i;:::-;18205:97;18086:224;-1:-1:-1;;18086:224:0:o;31841:73::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;;;;;;;;;31893:6:::1;:15:::0;;-1:-1:-1;;31893:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31841:73::o;10926:100::-;10980:13;11013:5;11006:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10926:100;:::o;12032:221::-;12108:7;14050:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14050:16:0;12128:73;;;;-1:-1:-1;;;12128:73:0;;7235:2:1;12128:73:0;;;7217:21:1;7274:2;7254:18;;;7247:30;7313:34;7293:18;;;7286:62;-1:-1:-1;;;7364:18:1;;;7357:42;7416:19;;12128:73:0;7033:408:1;12128:73:0;-1:-1:-1;12221:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;12221:24:0;;12032:221::o;28965:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11609:411::-;11690:13;11706:23;11721:7;11706:14;:23::i;:::-;11690:39;;11754:5;-1:-1:-1;;;;;11748:11:0;:2;-1:-1:-1;;;;;11748:11:0;;;11740:57;;;;-1:-1:-1;;;11740:57:0;;7648:2:1;11740:57:0;;;7630:21:1;7687:2;7667:18;;;7660:30;7726:34;7706:18;;;7699:62;-1:-1:-1;;;7777:18:1;;;7770:31;7818:19;;11740:57:0;7446:397:1;11740:57:0;9113:10;-1:-1:-1;;;;;11832:21:0;;;;:62;;-1:-1:-1;11857:37:0;11874:5;9113:10;12571:164;:::i;11857:37::-;11810:168;;;;-1:-1:-1;;;11810:168:0;;8050:2:1;11810:168:0;;;8032:21:1;8089:2;8069:18;;;8062:30;8128:34;8108:18;;;8101:62;8199:26;8179:18;;;8172:54;8243:19;;11810:168:0;7848:420:1;11810:168:0;11991:21;12000:2;12004:7;11991:8;:21::i;:::-;11679:341;11609:411;;:::o;12743:339::-;12938:41;9113:10;12971:7;12938:18;:41::i;:::-;12930:103;;;;-1:-1:-1;;;12930:103:0;;;;;;;:::i;:::-;13046:28;13056:4;13062:2;13066:7;13046:9;:28::i;18324:256::-;18421:7;18457:23;18474:5;18457:16;:23::i;:::-;18449:5;:31;18441:87;;;;-1:-1:-1;;;18441:87:0;;8893:2:1;18441:87:0;;;8875:21:1;8932:2;8912:18;;;8905:30;8971:34;8951:18;;;8944:62;-1:-1:-1;;;9022:18:1;;;9015:41;9073:19;;18441:87:0;8691:407:1;18441:87:0;-1:-1:-1;;;;;;18546:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;18324:256::o;31921:114::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;31981:47:::1;::::0;31989:10:::1;::::0;32006:21:::1;31981:47:::0;::::1;;;::::0;::::1;::::0;;;32006:21;31989:10;31981:47;::::1;;;;;;31973:56;;;::::0;::::1;;31921:114::o:0;13094:185::-;13232:39;13249:4;13255:2;13259:7;13232:39;;;;;;;;;;;;:16;:39::i;30524:348::-;30599:16;30627:23;30653:17;30663:6;30653:9;:17::i;:::-;30627:43;;30677:25;30719:15;30705:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30705:30:0;;30677:58;;30747:9;30742:103;30762:15;30758:1;:19;30742:103;;;30807:30;30827:6;30835:1;30807:19;:30::i;:::-;30793:8;30802:1;30793:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;30779:3;;;;:::i;:::-;;;;30742:103;;;-1:-1:-1;30858:8:0;30524:348;-1:-1:-1;;;30524:348:0:o;31394:82::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;31455:4:::1;:15:::0;31394:82::o;18720:233::-;18795:7;18831:30;18681:10;:17;;18593:113;18831:30;18823:5;:38;18815:95;;;;-1:-1:-1;;;18815:95:0;;9709:2:1;18815:95:0;;;9691:21:1;9748:2;9728:18;;;9721:30;9787:34;9767:18;;;9760:62;-1:-1:-1;;;9838:18:1;;;9831:42;9890:19;;18815:95:0;9507:408:1;18815:95:0;18928:10;18939:5;18928:17;;;;;;;;:::i;:::-;;;;;;;;;18921:24;;18720:233;;;:::o;31609:98::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;31680:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;31609:98:::0;:::o;10675:239::-;10747:7;10783:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10783:16:0;10818:19;10810:73;;;;-1:-1:-1;;;10810:73:0;;10122:2:1;10810:73:0;;;10104:21:1;10161:2;10141:18;;;10134:30;10200:34;10180:18;;;10173:62;-1:-1:-1;;;10251:18:1;;;10244:39;10300:19;;10810:73:0;9920:405:1;10454:208:0;10526:7;-1:-1:-1;;;;;10554:19:0;;10546:74;;;;-1:-1:-1;;;10546:74:0;;10532:2:1;10546:74:0;;;10514:21:1;10571:2;10551:18;;;10544:30;10610:34;10590:18;;;10583:62;-1:-1:-1;;;10661:18:1;;;10654:40;10711:19;;10546:74:0;10330:406:1;10546:74:0;-1:-1:-1;;;;;;10638:16:0;;;;;:9;:16;;;;;;;10454:208::o;22720:94::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;22785:21:::1;22803:1;22785:9;:21::i;31485:118::-:0;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;31564:13:::1;:33:::0;31485:118::o;11037:104::-;11093:13;11126:7;11119:14;;;;;:::i;25523:99::-;25566:7;25593:21;:11;24060:14;;23968:114;25593:21;25586:28;;25523:99;:::o;29729:784::-;29786:14;29803:13;18681:10;:17;;18593:113;29803:13;29832:6;;29786:30;;-1:-1:-1;29832:6:0;;29831:7;29823:46;;;;-1:-1:-1;;;29823:46:0;;10943:2:1;29823:46:0;;;10925:21:1;10982:2;10962:18;;;10955:30;11021:29;11001:18;;;10994:57;11068:18;;29823:46:0;10741:351:1;29823:46:0;29898:1;29884:11;:15;29876:54;;;;-1:-1:-1;;;29876:54:0;;11299:2:1;29876:54:0;;;11281:21:1;11338:2;11318:18;;;11311:30;11377:29;11357:18;;;11350:57;11424:18;;29876:54:0;11097:351:1;29876:54:0;29960:13;;29945:11;:28;;29937:68;;;;-1:-1:-1;;;29937:68:0;;11655:2:1;29937:68:0;;;11637:21:1;11694:2;11674:18;;;11667:30;11733;11713:18;;;11706:58;11781:18;;29937:68:0;11453:352:1;29937:68:0;30045:9;;30020:20;30029:11;30020:6;:20;:::i;:::-;:34;;30012:86;;;;-1:-1:-1;;;30012:86:0;;12145:2:1;30012:86:0;;;12127:21:1;12184:2;12164:18;;;12157:30;12223:34;12203:18;;;12196:62;-1:-1:-1;;;12274:18:1;;;12267:38;12322:19;;30012:86:0;11943:404:1;30012:86:0;22559:6;;-1:-1:-1;;;;;22559:6:0;30111:10;:21;30107:132;;30169:11;30162:4;;:18;;;;:::i;:::-;30149:9;:31;;30141:81;;;;-1:-1:-1;;;30141:81:0;;12727:2:1;30141:81:0;;;12709:21:1;12766:2;12746:18;;;12739:30;12805:34;12785:18;;;12778:62;-1:-1:-1;;;12856:18:1;;;12849:36;12902:19;;30141:81:0;12525:402:1;30141:81:0;30264:1;30247:261;30272:11;30267:1;:16;30247:261;;30311:15;;30304:6;:22;30301:192;;;30343:33;30353:10;30365;30374:1;30365:6;:10;:::i;:::-;30343:9;:33::i;:::-;30301:192;;;30407:14;30424:11;:9;:11::i;:::-;30407:28;;30451:29;30461:10;30473:6;30451:9;:29::i;:::-;30392:101;30301:192;30285:3;;;;:::i;:::-;;;;30247:261;;12264:295;-1:-1:-1;;;;;12367:24:0;;9113:10;12367:24;;12359:62;;;;-1:-1:-1;;;12359:62:0;;13134:2:1;12359:62:0;;;13116:21:1;13173:2;13153:18;;;13146:30;13212:27;13192:18;;;13185:55;13257:18;;12359:62:0;12932:349:1;12359:62:0;9113:10;12434:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;12434:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;12434:53:0;;;;;;;;;;12503:48;;540:41:1;;;12434:42:0;;9113:10;12503:48;;513:18:1;12503:48:0;;;;;;;12264:295;;:::o;32045:67::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;32091:8:::1;:15:::0;;-1:-1:-1;;32091:15:0::1;;;::::0;;32045:67::o;13291:328::-;13466:41;9113:10;13499:7;13466:18;:41::i;:::-;13458:103;;;;-1:-1:-1;;;13458:103:0;;;;;;;:::i;:::-;13572:39;13586:4;13592:2;13596:7;13605:5;13572:13;:39::i;:::-;13291:328;;;;:::o;28923:37::-;;;;;;;:::i;30878:494::-;14026:4;14050:16;;;:7;:16;;;;;;30976:13;;-1:-1:-1;;;;;14050:16:0;31001:97;;;;-1:-1:-1;;;31001:97:0;;13488:2:1;31001:97:0;;;13470:21:1;13527:2;13507:18;;;13500:30;13566:34;13546:18;;;13539:62;-1:-1:-1;;;13617:18:1;;;13610:45;13672:19;;31001:97:0;13286:411:1;31001:97:0;31109:8;;;;;;;31106:62;;31146:14;31139:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30878:494;;;:::o;31106:62::-;31178:28;31209:10;:8;:10::i;:::-;31178:41;;31264:1;31239:14;31233:28;:32;:133;;;;;;;;;;;;;;;;;31301:14;31317:18;:7;:16;:18::i;:::-;31337:13;31284:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31233:133;31226:140;30878:494;-1:-1:-1;;;30878:494:0:o;31713:122::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;31796:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;25728:122::-:0;25780:7;25830:12;:10;:12::i;:::-;25412;;25807:35;;;;:::i;32118:120::-;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;32200:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;22828:192::-:0;22559:6;;-1:-1:-1;;;;;22559:6:0;9113:10;22627:23;22619:68;;;;-1:-1:-1;;;22619:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22917:22:0;::::1;22909:73;;;::::0;-1:-1:-1;;;22909:73:0;;15692:2:1;22909:73:0::1;::::0;::::1;15674:21:1::0;15731:2;15711:18;;;15704:30;15770:34;15750:18;;;15743:62;-1:-1:-1;;;15821:18:1;;;15814:36;15867:19;;22909:73:0::1;15490:402:1::0;22909:73:0::1;22993:19;23003:8;22993:9;:19::i;:::-;22828:192:::0;:::o;25960:::-;26026:7;26294:1;26270:21;:19;:21::i;:::-;:25;26262:62;;;;-1:-1:-1;;;26262:62:0;;16099:2:1;26262:62:0;;;16081:21:1;16138:2;16118:18;;;16111:30;-1:-1:-1;;;16157:18:1;;;16150:54;16221:18;;26262:62:0;15897:348:1;26262:62:0;26046:13:::1;26062:21;:11;24060:14:::0;;23968:114;26062:21:::1;26046:37;;26096:23;:11;24179:19:::0;;24197:1;24179:19;;;24090:127;23968:114;24060:14;;23968:114::o;24090:127::-;24179:19;;24197:1;24179:19;;;24090:127::o;4089:387::-;4412:20;4460:8;;;4089:387::o;10138:305::-;10240:4;-1:-1:-1;;;;;;10277:40:0;;-1:-1:-1;;;10277:40:0;;:105;;-1:-1:-1;;;;;;;10334:48:0;;-1:-1:-1;;;10334:48:0;10277:105;:158;;;-1:-1:-1;;;;;;;;;;2191:40:0;;;10399:36;2082:157;16281:174;16356:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16356:29:0;-1:-1:-1;;;;;16356:29:0;;;;;;;;:24;;16410:23;16356:24;16410:14;:23::i;:::-;-1:-1:-1;;;;;16401:46:0;;;;;;;;;;;16281:174;;:::o;14101:348::-;14194:4;14050:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14050:16:0;14211:73;;;;-1:-1:-1;;;14211:73:0;;16452:2:1;14211:73:0;;;16434:21:1;16491:2;16471:18;;;16464:30;16530:34;16510:18;;;16503:62;-1:-1:-1;;;16581:18:1;;;16574:42;16633:19;;14211:73:0;16250:408:1;14211:73:0;14295:13;14311:23;14326:7;14311:14;:23::i;:::-;14295:39;;14364:5;-1:-1:-1;;;;;14353:16:0;:7;-1:-1:-1;;;;;14353:16:0;;:51;;;;14397:7;-1:-1:-1;;;;;14373:31:0;:20;14385:7;14373:11;:20::i;:::-;-1:-1:-1;;;;;14373:31:0;;14353:51;:87;;;-1:-1:-1;;;;;;12692:25:0;;;12668:4;12692:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;14408:32;14345:96;14101:348;-1:-1:-1;;;;14101:348:0:o;15690:578::-;15849:4;-1:-1:-1;;;;;15822:31:0;:23;15837:7;15822:14;:23::i;:::-;-1:-1:-1;;;;;15822:31:0;;15814:85;;;;-1:-1:-1;;;15814:85:0;;16865:2:1;15814:85:0;;;16847:21:1;16904:2;16884:18;;;16877:30;16943:34;16923:18;;;16916:62;-1:-1:-1;;;16994:18:1;;;16987:39;17043:19;;15814:85:0;16663:405:1;15814:85:0;-1:-1:-1;;;;;15918:16:0;;15910:65;;;;-1:-1:-1;;;15910:65:0;;17275:2:1;15910:65:0;;;17257:21:1;17314:2;17294:18;;;17287:30;17353:34;17333:18;;;17326:62;-1:-1:-1;;;17404:18:1;;;17397:34;17448:19;;15910:65:0;17073:400:1;15910:65:0;15988:39;16009:4;16015:2;16019:7;15988:20;:39::i;:::-;16092:29;16109:1;16113:7;16092:8;:29::i;:::-;-1:-1:-1;;;;;16134:15:0;;;;;;:9;:15;;;;;:20;;16153:1;;16134:15;:20;;16153:1;;16134:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16165:13:0;;;;;;:9;:13;;;;;:18;;16182:1;;16165:13;:18;;16182:1;;16165:18;:::i;:::-;;;;-1:-1:-1;;16194:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;16194:21:0;-1:-1:-1;;;;;16194:21:0;;;;;;;;;16233:27;;16194:16;;16233:27;;;;;;;15690:578;;;:::o;23028:173::-;23103:6;;;-1:-1:-1;;;;;23120:17:0;;;-1:-1:-1;;;;;;23120:17:0;;;;;;;23153:40;;23103:6;;;23120:17;23103:6;;23153:40;;23084:16;;23153:40;23073:128;23028:173;:::o;14462:110::-;14538:26;14548:2;14552:7;14538:26;;;;;;;;;;;;:9;:26::i;27483:1271::-;27550:7;26294:1;26270:21;:19;:21::i;:::-;:25;26262:62;;;;-1:-1:-1;;;26262:62:0;;16099:2:1;26262:62:0;;;16081:21:1;16138:2;16118:18;;;16111:30;-1:-1:-1;;;16157:18:1;;;16150:54;16221:18;;26262:62:0;15897:348:1;26262:62:0;27570:16:::1;27612:12;:10;:12::i;:::-;25412::::0;;27589:35:::1;;;;:::i;:::-;27684:195;::::0;-1:-1:-1;;27719:10:0::1;17805:2:1::0;17801:15;;;17797:24;;27684:195:0::1;::::0;::::1;17785:37:1::0;27748:14:0::1;17856:15:1::0;;17852:24;17838:12;;;17831:46;27781:16:0::1;17893:12:1::0;;;17886:28;27816:14:0::1;17930:12:1::0;;;17923:28;27849:15:0::1;17967:13:1::0;;;17960:29;27570:54:0;;-1:-1:-1;27635:14:0::1;::::0;27570:54;;18005:13:1;;27684:195:0::1;;;;;;;;;;;;27660:230;;;;;;27652:239;;:250;;;;:::i;:::-;27915:13;27947:19:::0;;;:11:::1;:19;::::0;;;;;27635:267;;-1:-1:-1;27915:13:0;27943:304:::1;;-1:-1:-1::0;28092:6:0;27943:304:::1;;;-1:-1:-1::0;28216:19:0::1;::::0;;;:11:::1;:19;::::0;;;;;27943:304:::1;28324:11;:25;28336:12;28347:1;28336:8:::0;:12:::1;:::i;:::-;28324:25;;;;;;;;;;;;28353:1;28324:30;28320:331;;;28458:12;28469:1;28458:8:::0;:12:::1;:::i;:::-;28436:19;::::0;;;:11:::1;:19;::::0;;;;:34;28320:331:::1;;;28614:11;:25;28626:12;28637:1;28626:8:::0;:12:::1;:::i;:::-;28614:25:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;28614:25:0;;;;28592:19;;;:11:::1;:19:::0;;;;:47;28320:331:::1;28692:17;:15;:17::i;:::-;-1:-1:-1::0;28737:9:0::1;::::0;28729:17:::1;::::0;:5;:17:::1;:::i;:::-;28722:24;;;;;27483:1271:::0;:::o;13632:315::-;13789:28;13799:4;13805:2;13809:7;13789:9;:28::i;:::-;13836:48;13859:4;13865:2;13869:7;13878:5;13836:22;:48::i;:::-;13828:111;;;;-1:-1:-1;;;13828:111:0;;;;;;;:::i;29608:102::-;29668:13;29697:7;29690:14;;;;;:::i;2429:723::-;2485:13;2706:10;2702:53;;-1:-1:-1;;2733:10:0;;;;;;;;;;;;-1:-1:-1;;;2733:10:0;;;;;2429:723::o;2702:53::-;2780:5;2765:12;2821:78;2828:9;;2821:78;;2854:8;;;;:::i;:::-;;-1:-1:-1;2877:10:0;;-1:-1:-1;2885:2:0;2877:10;;:::i;:::-;;;2821:78;;;2909:19;2941:6;2931:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2931:17:0;;2909:39;;2959:154;2966:10;;2959:154;;2993:11;3003:1;2993:11;;:::i;:::-;;-1:-1:-1;3062:10:0;3070:2;3062:5;:10;:::i;:::-;3049:24;;:2;:24;:::i;:::-;3036:39;;3019:6;3026;3019:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3019:56:0;;;;;;;;-1:-1:-1;3090:11:0;3099:2;3090:11;;:::i;:::-;;;2959:154;;18967:589;-1:-1:-1;;;;;19173:18:0;;19169:187;;19208:40;19240:7;19907:10;:17;;19880:24;;;;:15;:24;;;;;:44;;;19935:24;;;;;;;;;;;;19803:164;19208:40;19169:187;;;19278:2;-1:-1:-1;;;;;19270:10:0;:4;-1:-1:-1;;;;;19270:10:0;;19266:90;;19297:47;19330:4;19336:7;19297:32;:47::i;:::-;-1:-1:-1;;;;;19370:16:0;;19366:183;;19403:45;19440:7;19403:36;:45::i;19366:183::-;19476:4;-1:-1:-1;;;;;19470:10:0;:2;-1:-1:-1;;;;;19470:10:0;;19466:83;;19497:40;19525:2;19529:7;19497:27;:40::i;14586:321::-;14716:18;14722:2;14726:7;14716:5;:18::i;:::-;14767:54;14798:1;14802:2;14806:7;14815:5;14767:22;:54::i;:::-;14745:154;;;;-1:-1:-1;;;14745:154:0;;;;;;;:::i;16469:799::-;16624:4;-1:-1:-1;;;;;16645:13:0;;4412:20;4460:8;16641:620;;16681:72;;-1:-1:-1;;;16681:72:0;;-1:-1:-1;;;;;16681:36:0;;;;;:72;;9113:10;;16732:4;;16738:7;;16747:5;;16681:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16681:72:0;;;;;;;;-1:-1:-1;;16681:72:0;;;;;;;;;;;;:::i;:::-;;;16677:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:13:0;;16919:272;;16966:60;;-1:-1:-1;;;16966:60:0;;;;;;;:::i;16919:272::-;17141:6;17135:13;17126:6;17122:2;17118:15;17111:38;16677:529;-1:-1:-1;;;;;;16804:51:0;-1:-1:-1;;;16804:51:0;;-1:-1:-1;16797:58:0;;16641:620;-1:-1:-1;17245:4:0;16469:799;;;;;;:::o;19981:988::-;20247:22;20297:1;20272:22;20289:4;20272:16;:22::i;:::-;:26;;;;:::i;:::-;20309:18;20330:26;;;:17;:26;;;;;;20247:51;;-1:-1:-1;20463:28:0;;;20459:328;;-1:-1:-1;;;;;20530:18:0;;20508:19;20530:18;;;:12;:18;;;;;;;;:34;;;;;;;;;20581:30;;;;;;:44;;;20698:30;;:17;:30;;;;;:43;;;20459:328;-1:-1:-1;20883:26:0;;;;:17;:26;;;;;;;;20876:33;;;-1:-1:-1;;;;;20927:18:0;;;;;:12;:18;;;;;:34;;;;;;;20920:41;19981:988::o;20983:1079::-;21261:10;:17;21236:22;;21261:21;;21281:1;;21261:21;:::i;:::-;21293:18;21314:24;;;:15;:24;;;;;;21687:10;:26;;21236:46;;-1:-1:-1;21314:24:0;;21236:46;;21687:26;;;;;;:::i;:::-;;;;;;;;;21665:48;;21751:11;21726:10;21737;21726:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;21831:28;;;:15;:28;;;;;;;:41;;;22003:24;;;;;21996:31;22038:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21054:1008;;;20983:1079;:::o;19569:221::-;19654:14;19671:20;19688:2;19671:16;:20::i;:::-;-1:-1:-1;;;;;19702:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;19747:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;19569:221:0:o;14920:382::-;-1:-1:-1;;;;;15000:16:0;;14992:61;;;;-1:-1:-1;;;14992:61:0;;19904:2:1;14992:61:0;;;19886:21:1;;;19923:18;;;19916:30;19982:34;19962:18;;;19955:62;20034:18;;14992:61:0;19702:356:1;14992:61:0;14026:4;14050:16;;;:7;:16;;;;;;-1:-1:-1;;;;;14050:16:0;:30;15064:58;;;;-1:-1:-1;;;15064:58:0;;20265:2:1;15064:58:0;;;20247:21:1;20304:2;20284:18;;;20277:30;20343;20323:18;;;20316:58;20391:18;;15064:58:0;20063:352:1;15064:58:0;15135:45;15164:1;15168:2;15172:7;15135:20;:45::i;:::-;-1:-1:-1;;;;;15193:13:0;;;;;;:9;:13;;;;;:18;;15210:1;;15193:13;:18;;15210:1;;15193:18;:::i;:::-;;;;-1:-1:-1;;15222:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;15222:21:0;-1:-1:-1;;;;;15222:21:0;;;;;;;;15261:33;;15222:16;;;15261:33;;15222:16;;15261:33;14920:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:1;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:1;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:1:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:1;;1693:180;-1:-1:-1;1693:180:1:o;2086:173::-;2154:20;;-1:-1:-1;;;;;2203:31:1;;2193:42;;2183:70;;2249:1;2246;2239:12;2264:254;2332:6;2340;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;2432:29;2451:9;2432:29;:::i;:::-;2422:39;2508:2;2493:18;;;;2480:32;;-1:-1:-1;;;2264:254:1:o;2705:328::-;2782:6;2790;2798;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2890:29;2909:9;2890:29;:::i;:::-;2880:39;;2938:38;2972:2;2961:9;2957:18;2938:38;:::i;:::-;2928:48;;3023:2;3012:9;3008:18;2995:32;2985:42;;2705:328;;;;;:::o;3038:186::-;3097:6;3150:2;3138:9;3129:7;3125:23;3121:32;3118:52;;;3166:1;3163;3156:12;3118:52;3189:29;3208:9;3189:29;:::i;3229:632::-;3400:2;3452:21;;;3522:13;;3425:18;;;3544:22;;;3371:4;;3400:2;3623:15;;;;3597:2;3582:18;;;3371:4;3666:169;3680:6;3677:1;3674:13;3666:169;;;3741:13;;3729:26;;3810:15;;;;3775:12;;;;3702:1;3695:9;3666:169;;;-1:-1:-1;3852:3:1;;3229:632;-1:-1:-1;;;;;;3229:632:1:o;3866:127::-;3927:10;3922:3;3918:20;3915:1;3908:31;3958:4;3955:1;3948:15;3982:4;3979:1;3972:15;3998:632;4063:5;4093:18;4134:2;4126:6;4123:14;4120:40;;;4140:18;;:::i;:::-;4215:2;4209:9;4183:2;4269:15;;-1:-1:-1;;4265:24:1;;;4291:2;4261:33;4257:42;4245:55;;;4315:18;;;4335:22;;;4312:46;4309:72;;;4361:18;;:::i;:::-;4401:10;4397:2;4390:22;4430:6;4421:15;;4460:6;4452;4445:22;4500:3;4491:6;4486:3;4482:16;4479:25;4476:45;;;4517:1;4514;4507:12;4476:45;4567:6;4562:3;4555:4;4547:6;4543:17;4530:44;4622:1;4615:4;4606:6;4598;4594:19;4590:30;4583:41;;;;3998:632;;;;;:::o;4635:451::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4813:9;4800:23;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4901:22;;4954:4;4946:13;;4942:27;-1:-1:-1;4932:55:1;;4983:1;4980;4973:12;4932:55;5006:74;5072:7;5067:2;5054:16;5049:2;5045;5041:11;5006:74;:::i;5091:254::-;5156:6;5164;5217:2;5205:9;5196:7;5192:23;5188:32;5185:52;;;5233:1;5230;5223:12;5185:52;5256:29;5275:9;5256:29;:::i;:::-;5246:39;;5304:35;5335:2;5324:9;5320:18;5304:35;:::i;:::-;5294:45;;5091:254;;;;;:::o;5350:667::-;5445:6;5453;5461;5469;5522:3;5510:9;5501:7;5497:23;5493:33;5490:53;;;5539:1;5536;5529:12;5490:53;5562:29;5581:9;5562:29;:::i;:::-;5552:39;;5610:38;5644:2;5633:9;5629:18;5610:38;:::i;:::-;5600:48;;5695:2;5684:9;5680:18;5667:32;5657:42;;5750:2;5739:9;5735:18;5722:32;5777:18;5769:6;5766:30;5763:50;;;5809:1;5806;5799:12;5763:50;5832:22;;5885:4;5877:13;;5873:27;-1:-1:-1;5863:55:1;;5914:1;5911;5904:12;5863:55;5937:74;6003:7;5998:2;5985:16;5980:2;5976;5972:11;5937:74;:::i;:::-;5927:84;;;5350:667;;;;;;;:::o;6022:260::-;6090:6;6098;6151:2;6139:9;6130:7;6126:23;6122:32;6119:52;;;6167:1;6164;6157:12;6119:52;6190:29;6209:9;6190:29;:::i;:::-;6180:39;;6238:38;6272:2;6261:9;6257:18;6238:38;:::i;6287:356::-;6489:2;6471:21;;;6508:18;;;6501:30;6567:34;6562:2;6547:18;;6540:62;6634:2;6619:18;;6287:356::o;6648:380::-;6727:1;6723:12;;;;6770;;;6791:61;;6845:4;6837:6;6833:17;6823:27;;6791:61;6898:2;6890:6;6887:14;6867:18;6864:38;6861:161;;;6944:10;6939:3;6935:20;6932:1;6925:31;6979:4;6976:1;6969:15;7007:4;7004:1;6997:15;6861:161;;6648:380;;;:::o;8273:413::-;8475:2;8457:21;;;8514:2;8494:18;;;8487:30;8553:34;8548:2;8533:18;;8526:62;-1:-1:-1;;;8619:2:1;8604:18;;8597:47;8676:3;8661:19;;8273:413::o;9103:127::-;9164:10;9159:3;9155:20;9152:1;9145:31;9195:4;9192:1;9185:15;9219:4;9216:1;9209:15;9235:127;9296:10;9291:3;9287:20;9284:1;9277:31;9327:4;9324:1;9317:15;9351:4;9348:1;9341:15;9367:135;9406:3;-1:-1:-1;;9427:17:1;;9424:43;;;9447:18;;:::i;:::-;-1:-1:-1;9494:1:1;9483:13;;9367:135::o;11810:128::-;11850:3;11881:1;11877:6;11874:1;11871:13;11868:39;;;11887:18;;:::i;:::-;-1:-1:-1;11923:9:1;;11810:128::o;12352:168::-;12392:7;12458:1;12454;12450:6;12446:14;12443:1;12440:21;12435:1;12428:9;12421:17;12417:45;12414:71;;;12465:18;;:::i;:::-;-1:-1:-1;12505:9:1;;12352:168::o;13828:1527::-;14052:3;14090:6;14084:13;14116:4;14129:51;14173:6;14168:3;14163:2;14155:6;14151:15;14129:51;:::i;:::-;14243:13;;14202:16;;;;14265:55;14243:13;14202:16;14287:15;;;14265:55;:::i;:::-;14409:13;;14342:20;;;14382:1;;14469;14491:18;;;;14544;;;;14571:93;;14649:4;14639:8;14635:19;14623:31;;14571:93;14712:2;14702:8;14699:16;14679:18;14676:40;14673:167;;;-1:-1:-1;;;14739:33:1;;14795:4;14792:1;14785:15;14825:4;14746:3;14813:17;14673:167;14856:18;14883:110;;;;15007:1;15002:328;;;;14849:481;;14883:110;-1:-1:-1;;14918:24:1;;14904:39;;14963:20;;;;-1:-1:-1;14883:110:1;;15002:328;13775:1;13768:14;;;13812:4;13799:18;;15097:1;15111:169;15125:8;15122:1;15119:15;15111:169;;;15207:14;;15192:13;;;15185:37;15250:16;;;;15142:10;;15111:169;;;15115:3;;15311:8;15304:5;15300:20;15293:27;;14849:481;-1:-1:-1;15346:3:1;;13828:1527;-1:-1:-1;;;;;;;;;;;13828:1527:1:o;15360:125::-;15400:4;15428:1;15425;15422:8;15419:34;;;15433:18;;:::i;:::-;-1:-1:-1;15470:9:1;;15360:125::o;18029:127::-;18090:10;18085:3;18081:20;18078:1;18071:31;18121:4;18118:1;18111:15;18145:4;18142:1;18135:15;18161:112;18193:1;18219;18209:35;;18224:18;;:::i;:::-;-1:-1:-1;18258:9:1;;18161:112::o;18278:414::-;18480:2;18462:21;;;18519:2;18499:18;;;18492:30;18558:34;18553:2;18538:18;;18531:62;-1:-1:-1;;;18624:2:1;18609:18;;18602:48;18682:3;18667:19;;18278:414::o;18697:120::-;18737:1;18763;18753:35;;18768:18;;:::i;:::-;-1:-1:-1;18802:9:1;;18697:120::o;18822:489::-;-1:-1:-1;;;;;19091:15:1;;;19073:34;;19143:15;;19138:2;19123:18;;19116:43;19190:2;19175:18;;19168:34;;;19238:3;19233:2;19218:18;;19211:31;;;19016:4;;19259:46;;19285:19;;19277:6;19259:46;:::i;:::-;19251:54;18822:489;-1:-1:-1;;;;;;18822:489:1:o;19316:249::-;19385:6;19438:2;19426:9;19417:7;19413:23;19409:32;19406:52;;;19454:1;19451;19444:12;19406:52;19486:9;19480:16;19505:30;19529:5;19505:30;:::i;19570:127::-;19631:10;19626:3;19622:20;19619:1;19612:31;19662:4;19659:1;19652:15;19686:4;19683:1;19676:15

Swarm Source

ipfs://81221828e689bdbe63629db071e1e930ef357980a56de8a89a0e0cd15d2e54cd
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.