ETH Price: $3,468.82 (+4.55%)

Token

Valorem Access Pass (VALPASS)
 

Overview

Max Total Supply

1,058 VALPASS

Holders

809

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 VALPASS
0x187900dfa38f3a9c6a22a8dbe4d5b29006a3d457
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:
ValoremAccessPass

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 5 : ValoremAccessPass.sol
// SPDX-License-Identifier: MIT
// Valorem Labs Inc. (c) 2023.
pragma solidity 0.8.18;

import {ERC721} from "solmate/tokens/ERC721.sol";
import "./interfaces/IERC2981.sol";
import {Owned} from "solmate/auth/Owned.sol";
import "./Utils.sol";

/*//////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                //
//   $$$$$$$$$$                                                                                   //
//    $$$$$$$$                                  _|                                                //
//     $$$$$$ $$$$$$$$$$   _|      _|   _|_|_|  _|    _|_|    _|  _|_|   _|_|    _|_|_|  _|_|     //
//       $$    $$$$$$$$    _|      _| _|    _|  _|  _|    _|  _|_|     _|_|_|_|  _|    _|    _|   //
//   $$$$$$$$$$ $$$$$$       _|  _|   _|    _|  _|  _|    _|  _|       _|        _|    _|    _|   //
//    $$$$$$$$    $$           _|       _|_|_|  _|    _|_|    _|         _|_|_|  _|    _|    _|   //
//     $$$$$$                                                                                     //
//       $$                                                                                       //
//                                                                                                //
//////////////////////////////////////////////////////////////////////////////////////////////////*/

/**
 * @title Valorem Access Pass NFT
 * @author megsdevs
 * @author neodaoist
 * @author 0xAlcibiades
 * @notice The inaugural Valorem Access Pass NFT.
 */
contract ValoremAccessPass is ERC721, IERC2981, Owned {
    /*//////////////////////////////////////////////////////////////
    // Errors
    //////////////////////////////////////////////////////////////*/

    /// @notice Cannot mint more than the max supply.
    /// @param attemptedQuantity The amount of quantity attempting to be minted.
    /// @param maxSupply The allowed max supply that can be minted.
    error MintQuantityCannotExceedMaxSupply(uint256 attemptedQuantity, uint256 maxSupply);

    /// @notice Cannot request tokenUri for an invalid token.
    /// @param tokenId The requested tokenId.
    error InvalidToken(uint256 tokenId);

    /*//////////////////////////////////////////////////////////////
    // Immutable/Constant - Public
    //////////////////////////////////////////////////////////////*/

    /// @notice Royalty percentage, expressed in basis points.
    uint16 public constant ROYALTY_PERCENTAGE_IN_BPS = 500;

    /// @notice Maximum number of mintable passes.
    uint256 public immutable maxSupply;

    /*//////////////////////////////////////////////////////////////
    // State Variables - Public
    //////////////////////////////////////////////////////////////*/

    /// @notice Total number of minted passes.
    uint256 public totalSupply;

    /*//////////////////////////////////////////////////////////////
    // Constructor
    //////////////////////////////////////////////////////////////*/

    /// @notice Sets supply.
    /// @param _maxSupply Maximum number of mintable passes.
    constructor(address _owner, uint256 _maxSupply) ERC721("Valorem Access Pass", "VALPASS") Owned(_owner) {
        maxSupply = _maxSupply;
    }

    /*//////////////////////////////////////////////////////////////
    // Mint Logic
    //////////////////////////////////////////////////////////////*/

    /// @notice Mints access passes to N arbitrary addresses, one per supplied address.
    /// @param recipients Recipients of the minted passes.
    function airdropTo(address[] calldata recipients) external onlyOwner {
        unchecked {
            uint256 _totalSupply = totalSupply;
            uint256 _endingSupply = _totalSupply + recipients.length;

            if (_endingSupply > maxSupply) {
                revert MintQuantityCannotExceedMaxSupply(_endingSupply, maxSupply);
            }

            for (uint256 i = 0; i < recipients.length; i++) {
                _mint(recipients[i], ++_totalSupply);
            }

            totalSupply = _endingSupply;
        }
    }

    /*//////////////////////////////////////////////////////////////
    // URI Logic
    //////////////////////////////////////////////////////////////*/

    /// @notice Returns storefront-level metadata.
    function contractURI() public pure returns (string memory) {
        /* solhint-disable quotes */
        return string(
            abi.encodePacked(
                "data:application/json;base64,",
                Utils.encode(
                    bytes(
                        string(
                            abi.encodePacked(
                                '{"name": "Valorem Access Pass", ',
                                '"description": "The Valorem Access Pass NFT grants perennial early access to Valorem features.", ',
                                '"image": "ipfs://bafkreiacwd3ok66tvo5gxj24fs7tq5h5asxwb6uzqgcfd4cpjajl2v6s7e", ',
                                '"external_link": "https://valorem.xyz/"}'
                            )
                        )
                    )
                )
            )
        );
    }

    /// @notice Returns a token's URI if it has been minted.
    /// @param tokenId The ID of the token to get the URI for.
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        if (tokenId == 0 || _ownerOf[tokenId] == address(0)) {
            revert InvalidToken(tokenId);
        }

        /* solhint-disable quotes */
        return string(
            abi.encodePacked(
                "data:application/json;base64,",
                Utils.encode(
                    bytes(
                        string(
                            abi.encodePacked(
                                '{"name": "Valorem Access Pass", ',
                                '"description": "The Valorem Access Pass NFT grants perennial early access to Valorem features.", ',
                                '"image": "ipfs://bafybeig6urghfrb3be7tepd4jp44pjm6fnvnc2yeba5f46x6kcqhjvln2y", ',
                                '"animation_url": "ipfs://bafybeifd4w76c4z4o44omf5oj7fnajp36suhh3pnyplt2lhk2k576qghxa/Valorem%20Access%20Pass%20NFT%20animation%20(final).mp4", ',
                                '"external_url": "https://valorem.xyz/", ',
                                '"background_color": "#151B50", ',
                                '"content": {"mimeType": "video/mp4", '
                                '"hash": "bafybeiftiyr3tw2v256wvwu3kogjo7vr53qg7oukj4n3c2ifwo7g3zl3wq", ',
                                '"uri": "ipfs://bafybeifd4w76c4z4o44omf5oj7fnajp36suhh3pnyplt2lhk2k576qghxa/Valorem%20Access%20Pass%20NFT%20animation%20(final).mp4"}}'
                            )
                        )
                    )
                )
            )
        );
    }

    /*//////////////////////////////////////////////////////////////
    // Royalty Logic
    //////////////////////////////////////////////////////////////*/

    function royaltyInfo(uint256, /*_tokenId*/ uint256 _salePrice)
        public
        view
        virtual
        override
        returns (address, uint256)
    {
        uint256 royaltyAmount = (_salePrice * ROYALTY_PERCENTAGE_IN_BPS) / 10_000;
        return (owner, royaltyAmount);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }
}

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/transmissions11/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;

    function tokenURI(uint256 id) public view virtual returns (string memory);

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

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

    /*//////////////////////////////////////////////////////////////
                              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/transmissions11/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 : IERC2981.sol
// SPDX-License-Identifier: MIT
// Valorem Labs Inc. (c) 2023.
pragma solidity 0.8.18;

interface IERC2981 {
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

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

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

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

    constructor(address _owner) {
        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function transferOwnership(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

File 5 of 5 : Utils.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

// [MIT License]
// @author Brecht Devos <[email protected]>
// @notice Encodes some bytes to the base64 representation
library Utils {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    bytes16 private constant _SYMBOLS = "0123456789abcdef";

    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for { let i := 0 } lt(i, len) {} {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"InvalidToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"attemptedQuantity","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"MintQuantityCannotExceedMaxSupply","type":"error"},{"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":"user","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":[],"name":"ROYALTY_PERCENTAGE_IN_BPS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"airdropTo","outputs":[],"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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","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"}]

60a06040523480156200001157600080fd5b5060405162001b1638038062001b16833981016040819052620000349162000104565b816040518060400160405280601381526020017f56616c6f72656d204163636573732050617373000000000000000000000000008152506040518060400160405280600781526020016656414c5041535360c81b81525081600090816200009c9190620001e5565b506001620000ab8282620001e5565b5050600680546001600160a01b0319166001600160a01b0384169081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060805250620002b1565b600080604083850312156200011857600080fd5b82516001600160a01b03811681146200013057600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200016b57607f821691505b6020821081036200018c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e057600081815260208120601f850160051c81016020861015620001bb5750805b601f850160051c820191505b81811015620001dc57828155600101620001c7565b5050505b505050565b81516001600160401b0381111562000201576200020162000140565b620002198162000212845462000156565b8462000192565b602080601f831160018114620002515760008415620002385750858301515b600019600386901b1c1916600185901b178555620001dc565b600085815260208120601f198616915b82811015620002825788860151825594840194600190910190840162000261565b5085821015620002a15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161183b620002db600039600081816102d001528181610743015261077e015261183b6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063c87b56dd1161007c578063c87b56dd146102b8578063d5abeb01146102cb578063e8a3d485146102f2578063e985e9c5146102fa578063f2fde38b14610328578063f6a9e0051461033b57600080fd5b806370a08231146102645780638da5cb5b1461027757806395d89b411461028a578063a22cb46514610292578063b88d4fde146102a557600080fd5b806323b872dd116100ff57806323b872dd146101e65780632a55205a146101f95780633ad0e6311461022b57806342842e0e1461023e5780636352211e1461025157600080fd5b806301ffc9a71461013c57806306fdde0314610164578063081812fc14610179578063095ea7b3146101ba57806318160ddd146101cf575b600080fd5b61014f61014a366004610f49565b610357565b60405190151581526020015b60405180910390f35b61016c610382565b60405161015b9190610f91565b6101a2610187366004610fc4565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b6101cd6101c8366004610ff4565b610410565b005b6101d860075481565b60405190815260200161015b565b6101cd6101f436600461101e565b6104f7565b61020c61020736600461105a565b6106be565b604080516001600160a01b03909316835260208301919091520161015b565b6101cd61023936600461107c565b6106f2565b6101cd61024c36600461101e565b6107fc565b6101a261025f366004610fc4565b6108f4565b6101d86102723660046110f1565b61094b565b6006546101a2906001600160a01b031681565b61016c6109ae565b6101cd6102a036600461110c565b6109bb565b6101cd6102b3366004611148565b610a27565b61016c6102c6366004610fc4565b610b0f565b6101d87f000000000000000000000000000000000000000000000000000000000000000081565b61016c610ba0565b61014f6103083660046111e3565b600560209081526000928352604080842090915290825290205460ff1681565b6101cd6103363660046110f1565b610bd8565b6103446101f481565b60405161ffff909116815260200161015b565b60006001600160e01b0319821663152a902d60e11b148061037c575061037c82610c6d565b92915050565b6000805461038f90611216565b80601f01602080910402602001604051908101604052809291908181526020018280546103bb90611216565b80156104085780601f106103dd57610100808354040283529160200191610408565b820191906000526020600020905b8154815290600101906020018083116103eb57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061045957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b61049b5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600260205260409020546001600160a01b0384811691161461054d5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610492565b6001600160a01b0382166105975760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610492565b336001600160a01b03841614806105d157506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b806105f257506000818152600460205260409020546001600160a01b031633145b61062f5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610492565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080806127106106d16101f486611266565b6106db919061127d565b6006546001600160a01b0316969095509350505050565b6006546001600160a01b0316331461073b5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610492565b6007548181017f00000000000000000000000000000000000000000000000000000000000000008111156107aa5760405162d9f6af60e41b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610492565b60005b838110156107f3576107eb8585838181106107ca576107ca61129f565b90506020020160208101906107df91906110f1565b84600101945084610cbb565b6001016107ad565b50600755505050565b6108078383836104f7565b6001600160a01b0382163b15806108b05750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a491906112b5565b6001600160e01b031916145b6108ef5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610492565b505050565b6000818152600260205260409020546001600160a01b0316806109465760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610492565b919050565b60006001600160a01b0382166109925760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610492565b506001600160a01b031660009081526003602052604090205490565b6001805461038f90611216565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610a328585856104f7565b6001600160a01b0384163b1580610ac95750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610a7a9033908a908990899089906004016112d2565b6020604051808303816000875af1158015610a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abd91906112b5565b6001600160e01b031916145b610b085760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610492565b5050505050565b6060811580610b3357506000828152600260205260409020546001600160a01b0316155b15610b545760405163124bad6360e31b815260048101839052602401610492565b610b7a604051602001610b66906113a5565b604051602081830303815290604052610dc6565b604051602001610b8a9190611685565b6040516020818303038152906040529050919050565b6060610bb4604051602001610b66906116ca565b604051602001610bc49190611685565b604051602081830303815290604052905090565b6006546001600160a01b03163314610c215760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610492565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60006301ffc9a760e01b6001600160e01b031983161480610c9e57506380ac58cd60e01b6001600160e01b03198316145b8061037c5750506001600160e01b031916635b5e139f60e01b1490565b6001600160a01b038216610d055760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610492565b6000818152600260205260409020546001600160a01b031615610d5b5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610492565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80516060906000819003610dea575050604080516020810190915260008152919050565b60006003610df983600261179c565b610e03919061127d565b610e0e906004611266565b90506000610e1d82602061179c565b67ffffffffffffffff811115610e3557610e356117af565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b50905060006040518060600160405280604081526020016117c6604091399050600181016020830160005b86811015610eeb576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101610e8a565b506003860660018114610f055760028114610f1657610f22565b613d3d60f01b600119830152610f22565b603d60f81b6000198301525b505050918152949350505050565b6001600160e01b031981168114610f4657600080fd5b50565b600060208284031215610f5b57600080fd5b8135610f6681610f30565b9392505050565b60005b83811015610f88578181015183820152602001610f70565b50506000910152565b6020815260008251806020840152610fb0816040850160208701610f6d565b601f01601f19169190910160400192915050565b600060208284031215610fd657600080fd5b5035919050565b80356001600160a01b038116811461094657600080fd5b6000806040838503121561100757600080fd5b61101083610fdd565b946020939093013593505050565b60008060006060848603121561103357600080fd5b61103c84610fdd565b925061104a60208501610fdd565b9150604084013590509250925092565b6000806040838503121561106d57600080fd5b50508035926020909101359150565b6000806020838503121561108f57600080fd5b823567ffffffffffffffff808211156110a757600080fd5b818501915085601f8301126110bb57600080fd5b8135818111156110ca57600080fd5b8660208260051b85010111156110df57600080fd5b60209290920196919550909350505050565b60006020828403121561110357600080fd5b610f6682610fdd565b6000806040838503121561111f57600080fd5b61112883610fdd565b91506020830135801515811461113d57600080fd5b809150509250929050565b60008060008060006080868803121561116057600080fd5b61116986610fdd565b945061117760208701610fdd565b935060408601359250606086013567ffffffffffffffff8082111561119b57600080fd5b818801915088601f8301126111af57600080fd5b8135818111156111be57600080fd5b8960208285010111156111d057600080fd5b9699959850939650602001949392505050565b600080604083850312156111f657600080fd5b6111ff83610fdd565b915061120d60208401610fdd565b90509250929050565b600181811c9082168061122a57607f821691505b60208210810361124a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037c5761037c611250565b60008261129a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156112c757600080fd5b8151610f6681610f30565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b7f226465736372697074696f6e223a20225468652056616c6f72656d204163636581527f73732050617373204e4654206772616e747320706572656e6e69616c2065617260208201527f6c792061636365737320746f2056616c6f72656d2066656174757265732e222c6040820152600160fd1b606082015260610190565b7f7b226e616d65223a202256616c6f72656d204163636573732050617373222c20815260006113d660208301611326565b7f22696d616765223a2022697066733a2f2f62616679626569673675726768667281527f623362653774657064346a703434706a6d36666e766e6332796562613566343660208201526e03c1b35b1b8b4353b3637193c91161608d1b60408201527f22616e696d6174696f6e5f75726c223a2022697066733a2f2f62616679626569604f8201527f66643477373663347a346f34346f6d66356f6a37666e616a7033367375686833606f8201527f706e79706c74326c686b326b35373671676878612f56616c6f72656d25323041608f8201527f6363657373253230506173732532304e4654253230616e696d6174696f6e253260af8201526e018143334b730b6149736b81a11161608d1b60cf8201527f2265787465726e616c5f75726c223a202268747470733a2f2f76616c6f72656d60de820152670173c3cbd179116160c51b60fe8201527f226261636b67726f756e645f636f6c6f72223a202223313531423530222c20006101068201527f22636f6e74656e74223a207b226d696d6554797065223a2022766964656f2f6d6101258201527f7034222c202268617368223a20226261667962656966746979723374773276326101458201527f353677767775336b6f676a6f37767235337167376f756b6a346e3363326966776101658201526b0379bb399bd3619bbb89116160a51b6101858201527f22757269223a2022697066733a2f2f6261667962656966643477373663347a346101918201527f6f34346f6d66356f6a37666e616a7033367375686833706e79706c74326c686b6101b18201527f326b35373671676878612f56616c6f72656d25323041636365737325323050616101d18201527f73732532304e4654253230616e696d6174696f6e2532302866696e616c292e6d6101f1820152647034227d7d60d81b6102118201526102168101610f66565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516116bd81601d850160208701610f6d565b91909101601d0192915050565b7f7b226e616d65223a202256616c6f72656d204163636573732050617373222c20815260006116fb60208301611326565b7f22696d616765223a2022697066733a2f2f6261666b72656961637764336f6b3681527f3674766f3567786a32346673377471356835617378776236757a71676366643460208201526e031b83530b536193b1b399bb291161608d1b60408201527f2265787465726e616c5f6c696e6b223a202268747470733a2f2f76616c6f7265604f820152676d2e78797a2f227d60c01b606f82015260770192915050565b8082018082111561037c5761037c611250565b634e487b7160e01b600052604160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212200f89f1b5538aef5e2cdbdd534eef4f76e732f3f27b227258c47044fb6b596b4364736f6c634300081200330000000000000000000000007bfb7451d5e937af1e098fe9574edf31b493e6cd0000000000000000000000000000000000000000000000000000000000000539

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063c87b56dd1161007c578063c87b56dd146102b8578063d5abeb01146102cb578063e8a3d485146102f2578063e985e9c5146102fa578063f2fde38b14610328578063f6a9e0051461033b57600080fd5b806370a08231146102645780638da5cb5b1461027757806395d89b411461028a578063a22cb46514610292578063b88d4fde146102a557600080fd5b806323b872dd116100ff57806323b872dd146101e65780632a55205a146101f95780633ad0e6311461022b57806342842e0e1461023e5780636352211e1461025157600080fd5b806301ffc9a71461013c57806306fdde0314610164578063081812fc14610179578063095ea7b3146101ba57806318160ddd146101cf575b600080fd5b61014f61014a366004610f49565b610357565b60405190151581526020015b60405180910390f35b61016c610382565b60405161015b9190610f91565b6101a2610187366004610fc4565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b6101cd6101c8366004610ff4565b610410565b005b6101d860075481565b60405190815260200161015b565b6101cd6101f436600461101e565b6104f7565b61020c61020736600461105a565b6106be565b604080516001600160a01b03909316835260208301919091520161015b565b6101cd61023936600461107c565b6106f2565b6101cd61024c36600461101e565b6107fc565b6101a261025f366004610fc4565b6108f4565b6101d86102723660046110f1565b61094b565b6006546101a2906001600160a01b031681565b61016c6109ae565b6101cd6102a036600461110c565b6109bb565b6101cd6102b3366004611148565b610a27565b61016c6102c6366004610fc4565b610b0f565b6101d87f000000000000000000000000000000000000000000000000000000000000053981565b61016c610ba0565b61014f6103083660046111e3565b600560209081526000928352604080842090915290825290205460ff1681565b6101cd6103363660046110f1565b610bd8565b6103446101f481565b60405161ffff909116815260200161015b565b60006001600160e01b0319821663152a902d60e11b148061037c575061037c82610c6d565b92915050565b6000805461038f90611216565b80601f01602080910402602001604051908101604052809291908181526020018280546103bb90611216565b80156104085780601f106103dd57610100808354040283529160200191610408565b820191906000526020600020905b8154815290600101906020018083116103eb57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061045957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b61049b5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600260205260409020546001600160a01b0384811691161461054d5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610492565b6001600160a01b0382166105975760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610492565b336001600160a01b03841614806105d157506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b806105f257506000818152600460205260409020546001600160a01b031633145b61062f5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610492565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080806127106106d16101f486611266565b6106db919061127d565b6006546001600160a01b0316969095509350505050565b6006546001600160a01b0316331461073b5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610492565b6007548181017f00000000000000000000000000000000000000000000000000000000000005398111156107aa5760405162d9f6af60e41b8152600481018290527f00000000000000000000000000000000000000000000000000000000000005396024820152604401610492565b60005b838110156107f3576107eb8585838181106107ca576107ca61129f565b90506020020160208101906107df91906110f1565b84600101945084610cbb565b6001016107ad565b50600755505050565b6108078383836104f7565b6001600160a01b0382163b15806108b05750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a491906112b5565b6001600160e01b031916145b6108ef5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610492565b505050565b6000818152600260205260409020546001600160a01b0316806109465760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610492565b919050565b60006001600160a01b0382166109925760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610492565b506001600160a01b031660009081526003602052604090205490565b6001805461038f90611216565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610a328585856104f7565b6001600160a01b0384163b1580610ac95750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610a7a9033908a908990899089906004016112d2565b6020604051808303816000875af1158015610a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abd91906112b5565b6001600160e01b031916145b610b085760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610492565b5050505050565b6060811580610b3357506000828152600260205260409020546001600160a01b0316155b15610b545760405163124bad6360e31b815260048101839052602401610492565b610b7a604051602001610b66906113a5565b604051602081830303815290604052610dc6565b604051602001610b8a9190611685565b6040516020818303038152906040529050919050565b6060610bb4604051602001610b66906116ca565b604051602001610bc49190611685565b604051602081830303815290604052905090565b6006546001600160a01b03163314610c215760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610492565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60006301ffc9a760e01b6001600160e01b031983161480610c9e57506380ac58cd60e01b6001600160e01b03198316145b8061037c5750506001600160e01b031916635b5e139f60e01b1490565b6001600160a01b038216610d055760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610492565b6000818152600260205260409020546001600160a01b031615610d5b5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610492565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80516060906000819003610dea575050604080516020810190915260008152919050565b60006003610df983600261179c565b610e03919061127d565b610e0e906004611266565b90506000610e1d82602061179c565b67ffffffffffffffff811115610e3557610e356117af565b6040519080825280601f01601f191660200182016040528015610e5f576020820181803683370190505b50905060006040518060600160405280604081526020016117c6604091399050600181016020830160005b86811015610eeb576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101610e8a565b506003860660018114610f055760028114610f1657610f22565b613d3d60f01b600119830152610f22565b603d60f81b6000198301525b505050918152949350505050565b6001600160e01b031981168114610f4657600080fd5b50565b600060208284031215610f5b57600080fd5b8135610f6681610f30565b9392505050565b60005b83811015610f88578181015183820152602001610f70565b50506000910152565b6020815260008251806020840152610fb0816040850160208701610f6d565b601f01601f19169190910160400192915050565b600060208284031215610fd657600080fd5b5035919050565b80356001600160a01b038116811461094657600080fd5b6000806040838503121561100757600080fd5b61101083610fdd565b946020939093013593505050565b60008060006060848603121561103357600080fd5b61103c84610fdd565b925061104a60208501610fdd565b9150604084013590509250925092565b6000806040838503121561106d57600080fd5b50508035926020909101359150565b6000806020838503121561108f57600080fd5b823567ffffffffffffffff808211156110a757600080fd5b818501915085601f8301126110bb57600080fd5b8135818111156110ca57600080fd5b8660208260051b85010111156110df57600080fd5b60209290920196919550909350505050565b60006020828403121561110357600080fd5b610f6682610fdd565b6000806040838503121561111f57600080fd5b61112883610fdd565b91506020830135801515811461113d57600080fd5b809150509250929050565b60008060008060006080868803121561116057600080fd5b61116986610fdd565b945061117760208701610fdd565b935060408601359250606086013567ffffffffffffffff8082111561119b57600080fd5b818801915088601f8301126111af57600080fd5b8135818111156111be57600080fd5b8960208285010111156111d057600080fd5b9699959850939650602001949392505050565b600080604083850312156111f657600080fd5b6111ff83610fdd565b915061120d60208401610fdd565b90509250929050565b600181811c9082168061122a57607f821691505b60208210810361124a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037c5761037c611250565b60008261129a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156112c757600080fd5b8151610f6681610f30565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b7f226465736372697074696f6e223a20225468652056616c6f72656d204163636581527f73732050617373204e4654206772616e747320706572656e6e69616c2065617260208201527f6c792061636365737320746f2056616c6f72656d2066656174757265732e222c6040820152600160fd1b606082015260610190565b7f7b226e616d65223a202256616c6f72656d204163636573732050617373222c20815260006113d660208301611326565b7f22696d616765223a2022697066733a2f2f62616679626569673675726768667281527f623362653774657064346a703434706a6d36666e766e6332796562613566343660208201526e03c1b35b1b8b4353b3637193c91161608d1b60408201527f22616e696d6174696f6e5f75726c223a2022697066733a2f2f62616679626569604f8201527f66643477373663347a346f34346f6d66356f6a37666e616a7033367375686833606f8201527f706e79706c74326c686b326b35373671676878612f56616c6f72656d25323041608f8201527f6363657373253230506173732532304e4654253230616e696d6174696f6e253260af8201526e018143334b730b6149736b81a11161608d1b60cf8201527f2265787465726e616c5f75726c223a202268747470733a2f2f76616c6f72656d60de820152670173c3cbd179116160c51b60fe8201527f226261636b67726f756e645f636f6c6f72223a202223313531423530222c20006101068201527f22636f6e74656e74223a207b226d696d6554797065223a2022766964656f2f6d6101258201527f7034222c202268617368223a20226261667962656966746979723374773276326101458201527f353677767775336b6f676a6f37767235337167376f756b6a346e3363326966776101658201526b0379bb399bd3619bbb89116160a51b6101858201527f22757269223a2022697066733a2f2f6261667962656966643477373663347a346101918201527f6f34346f6d66356f6a37666e616a7033367375686833706e79706c74326c686b6101b18201527f326b35373671676878612f56616c6f72656d25323041636365737325323050616101d18201527f73732532304e4654253230616e696d6174696f6e2532302866696e616c292e6d6101f1820152647034227d7d60d81b6102118201526102168101610f66565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516116bd81601d850160208701610f6d565b91909101601d0192915050565b7f7b226e616d65223a202256616c6f72656d204163636573732050617373222c20815260006116fb60208301611326565b7f22696d616765223a2022697066733a2f2f6261666b72656961637764336f6b3681527f3674766f3567786a32346673377471356835617378776236757a71676366643460208201526e031b83530b536193b1b399bb291161608d1b60408201527f2265787465726e616c5f6c696e6b223a202268747470733a2f2f76616c6f7265604f820152676d2e78797a2f227d60c01b606f82015260770192915050565b8082018082111561037c5761037c611250565b634e487b7160e01b600052604160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212200f89f1b5538aef5e2cdbdd534eef4f76e732f3f27b227258c47044fb6b596b4364736f6c63430008120033

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

0000000000000000000000007bfb7451d5e937af1e098fe9574edf31b493e6cd0000000000000000000000000000000000000000000000000000000000000539

-----Decoded View---------------
Arg [0] : _owner (address): 0x7BFB7451d5E937af1E098fe9574edf31b493E6cD
Arg [1] : _maxSupply (uint256): 1337

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007bfb7451d5e937af1e098fe9574edf31b493e6cd
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000539


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.