ETH Price: $2,352.02 (-4.00%)

Token

Quantum MintPass (QPASS)
 

Overview

Max Total Supply

24 QPASS

Holders

23

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
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:
QuantumMintPass

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 18 : QuantumMintPass.sol
// SPDX-License-Identifier: MIT
/*
    Inspiration from MetaHero MintPass https://etherscan.io/address/0x797a48c46be32aafcedcfd3d8992493d8a1f256b
*/

pragma solidity ^0.8.0;
import "./IQuantumMintPass.sol";
import "./OSContractURI.sol";
import "./ERC2981.sol";
import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol';
import '@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol';
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
import "@openzeppelin/contracts/utils/Address.sol";

contract QuantumMintPass is ERC2981, IQuantumMintPass, OSContractURI, Ownable, ERC1155Supply, ERC1155Burnable {

    struct MintPass {
        bytes32 merkleRoot;
        uint256 price;
        string uriSuffix;
        address redeemableContract; // contract of the redeemable NFT
    }

    event Claimed(uint mpId, address indexed account, uint amount);

    string public name;
    string public symbol;   

    uint private _counter;
    address payable private _treasury;
  
    mapping (uint256 => MintPass) public mintPasses;
    mapping (uint256 => mapping (address => bool)) public claimed;

    constructor(string memory baseURI, address payable treasury) ERC1155(baseURI) {
        name = "Quantum MintPass";
        symbol = "QPASS";
        _treasury = treasury;
    }  

    function setBaseURI(string memory baseURI) external onlyOwner {
        _setURI(baseURI);
    }

    function setContractURI(string calldata newUri) onlyOwner override public {
        super.setContractURI(newUri);
    }

    function setRoyalteFee(uint256 fee) onlyOwner override public {
        royaltyFee = fee;
    }

    function addMintPass(
        bytes32 merkleRoot,
        uint256 price,
        string memory uriSuffix,
        address redeemableContract
    ) external onlyOwner {
        mintPasses[_counter++] = MintPass(
            merkleRoot,
            price,
            uriSuffix,
            redeemableContract
        );
    }

    function editMintPass(
        uint256 mpId,
        bytes32 merkleRoot,
        uint256 price, 
        string memory uriSuffix,
        address redeemableContract
    ) external onlyOwner {
        mintPasses[mpId] = MintPass(
            merkleRoot,
            price,
            uriSuffix,
            redeemableContract
        );
    }

    function burnFromRedeem(
        address user, 
        uint256 mpId, 
        uint256 amount
    ) external override {
        require(mintPasses[mpId].redeemableContract == msg.sender, "burnFromRedeem: Only allowed from redeemable contract");
        _burn(user, mpId, amount);
    }  

    function claim(
        uint256 mpId,
        uint256 amount,
        bytes32[] calldata merkleProof
    ) external payable {
        MintPass memory mp = mintPasses[mpId];
        require(msg.value == mp.price * amount, "claim: invalid msg.value");
        require(mp.merkleRoot.length > 0, "claim: mint pass does not exist");
        require(!claimed[mpId][msg.sender], "claim: already claimed");
        bytes32 node = keccak256(abi.encodePacked(msg.sender, amount));
        require(MerkleProof.verify(merkleProof, mp.merkleRoot, node),"claim: Invalid proof.");
        claimed[mpId][msg.sender] = true;
        _mint(msg.sender, mpId, amount, "");
        emit Claimed(mpId, msg.sender, amount);
        Address.sendValue(_treasury, msg.value);
    }

    function uri(uint256 _id) public view override returns (string memory) {
        require(totalSupply(_id) > 0, "URI: nonexistent token");
        return string(abi.encodePacked(super.uri(_id), mintPasses[_id].uriSuffix));
    }

    function royaltyInfo(uint256 tokenId,uint256 salePrice) public override view returns (
        address receiver,
        uint256 royaltyAmount
    ) {
        return (_treasury, (salePrice * royaltyFee) / 10000);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC2981, ERC1155) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual override(ERC1155, ERC1155Supply) {
        super._mint(account, id, amount, data);
    }

    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override(ERC1155, ERC1155Supply) {
        super._mintBatch(to, ids, amounts, data);
    }

    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual override(ERC1155, ERC1155Supply) {
        super._burn(account, id, amount);
    }

    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual override(ERC1155, ERC1155Supply) {
        super._burnBatch(account, ids, amounts);
    }  

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override(ERC1155) {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    } 
}

File 2 of 18 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 3 of 18 : MerkleProof.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }
}

File 4 of 18 : ERC1155Supply.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC1155.sol";

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates weither any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_mint}.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual override {
        super._mint(account, id, amount, data);
        _totalSupply[id] += amount;
    }

    /**
     * @dev See {ERC1155-_mintBatch}.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._mintBatch(to, ids, amounts, data);
        for (uint256 i = 0; i < ids.length; ++i) {
            _totalSupply[ids[i]] += amounts[i];
        }
    }

    /**
     * @dev See {ERC1155-_burn}.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual override {
        super._burn(account, id, amount);
        _totalSupply[id] -= amount;
    }

    /**
     * @dev See {ERC1155-_burnBatch}.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual override {
        super._burnBatch(account, ids, amounts);
        for (uint256 i = 0; i < ids.length; ++i) {
            _totalSupply[ids[i]] -= amounts[i];
        }
    }
}

File 5 of 18 : ERC1155Burnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../ERC1155.sol";

/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

File 6 of 18 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

File 7 of 18 : ERC2981.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/interfaces/IERC2981.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";

abstract contract ERC2981 is IERC2981, ERC165 {

    /*
    % * 10000
    example : 5% -> 0.05 * 10000
    */
    uint256 internal royaltyFee;

    function setRoyalteFee(uint256 fee) public virtual;

    function royaltyInfo(uint256 tokenId,uint256 salePrice) public virtual override(IERC2981) view returns (
        address receiver,
        uint256 royaltyAmount
    );

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

File 8 of 18 : OSContractURI.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


abstract contract OSContractURI {

    string internal _contractURI;

    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    function setContractURI(string calldata uri) virtual public {
        _contractURI = uri;
    }
}

File 9 of 18 : IQuantumMintPass.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IQuantumMintPass {
    function burnFromRedeem(address user, uint256 mpId, uint256 amount) external;
}

File 10 of 18 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 11 of 18 : IERC2981.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Called with the sale price to determine how much royalty is owed and to whom.
     * @param tokenId - the NFT asset queried for royalty information
     * @param salePrice - the sale price of the NFT asset specified by `tokenId`
     * @return receiver - address of who should be sent the royalty payment
     * @return royaltyAmount - the royalty payment amount for `salePrice`
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

File 12 of 18 : ERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 13 of 18 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 14 of 18 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 15 of 18 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 16 of 18 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 17 of 18 : IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 18 of 18 : IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address payable","name":"treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"uint256","name":"mpId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"uriSuffix","type":"string"},{"internalType":"address","name":"redeemableContract","type":"address"}],"name":"addMintPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"mpId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFromRedeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mpId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mpId","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"uriSuffix","type":"string"},{"internalType":"address","name":"redeemableContract","type":"address"}],"name":"editMintPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintPasses","outputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"uriSuffix","type":"string"},{"internalType":"address","name":"redeemableContract","type":"address"}],"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","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":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRoyalteFee","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":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162005a9c38038062005a9c833981810160405281019062000037919062000372565b81620000586200004c6200014f60201b60201c565b6200015760201b60201c565b62000069816200021d60201b60201c565b506040518060400160405280601081526020017f5175616e74756d204d696e74506173730000000000000000000000000000000081525060079080519060200190620000b792919062000239565b506040518060400160405280600581526020017f5150415353000000000000000000000000000000000000000000000000000000815250600890805190602001906200010592919062000239565b5080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200054b565b600033905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600590805190602001906200023592919062000239565b5050565b82805462000247906200049d565b90600052602060002090601f0160209004810192826200026b5760008555620002b7565b82601f106200028657805160ff1916838001178555620002b7565b82800160010185558215620002b7579182015b82811115620002b657825182559160200191906001019062000299565b5b509050620002c69190620002ca565b5090565b5b80821115620002e5576000816000905550600101620002cb565b5090565b600062000300620002fa8462000400565b620003cc565b9050828152602081018484840111156200031957600080fd5b6200032684828562000467565b509392505050565b6000815190506200033f8162000531565b92915050565b600082601f8301126200035757600080fd5b815162000369848260208601620002e9565b91505092915050565b600080604083850312156200038657600080fd5b600083015167ffffffffffffffff811115620003a157600080fd5b620003af8582860162000345565b9250506020620003c2858286016200032e565b9150509250929050565b6000604051905081810181811067ffffffffffffffff82111715620003f657620003f562000502565b5b8060405250919050565b600067ffffffffffffffff8211156200041e576200041d62000502565b5b601f19601f8301169050602081019050919050565b6000620004408262000447565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004875780820151818401526020810190506200046a565b8381111562000497576000848401525b50505050565b60006002820490506001821680620004b657607f821691505b60208210811415620004cd57620004cc620004d3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053c8162000433565b81146200054857600080fd5b50565b615541806200055b6000396000f3fe6080604052600436106101b65760003560e01c8063715018a6116100ec578063bd85b0391161008a578063e985e9c511610064578063e985e9c514610634578063f242432a14610671578063f2fde38b1461069a578063f5298aca146106c3576101b6565b8063bd85b039146105a3578063c34f4adc146105e0578063e8a3d48514610609576101b6565b806395d89b41116100c657806395d89b41146104f3578063a22cb4651461051e578063ae0b51df14610547578063af95f9fb14610563576101b6565b8063715018a6146104885780638da5cb5b1461049f578063938e3d7b146104ca576101b6565b80632eb2c2d6116101595780634f558e79116101335780634f558e79146103d057806351f5fefd1461040d57806355f804b3146104365780636b20c4541461045f576101b6565b80632eb2c2d6146103415780633aeca2101461036a5780634e1273f414610393576101b6565b80630b8548a4116101955780630b8548a4146102605780630e89341c14610289578063120aa877146102c65780632a55205a14610303576101b6565b8062fdd58e146101bb57806301ffc9a7146101f857806306fdde0314610235575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd9190613b09565b6106ec565b6040516101ef9190614eaa565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a9190613c7b565b6107b6565b60405161022c9190614b41565b60405180910390f35b34801561024157600080fd5b5061024a6107c8565b6040516102579190614ba8565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613d53565b610856565b005b34801561029557600080fd5b506102b060048036038101906102ab9190613d53565b6108dc565b6040516102bd9190614ba8565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613d7c565b61096f565b6040516102fa9190614b41565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613e47565b61099e565b604051610338929190614abf565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613900565b6109ea565b005b34801561037657600080fd5b50610391600480360381019061038c9190613b45565b610a8b565b005b34801561039f57600080fd5b506103ba60048036038101906103b59190613b94565b610b3f565b6040516103c79190614ae8565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613d53565b610cf0565b6040516104049190614b41565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613c00565b610d04565b005b34801561044257600080fd5b5061045d60048036038101906104589190613d12565b610e61565b005b34801561046b57600080fd5b5061048660048036038101906104819190613a4e565b610ee9565b005b34801561049457600080fd5b5061049d610f86565b005b3480156104ab57600080fd5b506104b461100e565b6040516104c191906149e2565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613ccd565b611038565b005b3480156104ff57600080fd5b506105086110c2565b6040516105159190614ba8565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613acd565b611150565b005b610561600480360381019061055c9190613e83565b6112d1565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613d53565b6116ef565b60405161059a9493929190614b5c565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190613d53565b6117c7565b6040516105d79190614eaa565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190613db8565b6117e4565b005b34801561061557600080fd5b5061061e61192c565b60405161062b9190614ba8565b60405180910390f35b34801561064057600080fd5b5061065b600480360381019061065691906138c4565b6119be565b6040516106689190614b41565b60405180910390f35b34801561067d57600080fd5b50610698600480360381019061069391906139bf565b611a52565b005b3480156106a657600080fd5b506106c160048036038101906106bc919061389b565b611af3565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613b45565b611beb565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490614c0a565b60405180910390fd5b6003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006107c182611c88565b9050919050565b600780546107d590615248565b80601f016020809104026020016040519081016040528092919081815260200182805461080190615248565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b505050505081565b61085e611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661087c61100e565b73ffffffffffffffffffffffffffffffffffffffff16146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990614dca565b60405180910390fd5b8060008190555050565b606060006108e9836117c7565b11610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090614dea565b60405180910390fd5b61093282611d72565b600b60008481526020019081526020016000206002016040516020016109599291906149a9565b6040516020818303038152906040529050919050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710600054856109d591906150fa565b6109df91906150c9565b915091509250929050565b6109f2611d6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a385750610a3785610a32611d6a565b6119be565b5b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90614d6a565b60405180910390fd5b610a848585858585611e06565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690614e2a565b60405180910390fd5b610b3a838383612169565b505050565b60608151835114610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90614e4a565b60405180910390fd5b6000835167ffffffffffffffff811115610bc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bf65781602001602082028036833780820191505090505b50905060005b8451811015610ce557610c8f858281518110610c41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516106ec565b828281518110610cc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610cde9061527a565b9050610bfc565b508091505092915050565b600080610cfc836117c7565b119050919050565b610d0c611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610d2a61100e565b73ffffffffffffffffffffffffffffffffffffffff1614610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790614dca565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600b600060096000815480929190610dce9061527a565b91905055815260200190815260200160002060008201518160000155602082015181600101556040820151816002019080519060200190610e10929190613464565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505050505050565b610e69611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610e8761100e565b73ffffffffffffffffffffffffffffffffffffffff1614610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490614dca565b60405180910390fd5b610ee681612179565b50565b610ef1611d6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f375750610f3683610f31611d6a565b6119be565b5b610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614caa565b60405180910390fd5b610f81838383612193565b505050565b610f8e611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610fac61100e565b73ffffffffffffffffffffffffffffffffffffffff1614611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614dca565b60405180910390fd5b61100c60006121a3565b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611040611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661105e61100e565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90614dca565b60405180910390fd5b6110be8282612269565b5050565b600880546110cf90615248565b80601f01602080910402602001604051908101604052809291908181526020018280546110fb90615248565b80156111485780601f1061111d57610100808354040283529160200191611148565b820191906000526020600020905b81548152906001019060200180831161112b57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff1661116f611d6a565b73ffffffffffffffffffffffffffffffffffffffff1614156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90614e0a565b60405180910390fd5b80600460006111d3611d6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611280611d6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112c59190614b41565b60405180910390a35050565b6000600b6000868152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201805461131590615248565b80601f016020809104026020016040519081016040528092919081815260200182805461134190615248565b801561138e5780601f106113635761010080835404028352916020019161138e565b820191906000526020600020905b81548152906001019060200180831161137157829003601f168201915b505050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508381602001516113ff91906150fa565b3414611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790614c6a565b60405180910390fd5b6000816000015150602060ff161161148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614c2a565b60405180910390fd5b600c600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290614d2a565b60405180910390fd5b60003385604051602001611540929190614951565b6040516020818303038152906040528051906020012090506115a8848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505083600001518361227f565b6115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90614cca565b60405180910390fd5b6001600c600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061166b3387876040518060200160405280600081525061235b565b3373ffffffffffffffffffffffffffffffffffffffff167f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed02687876040516116b3929190614ec5565b60405180910390a26116e7600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461236d565b505050505050565b600b60205280600052604060002060009150905080600001549080600101549080600201805461171e90615248565b80601f016020809104026020016040519081016040528092919081815260200182805461174a90615248565b80156117975780601f1061176c57610100808354040283529160200191611797565b820191906000526020600020905b81548152906001019060200180831161177a57829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b600060066000838152602001908152602001600020549050919050565b6117ec611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661180a61100e565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790614dca565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600b6000878152602001908152602001600020600082015181600001556020820151816001015560408201518160020190805190602001906118da929190613464565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b60606001805461193b90615248565b80601f016020809104026020016040519081016040528092919081815260200182805461196790615248565b80156119b45780601f10611989576101008083540402835291602001916119b4565b820191906000526020600020905b81548152906001019060200180831161199757829003601f168201915b5050505050905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a5a611d6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611aa05750611a9f85611a9a611d6a565b6119be565b5b611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690614caa565b60405180910390fd5b611aec8585858585612461565b5050505050565b611afb611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611b1961100e565b73ffffffffffffffffffffffffffffffffffffffff1614611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690614dca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690614c4a565b60405180910390fd5b611be8816121a3565b50565b611bf3611d6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611c395750611c3883611c33611d6a565b6119be565b5b611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614caa565b60405180910390fd5b611c83838383612169565b505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d5357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d635750611d62826126e6565b5b9050919050565b600033905090565b606060058054611d8190615248565b80601f0160208091040260200160405190810160405280929190818152602001828054611dad90615248565b8015611dfa5780601f10611dcf57610100808354040283529160200191611dfa565b820191906000526020600020905b815481529060010190602001808311611ddd57829003601f168201915b50505050509050919050565b8151835114611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190614e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614d4a565b60405180910390fd5b6000611ec4611d6a565b9050611ed4818787878787612760565b60005b84518110156120d4576000858281518110611f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006003600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990614daa565b60405180910390fd5b8181036003600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b99190615073565b92505081905550505050806120cd9061527a565b9050611ed7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161214b929190614b0a565b60405180910390a4612161818787878787612776565b505050505050565b612174838383612946565b505050565b806005908051906020019061218f929190613464565b5050565b61219e838383612980565b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b81816001919061227a9291906134ea565b505050565b60008082905060005b855181101561234d5760008682815181106122cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161230d5782816040516020016122f092919061497d565b604051602081830303815290604052805190602001209250612339565b808360405160200161232092919061497d565b6040516020818303038152906040528051906020012092505b5080806123459061527a565b915050612288565b508381149150509392505050565b61236784848484612a58565b50505050565b804710156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614d0a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123d6906149cd565b60006040518083038185875af1925050503d8060008114612413576040519150601f19603f3d011682016040523d82523d6000602084013e612418565b606091505b505090508061245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614cea565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890614d4a565b60405180910390fd5b60006124db611d6a565b90506124fb8187876124ec88612a94565b6124f588612a94565b87612760565b60006003600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614daa565b60405180910390fd5b8381036003600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836003600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264a9190615073565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516126c7929190614ec5565b60405180910390a46126dd828888888888612b5a565b50505050505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612759575061275882612d2a565b5b9050919050565b61276e868686868686612d94565b505050505050565b6127958473ffffffffffffffffffffffffffffffffffffffff16612d9c565b1561293e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127db9594939291906149fd565b602060405180830381600087803b1580156127f557600080fd5b505af192505050801561282657506040513d601f19601f820116820180604052508101906128239190613ca4565b60015b6128b5576128326153e2565b8061283d575061287a565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128719190614ba8565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90614bca565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461293c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293390614bea565b60405180910390fd5b505b505050505050565b612951838383612daf565b806006600084815260200190815260200160002060008282546129749190615154565b92505081905550505050565b61298b838383612fce565b60005b8251811015612a52578181815181106129d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000858481518110612a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612a3a9190615154565b9250508190555080612a4b9061527a565b905061298e565b50505050565b612a64848484846132cd565b81600660008581526020019081526020016000206000828254612a879190615073565b9250508190555050505050565b60606000600167ffffffffffffffff811115612ad9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612b075781602001602082028036833780820191505090505b5090508281600081518110612b45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612b798473ffffffffffffffffffffffffffffffffffffffff16612d9c565b15612d22578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612bbf959493929190614a65565b602060405180830381600087803b158015612bd957600080fd5b505af1925050508015612c0a57506040513d601f19601f82011682018060405250810190612c079190613ca4565b60015b612c9957612c166153e2565b80612c215750612c5e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c559190614ba8565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9090614bca565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790614bea565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1690614d8a565b60405180910390fd5b6000612e29611d6a565b9050612e5981856000612e3b87612a94565b612e4487612a94565b60405180602001604052806000815250612760565b60006003600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890614c8a565b60405180910390fd5b8281036003600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612fbf929190614ec5565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561303e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303590614d8a565b60405180910390fd5b8051825114613082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307990614e6a565b60405180910390fd5b600061308c611d6a565b90506130ac81856000868660405180602001604052806000815250612760565b60005b83518110156132475760008482815181106130f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110613138577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006003600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d190614c8a565b60405180910390fd5b8181036003600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061323f9061527a565b9150506130af565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516132bf929190614b0a565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561333d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333490614e8a565b60405180910390fd5b6000613347611d6a565b90506133688160008761335988612a94565b61336288612a94565b87612760565b826003600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133c89190615073565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613446929190614ec5565b60405180910390a461345d81600087878787612b5a565b5050505050565b82805461347090615248565b90600052602060002090601f01602090048101928261349257600085556134d9565b82601f106134ab57805160ff19168380011785556134d9565b828001600101855582156134d9579182015b828111156134d85782518255916020019190600101906134bd565b5b5090506134e69190613570565b5090565b8280546134f690615248565b90600052602060002090601f016020900481019282613518576000855561355f565b82601f1061353157803560ff191683800117855561355f565b8280016001018555821561355f579182015b8281111561355e578235825591602001919060010190613543565b5b50905061356c9190613570565b5090565b5b80821115613589576000816000905550600101613571565b5090565b60006135a061359b84614f1f565b614eee565b905080838252602082019050828560208602820111156135bf57600080fd5b60005b858110156135ef57816135d588826136e1565b8452602084019350602083019250506001810190506135c2565b5050509392505050565b600061360c61360784614f4b565b614eee565b9050808382526020820190508285602086028201111561362b57600080fd5b60005b8581101561365b57816136418882613886565b84526020840193506020830192505060018101905061362e565b5050509392505050565b600061367861367384614f77565b614eee565b90508281526020810184848401111561369057600080fd5b61369b848285615206565b509392505050565b60006136b66136b184614fa7565b614eee565b9050828152602081018484840111156136ce57600080fd5b6136d9848285615206565b509392505050565b6000813590506136f081615498565b92915050565b600082601f83011261370757600080fd5b813561371784826020860161358d565b91505092915050565b60008083601f84011261373257600080fd5b8235905067ffffffffffffffff81111561374b57600080fd5b60208301915083602082028301111561376357600080fd5b9250929050565b600082601f83011261377b57600080fd5b813561378b8482602086016135f9565b91505092915050565b6000813590506137a3816154af565b92915050565b6000813590506137b8816154c6565b92915050565b6000813590506137cd816154dd565b92915050565b6000815190506137e2816154dd565b92915050565b600082601f8301126137f957600080fd5b8135613809848260208601613665565b91505092915050565b60008083601f84011261382457600080fd5b8235905067ffffffffffffffff81111561383d57600080fd5b60208301915083600182028301111561385557600080fd5b9250929050565b600082601f83011261386d57600080fd5b813561387d8482602086016136a3565b91505092915050565b600081359050613895816154f4565b92915050565b6000602082840312156138ad57600080fd5b60006138bb848285016136e1565b91505092915050565b600080604083850312156138d757600080fd5b60006138e5858286016136e1565b92505060206138f6858286016136e1565b9150509250929050565b600080600080600060a0868803121561391857600080fd5b6000613926888289016136e1565b9550506020613937888289016136e1565b945050604086013567ffffffffffffffff81111561395457600080fd5b6139608882890161376a565b935050606086013567ffffffffffffffff81111561397d57600080fd5b6139898882890161376a565b925050608086013567ffffffffffffffff8111156139a657600080fd5b6139b2888289016137e8565b9150509295509295909350565b600080600080600060a086880312156139d757600080fd5b60006139e5888289016136e1565b95505060206139f6888289016136e1565b9450506040613a0788828901613886565b9350506060613a1888828901613886565b925050608086013567ffffffffffffffff811115613a3557600080fd5b613a41888289016137e8565b9150509295509295909350565b600080600060608486031215613a6357600080fd5b6000613a71868287016136e1565b935050602084013567ffffffffffffffff811115613a8e57600080fd5b613a9a8682870161376a565b925050604084013567ffffffffffffffff811115613ab757600080fd5b613ac38682870161376a565b9150509250925092565b60008060408385031215613ae057600080fd5b6000613aee858286016136e1565b9250506020613aff85828601613794565b9150509250929050565b60008060408385031215613b1c57600080fd5b6000613b2a858286016136e1565b9250506020613b3b85828601613886565b9150509250929050565b600080600060608486031215613b5a57600080fd5b6000613b68868287016136e1565b9350506020613b7986828701613886565b9250506040613b8a86828701613886565b9150509250925092565b60008060408385031215613ba757600080fd5b600083013567ffffffffffffffff811115613bc157600080fd5b613bcd858286016136f6565b925050602083013567ffffffffffffffff811115613bea57600080fd5b613bf68582860161376a565b9150509250929050565b60008060008060808587031215613c1657600080fd5b6000613c24878288016137a9565b9450506020613c3587828801613886565b935050604085013567ffffffffffffffff811115613c5257600080fd5b613c5e8782880161385c565b9250506060613c6f878288016136e1565b91505092959194509250565b600060208284031215613c8d57600080fd5b6000613c9b848285016137be565b91505092915050565b600060208284031215613cb657600080fd5b6000613cc4848285016137d3565b91505092915050565b60008060208385031215613ce057600080fd5b600083013567ffffffffffffffff811115613cfa57600080fd5b613d0685828601613812565b92509250509250929050565b600060208284031215613d2457600080fd5b600082013567ffffffffffffffff811115613d3e57600080fd5b613d4a8482850161385c565b91505092915050565b600060208284031215613d6557600080fd5b6000613d7384828501613886565b91505092915050565b60008060408385031215613d8f57600080fd5b6000613d9d85828601613886565b9250506020613dae858286016136e1565b9150509250929050565b600080600080600060a08688031215613dd057600080fd5b6000613dde88828901613886565b9550506020613def888289016137a9565b9450506040613e0088828901613886565b935050606086013567ffffffffffffffff811115613e1d57600080fd5b613e298882890161385c565b9250506080613e3a888289016136e1565b9150509295509295909350565b60008060408385031215613e5a57600080fd5b6000613e6885828601613886565b9250506020613e7985828601613886565b9150509250929050565b60008060008060608587031215613e9957600080fd5b6000613ea787828801613886565b9450506020613eb887828801613886565b935050604085013567ffffffffffffffff811115613ed557600080fd5b613ee187828801613720565b925092505092959194509250565b6000613efb838361491c565b60208301905092915050565b613f1081615188565b82525050565b613f27613f2282615188565b6152c3565b82525050565b6000613f3882614ffc565b613f42818561502a565b9350613f4d83614fd7565b8060005b83811015613f7e578151613f658882613eef565b9750613f708361501d565b925050600181019050613f51565b5085935050505092915050565b613f948161519a565b82525050565b613fa3816151a6565b82525050565b613fba613fb5826151a6565b6152d5565b82525050565b6000613fcb82615007565b613fd5818561503b565b9350613fe5818560208601615215565b613fee816153b7565b840191505092915050565b600061400482615012565b61400e8185615057565b935061401e818560208601615215565b614027816153b7565b840191505092915050565b600061403d82615012565b6140478185615068565b9350614057818560208601615215565b80840191505092915050565b6000815461407081615248565b61407a8186615068565b9450600182166000811461409557600181146140a6576140d9565b60ff198316865281860193506140d9565b6140af85614fe7565b60005b838110156140d1578154818901526001820191506020810190506140b2565b838801955050505b50505092915050565b60006140ef603483615057565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b6000614155602883615057565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141bb602b83615057565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000614221601f83615057565b91507f636c61696d3a206d696e74207061737320646f6573206e6f74206578697374006000830152602082019050919050565b6000614261602683615057565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c7601883615057565b91507f636c61696d3a20696e76616c6964206d73672e76616c756500000000000000006000830152602082019050919050565b6000614307602483615057565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061436d602983615057565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b60006143d3601583615057565b91507f636c61696d3a20496e76616c69642070726f6f662e00000000000000000000006000830152602082019050919050565b6000614413603a83615057565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000614479601d83615057565b91507f416464726573733a20696e73756666696369656e742062616c616e63650000006000830152602082019050919050565b60006144b9601683615057565b91507f636c61696d3a20616c726561647920636c61696d6564000000000000000000006000830152602082019050919050565b60006144f9602583615057565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061455f603283615057565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006145c5602383615057565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061462b602a83615057565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000614691602083615057565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006146d1601683615057565b91507f5552493a206e6f6e6578697374656e7420746f6b656e000000000000000000006000830152602082019050919050565b600061471160008361504c565b9150600082019050919050565b600061472b602983615057565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000614791603583615057565b91507f6275726e46726f6d52656465656d3a204f6e6c7920616c6c6f7765642066726f60008301527f6d2072656465656d61626c6520636f6e747261637400000000000000000000006020830152604082019050919050565b60006147f7602983615057565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061485d602883615057565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148c3602183615057565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b614925816151fc565b82525050565b614934816151fc565b82525050565b61494b614946826151fc565b6152f1565b82525050565b600061495d8285613f16565b60148201915061496d828461493a565b6020820191508190509392505050565b60006149898285613fa9565b6020820191506149998284613fa9565b6020820191508190509392505050565b60006149b58285614032565b91506149c18284614063565b91508190509392505050565b60006149d882614704565b9150819050919050565b60006020820190506149f76000830184613f07565b92915050565b600060a082019050614a126000830188613f07565b614a1f6020830187613f07565b8181036040830152614a318186613f2d565b90508181036060830152614a458185613f2d565b90508181036080830152614a598184613fc0565b90509695505050505050565b600060a082019050614a7a6000830188613f07565b614a876020830187613f07565b614a94604083018661492b565b614aa1606083018561492b565b8181036080830152614ab38184613fc0565b90509695505050505050565b6000604082019050614ad46000830185613f07565b614ae1602083018461492b565b9392505050565b60006020820190508181036000830152614b028184613f2d565b905092915050565b60006040820190508181036000830152614b248185613f2d565b90508181036020830152614b388184613f2d565b90509392505050565b6000602082019050614b566000830184613f8b565b92915050565b6000608082019050614b716000830187613f9a565b614b7e602083018661492b565b8181036040830152614b908185613ff9565b9050614b9f6060830184613f07565b95945050505050565b60006020820190508181036000830152614bc28184613ff9565b905092915050565b60006020820190508181036000830152614be3816140e2565b9050919050565b60006020820190508181036000830152614c0381614148565b9050919050565b60006020820190508181036000830152614c23816141ae565b9050919050565b60006020820190508181036000830152614c4381614214565b9050919050565b60006020820190508181036000830152614c6381614254565b9050919050565b60006020820190508181036000830152614c83816142ba565b9050919050565b60006020820190508181036000830152614ca3816142fa565b9050919050565b60006020820190508181036000830152614cc381614360565b9050919050565b60006020820190508181036000830152614ce3816143c6565b9050919050565b60006020820190508181036000830152614d0381614406565b9050919050565b60006020820190508181036000830152614d238161446c565b9050919050565b60006020820190508181036000830152614d43816144ac565b9050919050565b60006020820190508181036000830152614d63816144ec565b9050919050565b60006020820190508181036000830152614d8381614552565b9050919050565b60006020820190508181036000830152614da3816145b8565b9050919050565b60006020820190508181036000830152614dc38161461e565b9050919050565b60006020820190508181036000830152614de381614684565b9050919050565b60006020820190508181036000830152614e03816146c4565b9050919050565b60006020820190508181036000830152614e238161471e565b9050919050565b60006020820190508181036000830152614e4381614784565b9050919050565b60006020820190508181036000830152614e63816147ea565b9050919050565b60006020820190508181036000830152614e8381614850565b9050919050565b60006020820190508181036000830152614ea3816148b6565b9050919050565b6000602082019050614ebf600083018461492b565b92915050565b6000604082019050614eda600083018561492b565b614ee7602083018461492b565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715614f1557614f14615388565b5b8060405250919050565b600067ffffffffffffffff821115614f3a57614f39615388565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f6657614f65615388565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f9257614f91615388565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614fc257614fc1615388565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061507e826151fc565b9150615089836151fc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150be576150bd6152fb565b5b828201905092915050565b60006150d4826151fc565b91506150df836151fc565b9250826150ef576150ee61532a565b5b828204905092915050565b6000615105826151fc565b9150615110836151fc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615149576151486152fb565b5b828202905092915050565b600061515f826151fc565b915061516a836151fc565b92508282101561517d5761517c6152fb565b5b828203905092915050565b6000615193826151dc565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615233578082015181840152602081019050615218565b83811115615242576000848401525b50505050565b6000600282049050600182168061526057607f821691505b6020821081141561527457615273615359565b5b50919050565b6000615285826151fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152b8576152b76152fb565b5b600182019050919050565b60006152ce826152df565b9050919050565b6000819050919050565b60006152ea826153c8565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b600060443d10156153f257615495565b60046000803e6154036000516153d5565b6308c379a081146154145750615495565b60405160043d036004823e80513d602482011167ffffffffffffffff8211171561544057505050615495565b808201805167ffffffffffffffff81111561545f575050505050615495565b8060208301013d850181111561547a57505050505050615495565b615483826153b7565b60208401016040528296505050505050505b90565b6154a181615188565b81146154ac57600080fd5b50565b6154b88161519a565b81146154c357600080fd5b50565b6154cf816151a6565b81146154da57600080fd5b50565b6154e6816151b0565b81146154f157600080fd5b50565b6154fd816151fc565b811461550857600080fd5b5056fea26469706673582212201e4bb45efbe5ddc9701786617b42f4e52de52c97beb53694048b260ef1c0025b64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e0faf18f33c307ca812b80c771ad3c9e5f043fe9000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f6170692e7175616e74756d2e6172742f76312f6d657461646174612f6d696e74706173732f00000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b65760003560e01c8063715018a6116100ec578063bd85b0391161008a578063e985e9c511610064578063e985e9c514610634578063f242432a14610671578063f2fde38b1461069a578063f5298aca146106c3576101b6565b8063bd85b039146105a3578063c34f4adc146105e0578063e8a3d48514610609576101b6565b806395d89b41116100c657806395d89b41146104f3578063a22cb4651461051e578063ae0b51df14610547578063af95f9fb14610563576101b6565b8063715018a6146104885780638da5cb5b1461049f578063938e3d7b146104ca576101b6565b80632eb2c2d6116101595780634f558e79116101335780634f558e79146103d057806351f5fefd1461040d57806355f804b3146104365780636b20c4541461045f576101b6565b80632eb2c2d6146103415780633aeca2101461036a5780634e1273f414610393576101b6565b80630b8548a4116101955780630b8548a4146102605780630e89341c14610289578063120aa877146102c65780632a55205a14610303576101b6565b8062fdd58e146101bb57806301ffc9a7146101f857806306fdde0314610235575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd9190613b09565b6106ec565b6040516101ef9190614eaa565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a9190613c7b565b6107b6565b60405161022c9190614b41565b60405180910390f35b34801561024157600080fd5b5061024a6107c8565b6040516102579190614ba8565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190613d53565b610856565b005b34801561029557600080fd5b506102b060048036038101906102ab9190613d53565b6108dc565b6040516102bd9190614ba8565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613d7c565b61096f565b6040516102fa9190614b41565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613e47565b61099e565b604051610338929190614abf565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190613900565b6109ea565b005b34801561037657600080fd5b50610391600480360381019061038c9190613b45565b610a8b565b005b34801561039f57600080fd5b506103ba60048036038101906103b59190613b94565b610b3f565b6040516103c79190614ae8565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613d53565b610cf0565b6040516104049190614b41565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613c00565b610d04565b005b34801561044257600080fd5b5061045d60048036038101906104589190613d12565b610e61565b005b34801561046b57600080fd5b5061048660048036038101906104819190613a4e565b610ee9565b005b34801561049457600080fd5b5061049d610f86565b005b3480156104ab57600080fd5b506104b461100e565b6040516104c191906149e2565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190613ccd565b611038565b005b3480156104ff57600080fd5b506105086110c2565b6040516105159190614ba8565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613acd565b611150565b005b610561600480360381019061055c9190613e83565b6112d1565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613d53565b6116ef565b60405161059a9493929190614b5c565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c59190613d53565b6117c7565b6040516105d79190614eaa565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190613db8565b6117e4565b005b34801561061557600080fd5b5061061e61192c565b60405161062b9190614ba8565b60405180910390f35b34801561064057600080fd5b5061065b600480360381019061065691906138c4565b6119be565b6040516106689190614b41565b60405180910390f35b34801561067d57600080fd5b50610698600480360381019061069391906139bf565b611a52565b005b3480156106a657600080fd5b506106c160048036038101906106bc919061389b565b611af3565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613b45565b611beb565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490614c0a565b60405180910390fd5b6003600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006107c182611c88565b9050919050565b600780546107d590615248565b80601f016020809104026020016040519081016040528092919081815260200182805461080190615248565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b505050505081565b61085e611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661087c61100e565b73ffffffffffffffffffffffffffffffffffffffff16146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990614dca565b60405180910390fd5b8060008190555050565b606060006108e9836117c7565b11610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090614dea565b60405180910390fd5b61093282611d72565b600b60008481526020019081526020016000206002016040516020016109599291906149a9565b6040516020818303038152906040529050919050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710600054856109d591906150fa565b6109df91906150c9565b915091509250929050565b6109f2611d6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a385750610a3785610a32611d6a565b6119be565b5b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90614d6a565b60405180910390fd5b610a848585858585611e06565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690614e2a565b60405180910390fd5b610b3a838383612169565b505050565b60608151835114610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90614e4a565b60405180910390fd5b6000835167ffffffffffffffff811115610bc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bf65781602001602082028036833780820191505090505b50905060005b8451811015610ce557610c8f858281518110610c41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610c82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516106ec565b828281518110610cc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080610cde9061527a565b9050610bfc565b508091505092915050565b600080610cfc836117c7565b119050919050565b610d0c611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610d2a61100e565b73ffffffffffffffffffffffffffffffffffffffff1614610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7790614dca565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600b600060096000815480929190610dce9061527a565b91905055815260200190815260200160002060008201518160000155602082015181600101556040820151816002019080519060200190610e10929190613464565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505050505050565b610e69611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610e8761100e565b73ffffffffffffffffffffffffffffffffffffffff1614610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed490614dca565b60405180910390fd5b610ee681612179565b50565b610ef1611d6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610f375750610f3683610f31611d6a565b6119be565b5b610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614caa565b60405180910390fd5b610f81838383612193565b505050565b610f8e611d6a565b73ffffffffffffffffffffffffffffffffffffffff16610fac61100e565b73ffffffffffffffffffffffffffffffffffffffff1614611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614dca565b60405180910390fd5b61100c60006121a3565b565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611040611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661105e61100e565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90614dca565b60405180910390fd5b6110be8282612269565b5050565b600880546110cf90615248565b80601f01602080910402602001604051908101604052809291908181526020018280546110fb90615248565b80156111485780601f1061111d57610100808354040283529160200191611148565b820191906000526020600020905b81548152906001019060200180831161112b57829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff1661116f611d6a565b73ffffffffffffffffffffffffffffffffffffffff1614156111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90614e0a565b60405180910390fd5b80600460006111d3611d6a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611280611d6a565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112c59190614b41565b60405180910390a35050565b6000600b6000868152602001908152602001600020604051806080016040529081600082015481526020016001820154815260200160028201805461131590615248565b80601f016020809104026020016040519081016040528092919081815260200182805461134190615248565b801561138e5780601f106113635761010080835404028352916020019161138e565b820191906000526020600020905b81548152906001019060200180831161137157829003601f168201915b505050505081526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508381602001516113ff91906150fa565b3414611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790614c6a565b60405180910390fd5b6000816000015150602060ff161161148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490614c2a565b60405180910390fd5b600c600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290614d2a565b60405180910390fd5b60003385604051602001611540929190614951565b6040516020818303038152906040528051906020012090506115a8848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505083600001518361227f565b6115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90614cca565b60405180910390fd5b6001600c600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061166b3387876040518060200160405280600081525061235b565b3373ffffffffffffffffffffffffffffffffffffffff167f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed02687876040516116b3929190614ec5565b60405180910390a26116e7600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163461236d565b505050505050565b600b60205280600052604060002060009150905080600001549080600101549080600201805461171e90615248565b80601f016020809104026020016040519081016040528092919081815260200182805461174a90615248565b80156117975780601f1061176c57610100808354040283529160200191611797565b820191906000526020600020905b81548152906001019060200180831161177a57829003601f168201915b5050505050908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b600060066000838152602001908152602001600020549050919050565b6117ec611d6a565b73ffffffffffffffffffffffffffffffffffffffff1661180a61100e565b73ffffffffffffffffffffffffffffffffffffffff1614611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790614dca565b60405180910390fd5b60405180608001604052808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815250600b6000878152602001908152602001600020600082015181600001556020820151816001015560408201518160020190805190602001906118da929190613464565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050565b60606001805461193b90615248565b80601f016020809104026020016040519081016040528092919081815260200182805461196790615248565b80156119b45780601f10611989576101008083540402835291602001916119b4565b820191906000526020600020905b81548152906001019060200180831161199757829003601f168201915b5050505050905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a5a611d6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611aa05750611a9f85611a9a611d6a565b6119be565b5b611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690614caa565b60405180910390fd5b611aec8585858585612461565b5050505050565b611afb611d6a565b73ffffffffffffffffffffffffffffffffffffffff16611b1961100e565b73ffffffffffffffffffffffffffffffffffffffff1614611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690614dca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690614c4a565b60405180910390fd5b611be8816121a3565b50565b611bf3611d6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611c395750611c3883611c33611d6a565b6119be565b5b611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614caa565b60405180910390fd5b611c83838383612169565b505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d5357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d635750611d62826126e6565b5b9050919050565b600033905090565b606060058054611d8190615248565b80601f0160208091040260200160405190810160405280929190818152602001828054611dad90615248565b8015611dfa5780601f10611dcf57610100808354040283529160200191611dfa565b820191906000526020600020905b815481529060010190602001808311611ddd57829003601f168201915b50505050509050919050565b8151835114611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190614e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb190614d4a565b60405180910390fd5b6000611ec4611d6a565b9050611ed4818787878787612760565b60005b84518110156120d4576000858281518110611f1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611f60577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006003600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990614daa565b60405180910390fd5b8181036003600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b99190615073565b92505081905550505050806120cd9061527a565b9050611ed7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161214b929190614b0a565b60405180910390a4612161818787878787612776565b505050505050565b612174838383612946565b505050565b806005908051906020019061218f929190613464565b5050565b61219e838383612980565b505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b81816001919061227a9291906134ea565b505050565b60008082905060005b855181101561234d5760008682815181106122cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905080831161230d5782816040516020016122f092919061497d565b604051602081830303815290604052805190602001209250612339565b808360405160200161232092919061497d565b6040516020818303038152906040528051906020012092505b5080806123459061527a565b915050612288565b508381149150509392505050565b61236784848484612a58565b50505050565b804710156123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a790614d0a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516123d6906149cd565b60006040518083038185875af1925050503d8060008114612413576040519150601f19603f3d011682016040523d82523d6000602084013e612418565b606091505b505090508061245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614cea565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890614d4a565b60405180910390fd5b60006124db611d6a565b90506124fb8187876124ec88612a94565b6124f588612a94565b87612760565b60006003600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614daa565b60405180910390fd5b8381036003600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836003600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461264a9190615073565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516126c7929190614ec5565b60405180910390a46126dd828888888888612b5a565b50505050505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612759575061275882612d2a565b5b9050919050565b61276e868686868686612d94565b505050505050565b6127958473ffffffffffffffffffffffffffffffffffffffff16612d9c565b1561293e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016127db9594939291906149fd565b602060405180830381600087803b1580156127f557600080fd5b505af192505050801561282657506040513d601f19601f820116820180604052508101906128239190613ca4565b60015b6128b5576128326153e2565b8061283d575061287a565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128719190614ba8565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90614bca565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461293c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293390614bea565b60405180910390fd5b505b505050505050565b612951838383612daf565b806006600084815260200190815260200160002060008282546129749190615154565b92505081905550505050565b61298b838383612fce565b60005b8251811015612a52578181815181106129d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160066000858481518110612a15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612a3a9190615154565b9250508190555080612a4b9061527a565b905061298e565b50505050565b612a64848484846132cd565b81600660008581526020019081526020016000206000828254612a879190615073565b9250508190555050505050565b60606000600167ffffffffffffffff811115612ad9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612b075781602001602082028036833780820191505090505b5090508281600081518110612b45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b612b798473ffffffffffffffffffffffffffffffffffffffff16612d9c565b15612d22578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612bbf959493929190614a65565b602060405180830381600087803b158015612bd957600080fd5b505af1925050508015612c0a57506040513d601f19601f82011682018060405250810190612c079190613ca4565b60015b612c9957612c166153e2565b80612c215750612c5e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c559190614ba8565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9090614bca565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1790614bea565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1690614d8a565b60405180910390fd5b6000612e29611d6a565b9050612e5981856000612e3b87612a94565b612e4487612a94565b60405180602001604052806000815250612760565b60006003600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee890614c8a565b60405180910390fd5b8281036003600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612fbf929190614ec5565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561303e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303590614d8a565b60405180910390fd5b8051825114613082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307990614e6a565b60405180910390fd5b600061308c611d6a565b90506130ac81856000868660405180602001604052806000815250612760565b60005b83518110156132475760008482815181106130f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110613138577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006003600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d190614c8a565b60405180910390fd5b8181036003600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061323f9061527a565b9150506130af565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516132bf929190614b0a565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561333d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333490614e8a565b60405180910390fd5b6000613347611d6a565b90506133688160008761335988612a94565b61336288612a94565b87612760565b826003600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133c89190615073565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051613446929190614ec5565b60405180910390a461345d81600087878787612b5a565b5050505050565b82805461347090615248565b90600052602060002090601f01602090048101928261349257600085556134d9565b82601f106134ab57805160ff19168380011785556134d9565b828001600101855582156134d9579182015b828111156134d85782518255916020019190600101906134bd565b5b5090506134e69190613570565b5090565b8280546134f690615248565b90600052602060002090601f016020900481019282613518576000855561355f565b82601f1061353157803560ff191683800117855561355f565b8280016001018555821561355f579182015b8281111561355e578235825591602001919060010190613543565b5b50905061356c9190613570565b5090565b5b80821115613589576000816000905550600101613571565b5090565b60006135a061359b84614f1f565b614eee565b905080838252602082019050828560208602820111156135bf57600080fd5b60005b858110156135ef57816135d588826136e1565b8452602084019350602083019250506001810190506135c2565b5050509392505050565b600061360c61360784614f4b565b614eee565b9050808382526020820190508285602086028201111561362b57600080fd5b60005b8581101561365b57816136418882613886565b84526020840193506020830192505060018101905061362e565b5050509392505050565b600061367861367384614f77565b614eee565b90508281526020810184848401111561369057600080fd5b61369b848285615206565b509392505050565b60006136b66136b184614fa7565b614eee565b9050828152602081018484840111156136ce57600080fd5b6136d9848285615206565b509392505050565b6000813590506136f081615498565b92915050565b600082601f83011261370757600080fd5b813561371784826020860161358d565b91505092915050565b60008083601f84011261373257600080fd5b8235905067ffffffffffffffff81111561374b57600080fd5b60208301915083602082028301111561376357600080fd5b9250929050565b600082601f83011261377b57600080fd5b813561378b8482602086016135f9565b91505092915050565b6000813590506137a3816154af565b92915050565b6000813590506137b8816154c6565b92915050565b6000813590506137cd816154dd565b92915050565b6000815190506137e2816154dd565b92915050565b600082601f8301126137f957600080fd5b8135613809848260208601613665565b91505092915050565b60008083601f84011261382457600080fd5b8235905067ffffffffffffffff81111561383d57600080fd5b60208301915083600182028301111561385557600080fd5b9250929050565b600082601f83011261386d57600080fd5b813561387d8482602086016136a3565b91505092915050565b600081359050613895816154f4565b92915050565b6000602082840312156138ad57600080fd5b60006138bb848285016136e1565b91505092915050565b600080604083850312156138d757600080fd5b60006138e5858286016136e1565b92505060206138f6858286016136e1565b9150509250929050565b600080600080600060a0868803121561391857600080fd5b6000613926888289016136e1565b9550506020613937888289016136e1565b945050604086013567ffffffffffffffff81111561395457600080fd5b6139608882890161376a565b935050606086013567ffffffffffffffff81111561397d57600080fd5b6139898882890161376a565b925050608086013567ffffffffffffffff8111156139a657600080fd5b6139b2888289016137e8565b9150509295509295909350565b600080600080600060a086880312156139d757600080fd5b60006139e5888289016136e1565b95505060206139f6888289016136e1565b9450506040613a0788828901613886565b9350506060613a1888828901613886565b925050608086013567ffffffffffffffff811115613a3557600080fd5b613a41888289016137e8565b9150509295509295909350565b600080600060608486031215613a6357600080fd5b6000613a71868287016136e1565b935050602084013567ffffffffffffffff811115613a8e57600080fd5b613a9a8682870161376a565b925050604084013567ffffffffffffffff811115613ab757600080fd5b613ac38682870161376a565b9150509250925092565b60008060408385031215613ae057600080fd5b6000613aee858286016136e1565b9250506020613aff85828601613794565b9150509250929050565b60008060408385031215613b1c57600080fd5b6000613b2a858286016136e1565b9250506020613b3b85828601613886565b9150509250929050565b600080600060608486031215613b5a57600080fd5b6000613b68868287016136e1565b9350506020613b7986828701613886565b9250506040613b8a86828701613886565b9150509250925092565b60008060408385031215613ba757600080fd5b600083013567ffffffffffffffff811115613bc157600080fd5b613bcd858286016136f6565b925050602083013567ffffffffffffffff811115613bea57600080fd5b613bf68582860161376a565b9150509250929050565b60008060008060808587031215613c1657600080fd5b6000613c24878288016137a9565b9450506020613c3587828801613886565b935050604085013567ffffffffffffffff811115613c5257600080fd5b613c5e8782880161385c565b9250506060613c6f878288016136e1565b91505092959194509250565b600060208284031215613c8d57600080fd5b6000613c9b848285016137be565b91505092915050565b600060208284031215613cb657600080fd5b6000613cc4848285016137d3565b91505092915050565b60008060208385031215613ce057600080fd5b600083013567ffffffffffffffff811115613cfa57600080fd5b613d0685828601613812565b92509250509250929050565b600060208284031215613d2457600080fd5b600082013567ffffffffffffffff811115613d3e57600080fd5b613d4a8482850161385c565b91505092915050565b600060208284031215613d6557600080fd5b6000613d7384828501613886565b91505092915050565b60008060408385031215613d8f57600080fd5b6000613d9d85828601613886565b9250506020613dae858286016136e1565b9150509250929050565b600080600080600060a08688031215613dd057600080fd5b6000613dde88828901613886565b9550506020613def888289016137a9565b9450506040613e0088828901613886565b935050606086013567ffffffffffffffff811115613e1d57600080fd5b613e298882890161385c565b9250506080613e3a888289016136e1565b9150509295509295909350565b60008060408385031215613e5a57600080fd5b6000613e6885828601613886565b9250506020613e7985828601613886565b9150509250929050565b60008060008060608587031215613e9957600080fd5b6000613ea787828801613886565b9450506020613eb887828801613886565b935050604085013567ffffffffffffffff811115613ed557600080fd5b613ee187828801613720565b925092505092959194509250565b6000613efb838361491c565b60208301905092915050565b613f1081615188565b82525050565b613f27613f2282615188565b6152c3565b82525050565b6000613f3882614ffc565b613f42818561502a565b9350613f4d83614fd7565b8060005b83811015613f7e578151613f658882613eef565b9750613f708361501d565b925050600181019050613f51565b5085935050505092915050565b613f948161519a565b82525050565b613fa3816151a6565b82525050565b613fba613fb5826151a6565b6152d5565b82525050565b6000613fcb82615007565b613fd5818561503b565b9350613fe5818560208601615215565b613fee816153b7565b840191505092915050565b600061400482615012565b61400e8185615057565b935061401e818560208601615215565b614027816153b7565b840191505092915050565b600061403d82615012565b6140478185615068565b9350614057818560208601615215565b80840191505092915050565b6000815461407081615248565b61407a8186615068565b9450600182166000811461409557600181146140a6576140d9565b60ff198316865281860193506140d9565b6140af85614fe7565b60005b838110156140d1578154818901526001820191506020810190506140b2565b838801955050505b50505092915050565b60006140ef603483615057565b91507f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008301527f526563656976657220696d706c656d656e7465720000000000000000000000006020830152604082019050919050565b6000614155602883615057565b91507f455243313135353a204552433131353552656365697665722072656a6563746560008301527f6420746f6b656e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141bb602b83615057565b91507f455243313135353a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000614221601f83615057565b91507f636c61696d3a206d696e74207061737320646f6573206e6f74206578697374006000830152602082019050919050565b6000614261602683615057565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142c7601883615057565b91507f636c61696d3a20696e76616c6964206d73672e76616c756500000000000000006000830152602082019050919050565b6000614307602483615057565b91507f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008301527f616e6365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061436d602983615057565b91507f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008301527f20617070726f76656400000000000000000000000000000000000000000000006020830152604082019050919050565b60006143d3601583615057565b91507f636c61696d3a20496e76616c69642070726f6f662e00000000000000000000006000830152602082019050919050565b6000614413603a83615057565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000614479601d83615057565b91507f416464726573733a20696e73756666696369656e742062616c616e63650000006000830152602082019050919050565b60006144b9601683615057565b91507f636c61696d3a20616c726561647920636c61696d6564000000000000000000006000830152602082019050919050565b60006144f9602583615057565b91507f455243313135353a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061455f603283615057565b91507f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b60006145c5602383615057565b91507f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061462b602a83615057565b91507f455243313135353a20696e73756666696369656e742062616c616e636520666f60008301527f72207472616e73666572000000000000000000000000000000000000000000006020830152604082019050919050565b6000614691602083615057565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006146d1601683615057565b91507f5552493a206e6f6e6578697374656e7420746f6b656e000000000000000000006000830152602082019050919050565b600061471160008361504c565b9150600082019050919050565b600061472b602983615057565b91507f455243313135353a2073657474696e6720617070726f76616c2073746174757360008301527f20666f722073656c6600000000000000000000000000000000000000000000006020830152604082019050919050565b6000614791603583615057565b91507f6275726e46726f6d52656465656d3a204f6e6c7920616c6c6f7765642066726f60008301527f6d2072656465656d61626c6520636f6e747261637400000000000000000000006020830152604082019050919050565b60006147f7602983615057565b91507f455243313135353a206163636f756e747320616e6420696473206c656e67746860008301527f206d69736d6174636800000000000000000000000000000000000000000000006020830152604082019050919050565b600061485d602883615057565b91507f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008301527f6d69736d617463680000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148c3602183615057565b91507f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b614925816151fc565b82525050565b614934816151fc565b82525050565b61494b614946826151fc565b6152f1565b82525050565b600061495d8285613f16565b60148201915061496d828461493a565b6020820191508190509392505050565b60006149898285613fa9565b6020820191506149998284613fa9565b6020820191508190509392505050565b60006149b58285614032565b91506149c18284614063565b91508190509392505050565b60006149d882614704565b9150819050919050565b60006020820190506149f76000830184613f07565b92915050565b600060a082019050614a126000830188613f07565b614a1f6020830187613f07565b8181036040830152614a318186613f2d565b90508181036060830152614a458185613f2d565b90508181036080830152614a598184613fc0565b90509695505050505050565b600060a082019050614a7a6000830188613f07565b614a876020830187613f07565b614a94604083018661492b565b614aa1606083018561492b565b8181036080830152614ab38184613fc0565b90509695505050505050565b6000604082019050614ad46000830185613f07565b614ae1602083018461492b565b9392505050565b60006020820190508181036000830152614b028184613f2d565b905092915050565b60006040820190508181036000830152614b248185613f2d565b90508181036020830152614b388184613f2d565b90509392505050565b6000602082019050614b566000830184613f8b565b92915050565b6000608082019050614b716000830187613f9a565b614b7e602083018661492b565b8181036040830152614b908185613ff9565b9050614b9f6060830184613f07565b95945050505050565b60006020820190508181036000830152614bc28184613ff9565b905092915050565b60006020820190508181036000830152614be3816140e2565b9050919050565b60006020820190508181036000830152614c0381614148565b9050919050565b60006020820190508181036000830152614c23816141ae565b9050919050565b60006020820190508181036000830152614c4381614214565b9050919050565b60006020820190508181036000830152614c6381614254565b9050919050565b60006020820190508181036000830152614c83816142ba565b9050919050565b60006020820190508181036000830152614ca3816142fa565b9050919050565b60006020820190508181036000830152614cc381614360565b9050919050565b60006020820190508181036000830152614ce3816143c6565b9050919050565b60006020820190508181036000830152614d0381614406565b9050919050565b60006020820190508181036000830152614d238161446c565b9050919050565b60006020820190508181036000830152614d43816144ac565b9050919050565b60006020820190508181036000830152614d63816144ec565b9050919050565b60006020820190508181036000830152614d8381614552565b9050919050565b60006020820190508181036000830152614da3816145b8565b9050919050565b60006020820190508181036000830152614dc38161461e565b9050919050565b60006020820190508181036000830152614de381614684565b9050919050565b60006020820190508181036000830152614e03816146c4565b9050919050565b60006020820190508181036000830152614e238161471e565b9050919050565b60006020820190508181036000830152614e4381614784565b9050919050565b60006020820190508181036000830152614e63816147ea565b9050919050565b60006020820190508181036000830152614e8381614850565b9050919050565b60006020820190508181036000830152614ea3816148b6565b9050919050565b6000602082019050614ebf600083018461492b565b92915050565b6000604082019050614eda600083018561492b565b614ee7602083018461492b565b9392505050565b6000604051905081810181811067ffffffffffffffff82111715614f1557614f14615388565b5b8060405250919050565b600067ffffffffffffffff821115614f3a57614f39615388565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f6657614f65615388565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f9257614f91615388565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614fc257614fc1615388565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061507e826151fc565b9150615089836151fc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156150be576150bd6152fb565b5b828201905092915050565b60006150d4826151fc565b91506150df836151fc565b9250826150ef576150ee61532a565b5b828204905092915050565b6000615105826151fc565b9150615110836151fc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615149576151486152fb565b5b828202905092915050565b600061515f826151fc565b915061516a836151fc565b92508282101561517d5761517c6152fb565b5b828203905092915050565b6000615193826151dc565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015615233578082015181840152602081019050615218565b83811115615242576000848401525b50505050565b6000600282049050600182168061526057607f821691505b6020821081141561527457615273615359565b5b50919050565b6000615285826151fc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152b8576152b76152fb565b5b600182019050919050565b60006152ce826152df565b9050919050565b6000819050919050565b60006152ea826153c8565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b600060443d10156153f257615495565b60046000803e6154036000516153d5565b6308c379a081146154145750615495565b60405160043d036004823e80513d602482011167ffffffffffffffff8211171561544057505050615495565b808201805167ffffffffffffffff81111561545f575050505050615495565b8060208301013d850181111561547a57505050505050615495565b615483826153b7565b60208401016040528296505050505050505b90565b6154a181615188565b81146154ac57600080fd5b50565b6154b88161519a565b81146154c357600080fd5b50565b6154cf816151a6565b81146154da57600080fd5b50565b6154e6816151b0565b81146154f157600080fd5b50565b6154fd816151fc565b811461550857600080fd5b5056fea26469706673582212201e4bb45efbe5ddc9701786617b42f4e52de52c97beb53694048b260ef1c0025b64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e0faf18f33c307ca812b80c771ad3c9e5f043fe9000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f6170692e7175616e74756d2e6172742f76312f6d657461646174612f6d696e74706173732f00000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.quantum.art/v1/metadata/mintpass/
Arg [1] : treasury (address): 0xe0faf18f33c307Ca812B80c771ad3c9E5f043Fe9

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000e0faf18f33c307ca812b80c771ad3c9e5f043fe9
Arg [2] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [3] : 68747470733a2f2f6170692e7175616e74756d2e6172742f76312f6d65746164
Arg [4] : 6174612f6d696e74706173732f00000000000000000000000000000000000000


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.