ETH Price: $3,400.35 (-1.29%)
Gas: 2 Gwei

Token

RappearsNFTs (RAPPEARS)
 

Overview

Max Total Supply

3,000 RAPPEARS

Holders

350

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cryptoxic.eth
Balance
2 RAPPEARS
0x771e9a80ca48265e2c44c0d444c047d023c3c142
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:
RapPearsNft

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : NFTVault.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

import "./tokens/ERC721.sol";
import "./tokens/ERC20.sol";
import "./utils/owner.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract RapPearsNft is ERC721, Owner {
    using Strings for *;
    ///=============================================================================================
    /// Data Struct
    ///=============================================================================================

    struct Rewards {
        uint256 weight;
        uint256 tracker; //sum of delta(deposit) * yeildPerDeposit || SCALED
    }

    struct MetaData {
        string name;
        address vaultAddress;
        uint256 withdrawable;
        uint256 id;
        uint256 vaultType;
    }

    ///=============================================================================================
    /// Accounting State
    ///=============================================================================================

    // tokenID => Deposits
    mapping(uint256 => Rewards) public deposits;

    //sum of yeild/totalWeight scaled by SCALAR
    uint256 public yeildPerDeposit;

    uint256 public totalWeight;

    uint256 constant SCALAR = 1e10;

    ///=============================================================================================
    /// Rappears
    ///=============================================================================================

    // tokenId => lockUp timestamp
    mapping(uint256 => uint256) locked;
    uint256 internal lockTimeSeconds;

    mapping(uint256 => mapping(address => bool)) public privateMintClaimed;

    mapping(uint256 => mapping(uint256 => uint256)) public qtyPricing;
    uint256 public defaultPricePerUnit = 1e17;
    uint256 public pricingVersionCount = 1;

    uint256 public maxWhitelistMintPerTx;

    bool internal publicMint;
    uint256 internal supplyCap;

    mapping(address => uint256[]) public tokensByAddress;

    // returns the current index in the tokensByAddress array
    mapping(uint256 => uint256) internal indexById;

    ///=============================================================================================
    /// Misc
    ///=============================================================================================

    ERC20 public weth;

    uint256 internal devFeeBP;

    uint256 public devBalance;

    uint256 public currentId;

    ///=============================================================================================
    /// External Logic
    ///=============================================================================================

    constructor(
        address _weth,
        uint256 _devFeeBP,
        uint256 _lockTime,
        uint256 _initalSupplyCap,
        uint256 _initialMintAmount,
        string memory _name,
        string memory _symbol
    ) ERC721(_name, _symbol) {
        weth = ERC20(_weth);
        devFeeBP = _devFeeBP;
        lockTimeSeconds = _lockTime;
        supplyCap = _initalSupplyCap;
        setMaxWhiteList(5);
        ipfsLink = "ipfs://QmWYt6XezHy7PBwCYEHpWZYfSemjGwWMpHSxRmXVfSFEvQ/";
        maxWhitelistMintPerTx = 5;

        for (uint256 i; i < _initialMintAmount; ) {
            _mintNewNFT();
            unchecked {
                ++i;
            }
        }
    }

    function adminMint(uint256 amount)
        external
        onlyOwner
        returns (uint256[] memory)
    {
        _takeFees();
        uint256[] memory ret = new uint256[](amount);

        for (uint256 i; i < amount; ) {
            ret[i] = _mintNewNFT();
            // unlikely to overflow
            unchecked {
                ++i;
            }
        }
        return ret;
    }

    function mintNewNft(uint256 amount)
        external
        payable
        returns (uint256[] memory)
    {
        require(price(amount) <= msg.value, "underpaid");
        require(publicMint, "not live");

        _takeFees();

        uint256[] memory ret = new uint256[](amount);

        for (uint256 i; i < amount; ) {
            ret[i] = _mintNewNFT();

            // unlikely to overflow
            unchecked {
                ++i;
            }
        }

        return ret;
    }

    function lockUp(uint256 id) external {
        require(msg.sender == ownerOf(id), "Not Owner");

        locked[id] = block.timestamp;
        deposits[id].weight = 100; // 100 = 1 weight
        deposits[id].tracker += 100 * yeildPerDeposit;
        totalWeight += 100;
    }

    event A(uint256);

    function withdrawFromId(uint256 id, uint256 amount) public {
        require(
            block.timestamp - locked[id] >= lockTimeSeconds && locked[id] != 0,
            "here"
        );

        locked[id] = 0;

        _withdrawFromId(amount, id);
    }

    function bundleWithdraw() external {
        uint256 length = tokensByAddress[msg.sender].length;
        for (uint256 i; i < length; ) {
            uint256 id = tokensByAddress[msg.sender][i];
            if (
                block.timestamp - locked[id] >= lockTimeSeconds &&
                locked[id] != 0
            ) {
                withdrawFromId(id, withdrawableById(id));
            }
            unchecked {
                ++i;
            }
        }
    }

    function withdrawableById(uint256 id)
        public
        view
        returns (uint256 claimId)
    {
        return yieldPerId(id);
    }

    function claimDevFeeBPs() external onlyOwner {
        weth.transfer(owner, devBalance);
    }

    ///=============================================================================================
    /// Internal Logic
    ///=============================================================================================

    function _mintNewNFT() internal returns (uint256) {
        uint256 id = ++currentId;
        require(currentId <= supplyCap);

        _mint(msg.sender, id);
        _addId(msg.sender, id);

        return id;
    }

    function _withdrawFromId(uint256 amount, uint256 id) internal {
        require(msg.sender == ownerOf(id) && amount <= withdrawableById(id));

        deposits[id].weight = 0; // user ceases to earn yield
        deposits[id].tracker = 0;
        totalWeight -= 100;

        weth.transfer(msg.sender, amount);
    }

    function _takeFees() internal {
        // grieifing is a non issue here
        (bool success, ) = payable(address(weth)).call{value: msg.value}("");
        require(success);

        uint256 toDev = (msg.value * devFeeBP) / 10000;
        devBalance += toDev;

        if (totalWeight > 0) {
            distributeYeild(msg.value - toDev);
        } else {
            devBalance += (msg.value - toDev);
        }
    }

    // add to list of ID by address
    function _addId(address who, uint256 id) internal {
        tokensByAddress[who].push(id);

        indexById[id] = tokensByAddress[who].length - 1;
    }

    // remove from list of id by address
    function _removeId(address who, uint256 id) internal {
        uint256 index = indexById[id]; // get index of value to remove

        uint256 lastVal = tokensByAddress[who][tokensByAddress[who].length - 1]; // get last val from array

        tokensByAddress[who][index] = lastVal; // set last value to remove index of value to remove

        tokensByAddress[who].pop(); //pop off the now duplicate value
    }

    ///=============================================================================================
    /// Yield
    ///=============================================================================================

    function distributeYeild(uint256 amount) public virtual {
        yeildPerDeposit += ((amount * SCALAR) / totalWeight);
    }

    function yieldPerId(uint256 id) public view returns (uint256) {
        uint256 pre = (deposits[id].weight * yeildPerDeposit) / SCALAR;
        return pre - (deposits[id].tracker / SCALAR);
    }

    ///=============================================================================================
    /// Pricing
    ///=============================================================================================

    function price(uint256 _count) public view returns (uint256) {
        uint256 pricePerUnit = qtyPricing[pricingVersionCount][_count];
        // Mint more than max discount reverts to max discount
        if (_count > maxWhitelistMintPerTx) {
            pricePerUnit = qtyPricing[pricingVersionCount][
                maxWhitelistMintPerTx
            ];
        }
        // Minting an undefined discount price uses defaults price
        if (pricePerUnit == 0) {
            pricePerUnit = defaultPricePerUnit;
        }
        return pricePerUnit * _count;
    }

    ///=============================================================================================
    /// Whitelist
    ///=============================================================================================

    function whitelistMint(
        uint256 amount,
        uint256 whitelistNonce,
        bytes32 msgHash,
        uint8 _v,
        bytes32 _r,
        bytes32 _s
    ) public payable returns (uint256[] memory) {
        require(msg.value >= price(amount), "Value below price");
        require(
            !privateMintClaimed[whitelistNonce][msg.sender],
            "Already claimed!"
        );

        // Security check.
        bytes32 calculatedMsgHash = keccak256(
            abi.encodePacked(msg.sender, whitelistNonce)
        );

        address signer = ecrecover(
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", msgHash)
            ),
            _v,
            _r,
            _s
        );
        require(calculatedMsgHash == msgHash, "Invalid hash");
        require(owner == signer, "Access denied");

        // Let's mint!
        privateMintClaimed[whitelistNonce][msg.sender] = true;

        _takeFees();

        uint256[] memory ret = new uint256[](amount);

        for (uint256 i; i < amount; ) {
            ret[i] = _mintNewNFT();
            // unlikely to overflow
            unchecked {
                ++i;
            }
        }

        return ret;
    }

    ///=============================================================================================
    /// Setters
    ///=============================================================================================

    function setLockTime(uint256 _lockTime) external onlyOwner {
        lockTimeSeconds = _lockTime;
    }

    function setMaxWhiteList(uint256 amount) public onlyOwner {
        maxWhitelistMintPerTx = amount;
    }

    function setMintPrices(
        uint256 _defaultPricePerUnit,
        uint256[] memory qty,
        uint256[] memory prices
    ) public onlyOwner {
        require(
            qty.length == prices.length,
            "Qty input vs price length mismatch"
        );
        defaultPricePerUnit = _defaultPricePerUnit;
        ++pricingVersionCount;

        bool containsMaxWhitelistMintPerTx = false;
        for (uint256 i = 0; i < qty.length; i++) {
            if (qty[i] == maxWhitelistMintPerTx) {
                containsMaxWhitelistMintPerTx = true;
            }
            qtyPricing[pricingVersionCount][qty[i]] = prices[i];
        }
        require(
            containsMaxWhitelistMintPerTx,
            "prices do not include the max mint price"
        );
    }

    function setSupplyCap(uint256 total) external onlyOwner {
        supplyCap = total;
    }

    function setPublicMint(bool open) external onlyOwner {
        publicMint = open;
    }

    ///=============================================================================================
    /// Overrides
    ///=============================================================================================

    string public ipfsLink;

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        returns (string memory)
    {
        return string(abi.encodePacked(ipfsLink, tokenId.toString(), ".json"));
    }

    function setTokenUri(string memory baseURI) public onlyOwner {
        ipfsLink = baseURI;
    }

    function totalSupply() public view returns (uint256) {
        return supplyCap;
    }


    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public override {
        require(
            locked[id] == 0 || locked[id] - block.timestamp >= lockTimeSeconds
        );

        locked[id] = 0;

        _removeId(from, id);
        _addId(to, id);

        super.transferFrom(from, to, id);
    }
}

File 2 of 5 : ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*//////////////////////////////////////////////////////////////
                         METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    /*//////////////////////////////////////////////////////////////
                      ERC721 BALANCE/OWNER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) internal _ownerOf;

    mapping(address => uint256) internal _balanceOf;

    function ownerOf(uint256 id) public view virtual returns (address owner) {
        require((owner = _ownerOf[id]) != address(0), "NOT_MINTED");
    }

    function balanceOf(address owner) public view virtual returns (uint256) {
        require(owner != address(0), "ZERO_ADDRESS");

        return _balanceOf[owner];
    }

    /*//////////////////////////////////////////////////////////////
                         ERC721 APPROVAL STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*//////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = _ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == _ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _balanceOf[from]--;

            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(_ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

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

    function _burn(uint256 id) internal virtual {
        address owner = _ownerOf[id];

        require(owner != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            _balanceOf[owner]--;
        }

        delete _ownerOf[id];

        delete getApproved[id];

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

    /*//////////////////////////////////////////////////////////////
                        INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721TokenReceiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721TokenReceiver.onERC721Received.selector;
    }
}

File 3 of 5 : ERC20.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

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

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

File 4 of 5 : owner.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @title Owner
/// @notice Transferrable owner authorization pattern.
abstract contract Owner {

    ///===========================
    /// STATE
    ///===========================

    /// @notice Emitted when the ownership is changed
    /// @param previousOwner Previous owner of the contract.
    /// @param newOwner New owner of the contract.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Current owner of the contract.
    address public owner;

    ///@notice Modifier to verify that the sender is the owner of the contract.
    modifier onlyOwner() {
        require (msg.sender == owner, "NOT_OWNER");
        _;
    }

    ///===========================
    /// INIT
    ///===========================

    ///@notice Initially set the owner as the contract deployer.
    constructor() {
        _transferOwnership(msg.sender);
    }

    ///===========================
    /// FUNCTIONS
    ///===========================

    /// @notice Transfer the ownership of the contract.
    /// @param newOwner Address ownership is to be transferred to.
    function transferOwnership(address newOwner) public virtual onlyOwner {
        _transferOwnership(newOwner);
    }

    ///===========================
    /// INTERNAL
    ///===========================

    /// @notice Transfer the ownership of the contract.
    /// @param newOwner Address ownership is to be transferred to.
    function _transferOwnership(address newOwner) internal {
        address oldOwner = owner;
        owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
    
}

File 5 of 5 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_devFeeBP","type":"uint256"},{"internalType":"uint256","name":"_lockTime","type":"uint256"},{"internalType":"uint256","name":"_initalSupplyCap","type":"uint256"},{"internalType":"uint256","name":"_initialMintAmount","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"A","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminMint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bundleWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDevFeeBPs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultPricePerUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"tracker","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributeYeild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ipfsLink","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"lockUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWhitelistMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintNewNft","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pricingVersionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"privateMintClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"qtyPricing","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":"uint256","name":"_lockTime","type":"uint256"}],"name":"setLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultPricePerUnit","type":"uint256"},{"internalType":"uint256[]","name":"qty","type":"uint256[]"},{"internalType":"uint256[]","name":"prices","type":"uint256[]"}],"name":"setMintPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"open","type":"bool"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWeight","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":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"whitelistNonce","type":"uint256"},{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"whitelistMint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFromId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawableById","outputs":[{"internalType":"uint256","name":"claimId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yeildPerDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"yieldPerId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405267016345785d8a0000600e556001600f553480156200002257600080fd5b5060405162002cf638038062002cf68339810160408190526200004591620004ca565b8151829082906200005e90600090602085019062000371565b5080516200007490600190602084019062000371565b50505062000088336200012260201b60201c565b601580546001600160a01b0319166001600160a01b0389161790556016869055600b8590556012849055620000be600562000174565b60405180606001604052806036815260200162002cc0603691398051620000ee9160199160209091019062000371565b50600560105560005b8381101562000114576200010a620001c5565b50600101620000f7565b50505050505050506200061a565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620001c05760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b60448201526064015b60405180910390fd5b601055565b600080601860008154620001d990620005d0565b91905081905590506012546018541115620001f357600080fd5b620001ff338262000210565b6200020b33826200031f565b919050565b6001600160a01b0382166200025c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401620001b7565b6000818152600260205260409020546001600160a01b031615620002b45760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401620001b7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b03821660008181526013602090815260408220805460018181018355828552928420018590559290915290546200035e919062000579565b6000918252601460205260409091205550565b8280546200037f9062000593565b90600052602060002090601f016020900481019282620003a35760008555620003ee565b82601f10620003be57805160ff1916838001178555620003ee565b82800160010185558215620003ee579182015b82811115620003ee578251825591602001919060010190620003d1565b50620003fc92915062000400565b5090565b5b80821115620003fc576000815560010162000401565b600082601f83011262000428578081fd5b81516001600160401b038082111562000445576200044562000604565b604051601f8301601f19908116603f0116810190828211818310171562000470576200047062000604565b816040528381526020925086838588010111156200048c578485fd5b8491505b83821015620004af578582018301518183018401529082019062000490565b83821115620004c057848385830101525b9695505050505050565b600080600080600080600060e0888a031215620004e5578283fd5b87516001600160a01b0381168114620004fc578384fd5b602089015160408a015160608b015160808c015160a08d0151949b50929950909750955093506001600160401b038082111562000537578384fd5b620005458b838c0162000417565b935060c08a01519150808211156200055b578283fd5b506200056a8a828b0162000417565b91505092959891949750929550565b6000828210156200058e576200058e620005ee565b500390565b600181811c90821680620005a857607f821691505b60208210811415620005ca57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620005e757620005e7620005ee565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612696806200062a6000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063c1f26123116100b6578063e00dd1611161007a578063e00dd16114610772578063e329c7f114610788578063e985e9c51461079e578063eaaf1fca146107d9578063ed490326146107f9578063f2fde38b1461080e57600080fd5b8063c1f26123146106dc578063c87b56dd146106fc578063cbd538001461071c578063cd9a1b631461073c578063db9f8c3b1461075257600080fd5b8063a22cb46511610108578063a22cb465146105fd578063a2d6b25f1461061d578063ae04d45d14610633578063b02c43d014610653578063b6a3f59a1461069c578063ba27d56f146106bc57600080fd5b806370a08231146105725780637655a590146105925780638da5cb5b146105b257806395d89b41146105d257806396c82e57146105e757600080fd5b806323b872dd116101dd5780633fc8cef3116101a15780633fc8cef3146104ae57806348dfeb27146104ce5780634b6d69d3146104e45780636352211e146104f75780636acf0b98146105175780636d43d9f11461055257600080fd5b806323b872dd14610424578063269748f81461044457806326a49e37146104645780632b9d8c9a146104845780633e73c83f1461049957600080fd5b8063090933571161022f5780630909335714610357578063095ea7b3146103775780630e2d56cf14610397578063174a9b74146103b757806318160ddd146103ef5780631ab2f6af1461040457600080fd5b806301ffc9a71461026c57806305859eed146102a15780630675b7c6146102c557806306fdde03146102e7578063081812fc14610309575b600080fd5b34801561027857600080fd5b5061028c6102873660046121a6565b61082e565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b760105481565b604051908152602001610298565b3480156102d157600080fd5b506102e56102e03660046121ce565b610880565b005b3480156102f357600080fd5b506102fc6108ca565b6040516102989190612491565b34801561031557600080fd5b5061033f61032436600461225b565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610298565b61036a610365366004612320565b610958565b604051610298919061244d565b34801561038357600080fd5b506102e5610392366004612145565b610c4e565b3480156103a357600080fd5b506102e56103b236600461216e565b610d30565b3480156103c357600080fd5b506102b76103d23660046122ff565b600d60209081526000928352604080842090915290825290205481565b3480156103fb57600080fd5b506012546102b7565b34801561041057600080fd5b506102b761041f36600461225b565b610d6d565b34801561043057600080fd5b506102e561043f3660046120d4565b610dd3565b34801561045057600080fd5b506102e561045f366004612295565b610e45565b34801561047057600080fd5b506102b761047f36600461225b565b611018565b34801561049057600080fd5b506102fc611074565b3480156104a557600080fd5b506102e5611081565b3480156104ba57600080fd5b5060155461033f906001600160a01b031681565b3480156104da57600080fd5b506102b7600f5481565b61036a6104f236600461225b565b61113a565b34801561050357600080fd5b5061033f61051236600461225b565b611267565b34801561052357600080fd5b5061028c610532366004612273565b600c60209081526000928352604080842090915290825290205460ff1681565b34801561055e57600080fd5b506102b761056d36600461225b565b6112be565b34801561057e57600080fd5b506102b761058d366004612088565b6112c9565b34801561059e57600080fd5b506102e56105ad36600461225b565b61132c565b3480156105be57600080fd5b5060065461033f906001600160a01b031681565b3480156105de57600080fd5b506102fc6113f1565b3480156105f357600080fd5b506102b760095481565b34801561060957600080fd5b506102e561061836600461210f565b6113fe565b34801561062957600080fd5b506102b760085481565b34801561063f57600080fd5b506102e561064e36600461225b565b61146a565b34801561065f57600080fd5b5061068761066e36600461225b565b6007602052600090815260409020805460019091015482565b60408051928352602083019190915201610298565b3480156106a857600080fd5b506102e56106b736600461225b565b611499565b3480156106c857600080fd5b506102b76106d7366004612145565b6114c8565b3480156106e857600080fd5b5061036a6106f736600461225b565b6114f9565b34801561070857600080fd5b506102fc61071736600461225b565b6115c9565b34801561072857600080fd5b506102e561073736600461225b565b6115fd565b34801561074857600080fd5b506102b760175481565b34801561075e57600080fd5b506102e561076d36600461225b565b61162c565b34801561077e57600080fd5b506102b760185481565b34801561079457600080fd5b506102b7600e5481565b3480156107aa57600080fd5b5061028c6107b93660046120a2565b600560209081526000928352604080842090915290825290205460ff1681565b3480156107e557600080fd5b506102e56107f43660046122ff565b611659565b34801561080557600080fd5b506102e56116de565b34801561081a57600080fd5b506102e5610829366004612088565b61178c565b60006301ffc9a760e01b6001600160e01b03198316148061085f57506380ac58cd60e01b6001600160e01b03198316145b8061087a5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146108b35760405162461bcd60e51b81526004016108aa906124c4565b60405180910390fd5b80516108c6906019906020840190611f55565b5050565b600080546108d7906125a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610903906125a6565b80156109505780601f1061092557610100808354040283529160200191610950565b820191906000526020600020905b81548152906001019060200180831161093357829003601f168201915b505050505081565b606061096387611018565b3410156109a65760405162461bcd60e51b815260206004820152601160248201527056616c75652062656c6f7720707269636560781b60448201526064016108aa565b6000868152600c6020908152604080832033845290915290205460ff1615610a035760405162461bcd60e51b815260206004820152601060248201526f416c726561647920636c61696d65642160801b60448201526064016108aa565b6040516bffffffffffffffffffffffff193360601b166020820152603481018790526000906054016040516020818303038152906040528051906020012090506000600187604051602001610a8491907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff891690820152606081018790526080810186905260a0016020604051602081039080840390855afa158015610ae2573d6000803e3d6000fd5b505050602060405103519050868214610b2c5760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840d0c2e6d60a31b60448201526064016108aa565b6006546001600160a01b03828116911614610b795760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b60448201526064016108aa565b6000888152600c602090815260408083203384529091529020805460ff19166001179055610ba56117bf565b60008967ffffffffffffffff811115610bce57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610bf7578160200160208202803683370190505b50905060005b8a811015610c4057610c0d61188e565b828281518110610c2d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600101610bfd565b509998505050505050505050565b6000818152600260205260409020546001600160a01b031633811480610c9757506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610cd45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016108aa565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d5a5760405162461bcd60e51b81526004016108aa906124c4565b6011805460ff1916911515919091179055565b600854600082815260076020526040812054909182916402540be40091610d9391612544565b610d9d9190612530565b600084815260076020526040902060010154909150610dc2906402540be40090612530565b610dcc9082612563565b9392505050565b6000818152600a60205260409020541580610e095750600b546000828152600a6020526040902054610e06904290612563565b10155b610e1257600080fd5b6000818152600a6020526040812055610e2b83826118cd565b610e3582826119d2565b610e40838383611a22565b505050565b6006546001600160a01b03163314610e6f5760405162461bcd60e51b81526004016108aa906124c4565b8051825114610ecb5760405162461bcd60e51b815260206004820152602260248201527f51747920696e707574207673207072696365206c656e677468206d69736d61746044820152610c6d60f31b60648201526084016108aa565b600e839055600f8054600090610ee0906125e1565b909155506000805b8351811015610fb357601054848281518110610f1457634e487b7160e01b600052603260045260246000fd5b60200260200101511415610f2757600191505b828181518110610f4757634e487b7160e01b600052603260045260246000fd5b6020026020010151600d6000600f5481526020019081526020016000206000868481518110610f8657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020819055508080610fab906125e1565b915050610ee8565b50806110125760405162461bcd60e51b815260206004820152602860248201527f70726963657320646f206e6f7420696e636c75646520746865206d6178206d696044820152676e7420707269636560c01b60648201526084016108aa565b50505050565b600f546000908152600d602090815260408083208484529091528120546010548311156110605750600f546000908152600d6020908152604080832060105484529091529020545b8061106a5750600e545b610dcc8382612544565b601980546108d7906125a6565b6006546001600160a01b031633146110ab5760405162461bcd60e51b81526004016108aa906124c4565b60155460065460175460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b1580156110ff57600080fd5b505af1158015611113573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611137919061218a565b50565b60603461114683611018565b11156111805760405162461bcd60e51b81526020600482015260096024820152681d5b99195c9c185a5960ba1b60448201526064016108aa565b60115460ff166111bd5760405162461bcd60e51b81526020600482015260086024820152676e6f74206c69766560c01b60448201526064016108aa565b6111c56117bf565b60008267ffffffffffffffff8111156111ee57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611217578160200160208202803683370190505b50905060005b838110156112605761122d61188e565b82828151811061124d57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161121d565b5092915050565b6000818152600260205260409020546001600160a01b0316806112b95760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b60448201526064016108aa565b919050565b600061087a82610d6d565b60006001600160a01b0382166113105760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064016108aa565b506001600160a01b031660009081526003602052604090205490565b61133581611267565b6001600160a01b0316336001600160a01b0316146113815760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064016108aa565b6000818152600a60209081526040808320429055600790915290206064908190556008546113ae91612544565b600082815260076020526040812060010180549091906113cf908490612518565b925050819055506064600960008282546113e99190612518565b909155505050565b600180546108d7906125a6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146114945760405162461bcd60e51b81526004016108aa906124c4565b600b55565b6006546001600160a01b031633146114c35760405162461bcd60e51b81526004016108aa906124c4565b601255565b601360205281600052604060002081815481106114e457600080fd5b90600052602060002001600091509150505481565b6006546060906001600160a01b031633146115265760405162461bcd60e51b81526004016108aa906124c4565b61152e6117bf565b60008267ffffffffffffffff81111561155757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611580578160200160208202803683370190505b50905060005b838110156112605761159661188e565b8282815181106115b657634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600101611586565b606060196115d683611be9565b6040516020016115e7929190612393565b6040516020818303038152906040529050919050565b6006546001600160a01b031633146116275760405162461bcd60e51b81526004016108aa906124c4565b601055565b60095461163e6402540be40083612544565b6116489190612530565b600860008282546113e99190612518565b600b546000838152600a60205260409020546116759042612563565b1015801561169057506000828152600a602052604090205415155b6116c55760405162461bcd60e51b81526004016108aa906020808252600490820152636865726560e01b604082015260600190565b6000828152600a60205260408120556108c68183611d0b565b33600090815260136020526040812054905b818110156108c65733600090815260136020526040812080548390811061172757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050600b54600a600083815260200190815260200160002054426117569190612563565b1015801561177157506000818152600a602052604090205415155b1561178357611783816107f4836112be565b506001016116f0565b6006546001600160a01b031633146117b65760405162461bcd60e51b81526004016108aa906124c4565b61113781611df8565b6015546040516000916001600160a01b03169034908381818185875af1925050503d806000811461180c576040519150601f19603f3d011682016040523d82523d6000602084013e611811565b606091505b505090508061181f57600080fd5b6000612710601654346118329190612544565b61183c9190612530565b905080601760008282546118509190612518565b90915550506009541561186a576108c661076d8234612563565b6118748134612563565b601760008282546118859190612518565b90915550505050565b6000806018600081546118a0906125e1565b919050819055905060125460185411156118b957600080fd5b6118c33382611e4a565b6112b933826119d2565b6000818152601460209081526040808320546001600160a01b038616845260139092528220805491929161190390600190612563565b8154811061192157634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060136000866001600160a01b03166001600160a01b03168152602001908152602001600020838154811061197357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092556001600160a01b03861681526013909152604090208054806119b657634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6001600160a01b0382166000818152601360209081526040822080546001818101835582855292842001859055929091529054611a0f9190612563565b6000918252601460205260409091205550565b6000818152600260205260409020546001600160a01b03848116911614611a785760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016108aa565b6001600160a01b038216611ac25760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016108aa565b336001600160a01b0384161480611afc57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b80611b1d57506000818152600460205260409020546001600160a01b031633145b611b5a5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016108aa565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606081611c0d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c375780611c21816125e1565b9150611c309050600a83612530565b9150611c11565b60008167ffffffffffffffff811115611c6057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c8a576020820181803683370190505b5090505b8415611d0357611c9f600183612563565b9150611cac600a866125fc565b611cb7906030612518565b60f81b818381518110611cda57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cfc600a86612530565b9450611c8e565b949350505050565b611d1481611267565b6001600160a01b0316336001600160a01b0316148015611d3c5750611d38816112be565b8211155b611d4557600080fd5b60008181526007602052604081208181556001018190556009805460649290611d6f908490612563565b909155505060155460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015611dc057600080fd5b505af1158015611dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e40919061218a565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611e945760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016108aa565b6000818152600260205260409020546001600160a01b031615611eea5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016108aa565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f61906125a6565b90600052602060002090601f016020900481019282611f835760008555611fc9565b82601f10611f9c57805160ff1916838001178555611fc9565b82800160010185558215611fc9579182015b82811115611fc9578251825591602001919060010190611fae565b50611fd5929150611fd9565b5090565b5b80821115611fd55760008155600101611fda565b80356001600160a01b03811681146112b957600080fd5b600082601f830112612015578081fd5b8135602067ffffffffffffffff8211156120315761203161263c565b8160051b6120408282016124e7565b83815282810190868401838801850189101561205a578687fd5b8693505b8584101561207c57803583526001939093019291840191840161205e565b50979650505050505050565b600060208284031215612099578081fd5b610dcc82611fee565b600080604083850312156120b4578081fd5b6120bd83611fee565b91506120cb60208401611fee565b90509250929050565b6000806000606084860312156120e8578081fd5b6120f184611fee565b92506120ff60208501611fee565b9150604084013590509250925092565b60008060408385031215612121578182fd5b61212a83611fee565b9150602083013561213a81612652565b809150509250929050565b60008060408385031215612157578182fd5b61216083611fee565b946020939093013593505050565b60006020828403121561217f578081fd5b8135610dcc81612652565b60006020828403121561219b578081fd5b8151610dcc81612652565b6000602082840312156121b7578081fd5b81356001600160e01b031981168114610dcc578182fd5b600060208083850312156121e0578182fd5b823567ffffffffffffffff808211156121f7578384fd5b818501915085601f83011261220a578384fd5b81358181111561221c5761221c61263c565b61222e601f8201601f191685016124e7565b91508082528684828501011115612243578485fd5b80848401858401378101909201929092529392505050565b60006020828403121561226c578081fd5b5035919050565b60008060408385031215612285578182fd5b823591506120cb60208401611fee565b6000806000606084860312156122a9578283fd5b83359250602084013567ffffffffffffffff808211156122c7578384fd5b6122d387838801612005565b935060408601359150808211156122e8578283fd5b506122f586828701612005565b9150509250925092565b60008060408385031215612311578182fd5b50508035926020909101359150565b60008060008060008060c08789031215612338578384fd5b863595506020870135945060408701359350606087013560ff8116811461235d578283fd5b9598949750929560808101359460a0909101359350915050565b6000815161238981856020860161257a565b9290920192915050565b600080845482600182811c9150808316806123af57607f831692505b60208084108214156123cf57634e487b7160e01b87526022600452602487fd5b8180156123e357600181146123f457612420565b60ff19861689528489019650612420565b60008b815260209020885b868110156124185781548b8201529085019083016123ff565b505084890196505b5050505050506124446124338286612377565b64173539b7b760d91b815260050190565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561248557835183529284019291840191600101612469565b50909695505050505050565b60208152600082518060208401526124b081604085016020870161257a565b601f01601f19169190910160400192915050565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125105761251061263c565b604052919050565b6000821982111561252b5761252b612610565b500190565b60008261253f5761253f612626565b500490565b600081600019048311821515161561255e5761255e612610565b500290565b60008282101561257557612575612610565b500390565b60005b8381101561259557818101518382015260200161257d565b838111156110125750506000910152565b600181811c908216806125ba57607f821691505b602082108114156125db57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125f5576125f5612610565b5060010190565b60008261260b5761260b612626565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461113757600080fdfea2646970667358221220dc6c1d0e0eecb72ef5ba00d58b62d32104e022c4d33ceaf97ea170e6f128967064736f6c63430008040033697066733a2f2f516d5759743658657a4879375042774359454870575a596653656d6a4777574d70485378526d58566653464576512f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000c52617070656172734e465473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085241505045415253000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c806370a0823111610144578063c1f26123116100b6578063e00dd1611161007a578063e00dd16114610772578063e329c7f114610788578063e985e9c51461079e578063eaaf1fca146107d9578063ed490326146107f9578063f2fde38b1461080e57600080fd5b8063c1f26123146106dc578063c87b56dd146106fc578063cbd538001461071c578063cd9a1b631461073c578063db9f8c3b1461075257600080fd5b8063a22cb46511610108578063a22cb465146105fd578063a2d6b25f1461061d578063ae04d45d14610633578063b02c43d014610653578063b6a3f59a1461069c578063ba27d56f146106bc57600080fd5b806370a08231146105725780637655a590146105925780638da5cb5b146105b257806395d89b41146105d257806396c82e57146105e757600080fd5b806323b872dd116101dd5780633fc8cef3116101a15780633fc8cef3146104ae57806348dfeb27146104ce5780634b6d69d3146104e45780636352211e146104f75780636acf0b98146105175780636d43d9f11461055257600080fd5b806323b872dd14610424578063269748f81461044457806326a49e37146104645780632b9d8c9a146104845780633e73c83f1461049957600080fd5b8063090933571161022f5780630909335714610357578063095ea7b3146103775780630e2d56cf14610397578063174a9b74146103b757806318160ddd146103ef5780631ab2f6af1461040457600080fd5b806301ffc9a71461026c57806305859eed146102a15780630675b7c6146102c557806306fdde03146102e7578063081812fc14610309575b600080fd5b34801561027857600080fd5b5061028c6102873660046121a6565b61082e565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b760105481565b604051908152602001610298565b3480156102d157600080fd5b506102e56102e03660046121ce565b610880565b005b3480156102f357600080fd5b506102fc6108ca565b6040516102989190612491565b34801561031557600080fd5b5061033f61032436600461225b565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610298565b61036a610365366004612320565b610958565b604051610298919061244d565b34801561038357600080fd5b506102e5610392366004612145565b610c4e565b3480156103a357600080fd5b506102e56103b236600461216e565b610d30565b3480156103c357600080fd5b506102b76103d23660046122ff565b600d60209081526000928352604080842090915290825290205481565b3480156103fb57600080fd5b506012546102b7565b34801561041057600080fd5b506102b761041f36600461225b565b610d6d565b34801561043057600080fd5b506102e561043f3660046120d4565b610dd3565b34801561045057600080fd5b506102e561045f366004612295565b610e45565b34801561047057600080fd5b506102b761047f36600461225b565b611018565b34801561049057600080fd5b506102fc611074565b3480156104a557600080fd5b506102e5611081565b3480156104ba57600080fd5b5060155461033f906001600160a01b031681565b3480156104da57600080fd5b506102b7600f5481565b61036a6104f236600461225b565b61113a565b34801561050357600080fd5b5061033f61051236600461225b565b611267565b34801561052357600080fd5b5061028c610532366004612273565b600c60209081526000928352604080842090915290825290205460ff1681565b34801561055e57600080fd5b506102b761056d36600461225b565b6112be565b34801561057e57600080fd5b506102b761058d366004612088565b6112c9565b34801561059e57600080fd5b506102e56105ad36600461225b565b61132c565b3480156105be57600080fd5b5060065461033f906001600160a01b031681565b3480156105de57600080fd5b506102fc6113f1565b3480156105f357600080fd5b506102b760095481565b34801561060957600080fd5b506102e561061836600461210f565b6113fe565b34801561062957600080fd5b506102b760085481565b34801561063f57600080fd5b506102e561064e36600461225b565b61146a565b34801561065f57600080fd5b5061068761066e36600461225b565b6007602052600090815260409020805460019091015482565b60408051928352602083019190915201610298565b3480156106a857600080fd5b506102e56106b736600461225b565b611499565b3480156106c857600080fd5b506102b76106d7366004612145565b6114c8565b3480156106e857600080fd5b5061036a6106f736600461225b565b6114f9565b34801561070857600080fd5b506102fc61071736600461225b565b6115c9565b34801561072857600080fd5b506102e561073736600461225b565b6115fd565b34801561074857600080fd5b506102b760175481565b34801561075e57600080fd5b506102e561076d36600461225b565b61162c565b34801561077e57600080fd5b506102b760185481565b34801561079457600080fd5b506102b7600e5481565b3480156107aa57600080fd5b5061028c6107b93660046120a2565b600560209081526000928352604080842090915290825290205460ff1681565b3480156107e557600080fd5b506102e56107f43660046122ff565b611659565b34801561080557600080fd5b506102e56116de565b34801561081a57600080fd5b506102e5610829366004612088565b61178c565b60006301ffc9a760e01b6001600160e01b03198316148061085f57506380ac58cd60e01b6001600160e01b03198316145b8061087a5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6006546001600160a01b031633146108b35760405162461bcd60e51b81526004016108aa906124c4565b60405180910390fd5b80516108c6906019906020840190611f55565b5050565b600080546108d7906125a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610903906125a6565b80156109505780601f1061092557610100808354040283529160200191610950565b820191906000526020600020905b81548152906001019060200180831161093357829003601f168201915b505050505081565b606061096387611018565b3410156109a65760405162461bcd60e51b815260206004820152601160248201527056616c75652062656c6f7720707269636560781b60448201526064016108aa565b6000868152600c6020908152604080832033845290915290205460ff1615610a035760405162461bcd60e51b815260206004820152601060248201526f416c726561647920636c61696d65642160801b60448201526064016108aa565b6040516bffffffffffffffffffffffff193360601b166020820152603481018790526000906054016040516020818303038152906040528051906020012090506000600187604051602001610a8491907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff891690820152606081018790526080810186905260a0016020604051602081039080840390855afa158015610ae2573d6000803e3d6000fd5b505050602060405103519050868214610b2c5760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840d0c2e6d60a31b60448201526064016108aa565b6006546001600160a01b03828116911614610b795760405162461bcd60e51b815260206004820152600d60248201526c1058d8d95cdcc819195b9a5959609a1b60448201526064016108aa565b6000888152600c602090815260408083203384529091529020805460ff19166001179055610ba56117bf565b60008967ffffffffffffffff811115610bce57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610bf7578160200160208202803683370190505b50905060005b8a811015610c4057610c0d61188e565b828281518110610c2d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600101610bfd565b509998505050505050505050565b6000818152600260205260409020546001600160a01b031633811480610c9757506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610cd45760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016108aa565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6006546001600160a01b03163314610d5a5760405162461bcd60e51b81526004016108aa906124c4565b6011805460ff1916911515919091179055565b600854600082815260076020526040812054909182916402540be40091610d9391612544565b610d9d9190612530565b600084815260076020526040902060010154909150610dc2906402540be40090612530565b610dcc9082612563565b9392505050565b6000818152600a60205260409020541580610e095750600b546000828152600a6020526040902054610e06904290612563565b10155b610e1257600080fd5b6000818152600a6020526040812055610e2b83826118cd565b610e3582826119d2565b610e40838383611a22565b505050565b6006546001600160a01b03163314610e6f5760405162461bcd60e51b81526004016108aa906124c4565b8051825114610ecb5760405162461bcd60e51b815260206004820152602260248201527f51747920696e707574207673207072696365206c656e677468206d69736d61746044820152610c6d60f31b60648201526084016108aa565b600e839055600f8054600090610ee0906125e1565b909155506000805b8351811015610fb357601054848281518110610f1457634e487b7160e01b600052603260045260246000fd5b60200260200101511415610f2757600191505b828181518110610f4757634e487b7160e01b600052603260045260246000fd5b6020026020010151600d6000600f5481526020019081526020016000206000868481518110610f8657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020819055508080610fab906125e1565b915050610ee8565b50806110125760405162461bcd60e51b815260206004820152602860248201527f70726963657320646f206e6f7420696e636c75646520746865206d6178206d696044820152676e7420707269636560c01b60648201526084016108aa565b50505050565b600f546000908152600d602090815260408083208484529091528120546010548311156110605750600f546000908152600d6020908152604080832060105484529091529020545b8061106a5750600e545b610dcc8382612544565b601980546108d7906125a6565b6006546001600160a01b031633146110ab5760405162461bcd60e51b81526004016108aa906124c4565b60155460065460175460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b1580156110ff57600080fd5b505af1158015611113573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611137919061218a565b50565b60603461114683611018565b11156111805760405162461bcd60e51b81526020600482015260096024820152681d5b99195c9c185a5960ba1b60448201526064016108aa565b60115460ff166111bd5760405162461bcd60e51b81526020600482015260086024820152676e6f74206c69766560c01b60448201526064016108aa565b6111c56117bf565b60008267ffffffffffffffff8111156111ee57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611217578160200160208202803683370190505b50905060005b838110156112605761122d61188e565b82828151811061124d57634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161121d565b5092915050565b6000818152600260205260409020546001600160a01b0316806112b95760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b60448201526064016108aa565b919050565b600061087a82610d6d565b60006001600160a01b0382166113105760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064016108aa565b506001600160a01b031660009081526003602052604090205490565b61133581611267565b6001600160a01b0316336001600160a01b0316146113815760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064016108aa565b6000818152600a60209081526040808320429055600790915290206064908190556008546113ae91612544565b600082815260076020526040812060010180549091906113cf908490612518565b925050819055506064600960008282546113e99190612518565b909155505050565b600180546108d7906125a6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146114945760405162461bcd60e51b81526004016108aa906124c4565b600b55565b6006546001600160a01b031633146114c35760405162461bcd60e51b81526004016108aa906124c4565b601255565b601360205281600052604060002081815481106114e457600080fd5b90600052602060002001600091509150505481565b6006546060906001600160a01b031633146115265760405162461bcd60e51b81526004016108aa906124c4565b61152e6117bf565b60008267ffffffffffffffff81111561155757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611580578160200160208202803683370190505b50905060005b838110156112605761159661188e565b8282815181106115b657634e487b7160e01b600052603260045260246000fd5b6020908102919091010152600101611586565b606060196115d683611be9565b6040516020016115e7929190612393565b6040516020818303038152906040529050919050565b6006546001600160a01b031633146116275760405162461bcd60e51b81526004016108aa906124c4565b601055565b60095461163e6402540be40083612544565b6116489190612530565b600860008282546113e99190612518565b600b546000838152600a60205260409020546116759042612563565b1015801561169057506000828152600a602052604090205415155b6116c55760405162461bcd60e51b81526004016108aa906020808252600490820152636865726560e01b604082015260600190565b6000828152600a60205260408120556108c68183611d0b565b33600090815260136020526040812054905b818110156108c65733600090815260136020526040812080548390811061172757634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050600b54600a600083815260200190815260200160002054426117569190612563565b1015801561177157506000818152600a602052604090205415155b1561178357611783816107f4836112be565b506001016116f0565b6006546001600160a01b031633146117b65760405162461bcd60e51b81526004016108aa906124c4565b61113781611df8565b6015546040516000916001600160a01b03169034908381818185875af1925050503d806000811461180c576040519150601f19603f3d011682016040523d82523d6000602084013e611811565b606091505b505090508061181f57600080fd5b6000612710601654346118329190612544565b61183c9190612530565b905080601760008282546118509190612518565b90915550506009541561186a576108c661076d8234612563565b6118748134612563565b601760008282546118859190612518565b90915550505050565b6000806018600081546118a0906125e1565b919050819055905060125460185411156118b957600080fd5b6118c33382611e4a565b6112b933826119d2565b6000818152601460209081526040808320546001600160a01b038616845260139092528220805491929161190390600190612563565b8154811061192157634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060136000866001600160a01b03166001600160a01b03168152602001908152602001600020838154811061197357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092556001600160a01b03861681526013909152604090208054806119b657634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6001600160a01b0382166000818152601360209081526040822080546001818101835582855292842001859055929091529054611a0f9190612563565b6000918252601460205260409091205550565b6000818152600260205260409020546001600160a01b03848116911614611a785760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016108aa565b6001600160a01b038216611ac25760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016108aa565b336001600160a01b0384161480611afc57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b80611b1d57506000818152600460205260409020546001600160a01b031633145b611b5a5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016108aa565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606081611c0d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c375780611c21816125e1565b9150611c309050600a83612530565b9150611c11565b60008167ffffffffffffffff811115611c6057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c8a576020820181803683370190505b5090505b8415611d0357611c9f600183612563565b9150611cac600a866125fc565b611cb7906030612518565b60f81b818381518110611cda57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611cfc600a86612530565b9450611c8e565b949350505050565b611d1481611267565b6001600160a01b0316336001600160a01b0316148015611d3c5750611d38816112be565b8211155b611d4557600080fd5b60008181526007602052604081208181556001018190556009805460649290611d6f908490612563565b909155505060155460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015611dc057600080fd5b505af1158015611dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e40919061218a565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611e945760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016108aa565b6000818152600260205260409020546001600160a01b031615611eea5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016108aa565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f61906125a6565b90600052602060002090601f016020900481019282611f835760008555611fc9565b82601f10611f9c57805160ff1916838001178555611fc9565b82800160010185558215611fc9579182015b82811115611fc9578251825591602001919060010190611fae565b50611fd5929150611fd9565b5090565b5b80821115611fd55760008155600101611fda565b80356001600160a01b03811681146112b957600080fd5b600082601f830112612015578081fd5b8135602067ffffffffffffffff8211156120315761203161263c565b8160051b6120408282016124e7565b83815282810190868401838801850189101561205a578687fd5b8693505b8584101561207c57803583526001939093019291840191840161205e565b50979650505050505050565b600060208284031215612099578081fd5b610dcc82611fee565b600080604083850312156120b4578081fd5b6120bd83611fee565b91506120cb60208401611fee565b90509250929050565b6000806000606084860312156120e8578081fd5b6120f184611fee565b92506120ff60208501611fee565b9150604084013590509250925092565b60008060408385031215612121578182fd5b61212a83611fee565b9150602083013561213a81612652565b809150509250929050565b60008060408385031215612157578182fd5b61216083611fee565b946020939093013593505050565b60006020828403121561217f578081fd5b8135610dcc81612652565b60006020828403121561219b578081fd5b8151610dcc81612652565b6000602082840312156121b7578081fd5b81356001600160e01b031981168114610dcc578182fd5b600060208083850312156121e0578182fd5b823567ffffffffffffffff808211156121f7578384fd5b818501915085601f83011261220a578384fd5b81358181111561221c5761221c61263c565b61222e601f8201601f191685016124e7565b91508082528684828501011115612243578485fd5b80848401858401378101909201929092529392505050565b60006020828403121561226c578081fd5b5035919050565b60008060408385031215612285578182fd5b823591506120cb60208401611fee565b6000806000606084860312156122a9578283fd5b83359250602084013567ffffffffffffffff808211156122c7578384fd5b6122d387838801612005565b935060408601359150808211156122e8578283fd5b506122f586828701612005565b9150509250925092565b60008060408385031215612311578182fd5b50508035926020909101359150565b60008060008060008060c08789031215612338578384fd5b863595506020870135945060408701359350606087013560ff8116811461235d578283fd5b9598949750929560808101359460a0909101359350915050565b6000815161238981856020860161257a565b9290920192915050565b600080845482600182811c9150808316806123af57607f831692505b60208084108214156123cf57634e487b7160e01b87526022600452602487fd5b8180156123e357600181146123f457612420565b60ff19861689528489019650612420565b60008b815260209020885b868110156124185781548b8201529085019083016123ff565b505084890196505b5050505050506124446124338286612377565b64173539b7b760d91b815260050190565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561248557835183529284019291840191600101612469565b50909695505050505050565b60208152600082518060208401526124b081604085016020870161257a565b601f01601f19169190910160400192915050565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156125105761251061263c565b604052919050565b6000821982111561252b5761252b612610565b500190565b60008261253f5761253f612626565b500490565b600081600019048311821515161561255e5761255e612610565b500290565b60008282101561257557612575612610565b500390565b60005b8381101561259557818101518382015260200161257d565b838111156110125750506000910152565b600181811c908216806125ba57607f821691505b602082108114156125db57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125f5576125f5612610565b5060010190565b60008261260b5761260b612626565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461113757600080fdfea2646970667358221220dc6c1d0e0eecb72ef5ba00d58b62d32104e022c4d33ceaf97ea170e6f128967064736f6c63430008040033

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

000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000c52617070656172734e465473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085241505045415253000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _devFeeBP (uint256): 10000
Arg [2] : _lockTime (uint256): 1000
Arg [3] : _initalSupplyCap (uint256): 5000
Arg [4] : _initialMintAmount (uint256): 1
Arg [5] : _name (string): RappearsNFTs
Arg [6] : _symbol (string): RAPPEARS

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [8] : 52617070656172734e4654730000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [10] : 5241505045415253000000000000000000000000000000000000000000000000


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.