ETH Price: $3,457.11 (-0.86%)

Token

Vampire Slayers NFT (SLAY NFT)
 

Overview

Max Total Supply

242 SLAY NFT

Holders

74

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:
SLAYERSNFT

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-11-14
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

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

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

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

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

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) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

}


interface IERC20 {

    function totalSupply() external view returns (uint256);
    
    function symbol() external view returns(string memory);
    
    function name() external view returns(string memory);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
    
    /**
     * @dev Returns the number of decimal places
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable {

    address private owner;
    
    // event for EVM logging
    event OwnerSet(address indexed oldOwner, address indexed newOwner);
    
    // modifier to check if caller is owner
    modifier onlyOwner() {
        // If the first argument of 'require' evaluates to 'false', execution terminates and all
        // changes to the state and to Ether balances are reverted.
        // This used to consume all gas in old EVM versions, but not anymore.
        // It is often a good idea to use 'require' to check if functions are called correctly.
        // As a second argument, you can also provide an explanation about what went wrong.
        require(msg.sender == owner, "Caller is not owner");
        _;
    }
    
    /**
     * @dev Set contract deployer as owner
     */
    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(address(0), owner);
    }

    /**
     * @dev Change owner
     * @param newOwner address of new owner
     */
    function changeOwner(address newOwner) public onlyOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    /**
     * @dev Return owner address 
     * @return address of owner
     */
    function getOwner() external view returns (address) {
        return owner;
    }
}


contract SLAYERSNFT is Context, ERC165, IERC721, IERC721Metadata, ReentrancyGuard, Ownable {
    using Address for address;
    using SafeMath for uint256;

    // Token name
    string private constant _name = "Vampire Slayers NFT";

    // Token symbol
    string private constant _symbol = "SLAY NFT";

    // total number of NFTs Minted
    uint256 private _totalSupply;

    // current tokenID to mint at
    uint256 public currentSupplyIndex;

    // mint cap
    uint256 public standard_mint_remaining = 1_200; // $50 each
    uint256 public limited_mint_remaining  = 400;   // $100 each

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

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

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    // Mapping from tokenId to rarity
    mapping(uint256 => bool) public isRare;

    // cost in ETH to mint a basic NFT
    uint256 public cost = 0.016 ether;
    uint256 public limitedCost = 0.032 ether;

    // base URI
    string private baseURI = "https://ipfs.io/ipfs/Qmf1FCAE1zmuf3vzBb1tSV6NXC5XKjcVXUMeEcKt63sQPD/";
    string private limitedBaseURI = "https://ipfs.io/ipfs/Qmc9m6t8ZCZ3nkaEp1DtwSEf4sMCUBycHwWCAEyG7Magvh/";
    string private ending = ".json";

    // Enable Trading
    bool public tradingEnabled;

    // Mint Recipient
    address public mintRecipient;

    constructor(address _mintRecipient) {
        mintRecipient = _mintRecipient;
        tradingEnabled = true;
    }

    ////////////////////////////////////////////////
    ///////////     OWNER FUNCTIONS      ///////////
    ////////////////////////////////////////////////


    function resumeTrading() external onlyOwner {
        tradingEnabled = true;
    }

    function pauseTrading() external onlyOwner {
        tradingEnabled = false;
    }

    function withdraw() external onlyOwner {
        (bool s,) = payable(msg.sender).call{value: address(this).balance}("");
        require(s);
    }

    function withdrawToken(address token_) external onlyOwner {
        require(token_ != address(0), 'Zero Address');
        IERC20(token_).transfer(msg.sender, IERC20(token_).balanceOf(address(this)));
    }

    function setBaseURI(string calldata newURI) external onlyOwner {
        baseURI = newURI;
    }

    function setLimitedBaseURI(string calldata newURI) external onlyOwner {
        limitedBaseURI = newURI;
    }

    function setURIExtention(string calldata newExtention) external onlyOwner {
        ending = newExtention;
    }

    function setMintRecipient(address mintRecipient_) external onlyOwner {
        mintRecipient = mintRecipient_;
    }

    function setCost(uint256 cost_) external onlyOwner {
        cost = cost_;
    }

    function setLimitedCost(uint256 cost_) external onlyOwner {
        limitedCost = cost_;
    }

    function setStandardMintRemaining(uint256 newRemaining) external onlyOwner {
        standard_mint_remaining = newRemaining;
    }

    function setLimitedMintRemaining(uint256 newRemaining) external onlyOwner {
        limited_mint_remaining = newRemaining;
    }

    /**
        Example:
        [ 0x123...abc, 0x456...def ]
        [ 2, 3 ]
        
        Gives the result:
        0x123...abc gets 2 NFTs
        0x456...def gets 3 NFTs

     */
    function ownerMint(address[] calldata tos, uint256[] calldata nums, bool[] calldata _isRare) external onlyOwner {
        
        uint addrLen = tos.length;
        require(addrLen == nums.length, 'Invalid Lengths');
        
        for (uint i = 0; i < addrLen;) {
            for (uint j = 0; j < nums[i];) {
                _safeMint(tos[i], currentSupplyIndex, _isRare[i]);
                unchecked { ++j; }
            }
            unchecked { ++i; }
        }
    }


    ////////////////////////////////////////////////
    ///////////     PUBLIC FUNCTIONS     ///////////
    ////////////////////////////////////////////////

    /** 
     * Mints `numberOfMints` NFTs To Caller
     */
    function mint(address to, uint256 num, bool rare) external payable {
        require(
            tradingEnabled && mintRecipient != address(0),
            'Trading Not Enabled'
        );
        require(
            num > 0, 
            'Cannot Mint Zero'
        );
        require(
            to != address(0),
            'Zero Address'
        );
        
        // determine cost in ETH
        uint256 mintCost = rare ? limitedCost * num : cost * num;

        // ensure user sent correct value
        require(
            msg.value >= mintCost,
            'Insufficient Value'
        );

        // send full value to the mint recipient
        (bool s,) = payable(mintRecipient).call{value: msg.value}("");
        require(s, 'MintRecipient Payment Failed');

        // mint the supply
        for (uint i = 0; i < num;) {
            _safeMint(to, currentSupplyIndex, rare);
            unchecked { ++i; }
        }
    }

    function burn(uint256 tokenID) external nonReentrant {
        require(_isApprovedOrOwner(_msgSender(), tokenID), "caller not owner nor approved");
        _burn(tokenID);
    }

    receive() external payable {}

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        require(_exists(tokenId), 'Non Existent Token');
        address wpowner = ownerOf(tokenId);
        require(to != wpowner, "ERC721: approval to current owner");

        require(
            _msgSender() == wpowner || isApprovedForAll(wpowner, _msgSender()),
            "ERC721: not approved or owner"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address _operator, bool approved) public override {
        _setApprovalForAll(_msgSender(), _operator, approved);
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved");
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }



    ////////////////////////////////////////////////
    ///////////    INTERNAL FUNCTIONS    ///////////
    ////////////////////////////////////////////////


    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bool _isRare
    ) internal {
        _mint(to, tokenId, _isRare);
        require(
            _checkOnERC721Received(address(0), to, tokenId, ""),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId, bool _isRare) internal {
        require(!_exists(tokenId), "ERC721: token already minted");

        if (_isRare) {
            isRare[tokenId] = true;
            require(limited_mint_remaining > 0, 'Limited Mint Exceeds Cap');
            unchecked { --limited_mint_remaining; }
        } else {
            require(standard_mint_remaining > 0, 'Standard Mint Exceeds Cap');
            unchecked { --standard_mint_remaining; }
        }

        _owners[tokenId] = to;
        unchecked {
            ++currentSupplyIndex;
            ++_totalSupply;
            ++_balances[to];
        }

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: non ERC721Receiver implementer");
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal nonReentrant {
        require(_exists(tokenId), 'Non Existent Token');
        require(ownerOf(tokenId) == from, "Incorrect owner");
        require(to != address(0), "zero address");
        require(balanceOf(from) > 0, 'Zero Balance');

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        // Allocate balances
        _balances[from] -= 1;
        _balances[to]   += 1;
        _owners[tokenId] = to;

        // emit transfer
        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal {
        require(_exists(tokenId), 'Token Does Not Exist');

        // owner of token
        address owner_ = ownerOf(tokenId);

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

        // decrement balance
        _balances[owner_] -= 1;
        delete _owners[tokenId];

        // decrement total supply
        _totalSupply -= 1;

        // emit transfer
        emit Transfer(owner_, address(0), tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal {
        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address wpowner,
        address _operator,
        bool approved
    ) internal {
        require(wpowner != _operator, "ERC721: approve to caller");
        _operatorApprovals[wpowner][_operator] = approved;
        emit ApprovalForAll(wpowner, _operator, approved);
    }



    ////////////////////////////////////////////////
    ///////////      READ FUNCTIONS      ///////////
    ////////////////////////////////////////////////

    function checkClaimEligibility(address _to, uint256 _quantity) external view returns (string memory) {
        if (tradingEnabled && _to != address(0) && _quantity > 0) {
            return "";
        }
        return "Sale is not live";
    }

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

    function getIDsByOwner(address owner_) external view returns (uint256[] memory) {
        uint256[] memory ids = new uint256[](balanceOf(owner_));
        if (balanceOf(owner_) == 0) return ids;
        uint256 count = 0;
        for (uint i = 0; i < currentSupplyIndex;) {
            if (_owners[i] == owner_) {
                ids[count] = i;
                unchecked { ++count; }
            }
            unchecked { ++i; }
        }
        return ids;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address wpowner) public view override returns (uint256) {
        require(wpowner != address(0), "query for the zero address");
        return _balances[wpowner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _owners[tokenId];
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public pure override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public pure override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        string memory fHalf = isRare[tokenId] ? string.concat(limitedBaseURI, uint2str(tokenId)) : string.concat(baseURI, uint2str(tokenId));
        return string.concat(fHalf, ending);
    }

    /**
        Converts A Uint Into a String
    */
    function uint2str(uint _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }

    function owner() external view returns (address) {
        return this.getOwner();
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        require(_exists(tokenId), "ERC721: query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address wpowner, address _operator) public view override returns (bool) {
        return _operatorApprovals[wpowner][_operator];
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        require(_exists(tokenId), "ERC721: nonexistent token");
        address wpowner = ownerOf(tokenId);
        return (spender == wpowner || getApproved(tokenId) == spender || isApprovedForAll(wpowner, spender));
    }

    function onReceivedRetval() public pure returns (bytes4) {
        return IERC721Receiver.onERC721Received.selector;
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_mintRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wpowner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"checkClaimEligibility","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupplyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"getIDsByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wpowner","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":"isRare","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited_mint_remaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"bool","name":"rare","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"onReceivedRetval","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256[]","name":"nums","type":"uint256[]"},{"internalType":"bool[]","name":"_isRare","type":"bool[]"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setLimitedBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"setLimitedCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRemaining","type":"uint256"}],"name":"setLimitedMintRemaining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mintRecipient_","type":"address"}],"name":"setMintRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRemaining","type":"uint256"}],"name":"setStandardMintRemaining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newExtention","type":"string"}],"name":"setURIExtention","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"standard_mint_remaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6104b06004556101906005556638d7ea4c680000600b556671afd498d00000600c55610100604052604460808181529062002c2260a039600d90620000459082620001e8565b5060405180608001604052806044815260200162002c6660449139600e906200006f9082620001e8565b50604080518082019091526005815264173539b7b760d91b6020820152600f906200009b9082620001e8565b50348015620000a957600080fd5b5060405162002caa38038062002caa833981016040819052620000cc91620002b4565b6001600081815581546001600160a01b031916339081179092556040517f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36010805460ff196001600160a01b0390931661010002929092166001600160a81b0319909216919091176001179055620002e6565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200016e57607f821691505b6020821081036200018f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e357600081815260208120601f850160051c81016020861015620001be5750805b601f850160051c820191505b81811015620001df57828155600101620001ca565b5050505b505050565b81516001600160401b0381111562000204576200020462000143565b6200021c8162000215845462000159565b8462000195565b602080601f8311600181146200025457600084156200023b5750858301515b600019600386901b1c1916600185901b178555620001df565b600085815260208120601f198616915b82811015620002855788860151825594840194600190910190840162000264565b5085821015620002a45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620002c757600080fd5b81516001600160a01b0381168114620002df57600080fd5b9392505050565b61292c80620002f66000396000f3fe6080604052600436106102605760003560e01c80636352211e11610144578063ae9843d6116100b6578063d1a1beb41161007a578063d1a1beb414610743578063d9ea7d4c14610756578063e5b8467214610776578063e8a7bc5714610796578063e946b7ed146107bb578063e985e9c5146107db57600080fd5b8063ae9843d6146106a1578063b88d4fde146106c3578063bab56d7a146106e3578063c87b56dd14610703578063cc7192811461072357600080fd5b80638da5cb5b116101085780638da5cb5b146105e557806394f9b73d146105fa57806395d89b411461061a578063989df72a1461064b578063a22cb46514610661578063a6f9dae11461068157600080fd5b80636352211e1461053b57806370a08231146105715780637a54150f14610591578063893d20e8146105a757806389476069146105c557600080fd5b80631fe09da3116101dd5780634408a046116101a15780634408a0461461047e57806344a0d68a1461049e5780634ada218b146104be57806355f804b3146104d85780635bf244be146104f857806362684f581461052557600080fd5b80631fe09da3146103d957806323b872dd146104095780633ccfd60b1461042957806342842e0e1461043e57806342966c681461045e57600080fd5b8063096283291161022457806309628329146103555780631031e36e1461037557806313faede61461038a57806318160ddd146103ae5780631e263990146103c357600080fd5b806301ffc9a71461026c5780630694db1e146102a157806306fdde03146102b8578063081812fc146102fd578063095ea7b31461033557600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c61028736600461203d565b610824565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610876565b005b3480156102c457600080fd5b5060408051808201909152601381527215985b5c1a5c994814db185e595c9cc8139195606a1b60208201525b60405161029891906120b1565b34801561030957600080fd5b5061031d6103183660046120c4565b6108b8565b6040516001600160a01b039091168152602001610298565b34801561034157600080fd5b506102b66103503660046120f2565b610937565b34801561036157600080fd5b506102b661037036600461211e565b610a6e565b34801561038157600080fd5b506102b6610aa5565b34801561039657600080fd5b506103a0600b5481565b604051908152602001610298565b3480156103ba57600080fd5b506002546103a0565b3480156103cf57600080fd5b506103a060035481565b3480156103e557600080fd5b5061028c6103f43660046120c4565b600a6020526000908152604090205460ff1681565b34801561041557600080fd5b506102b6610424366004612190565b610adb565b34801561043557600080fd5b506102b6610b0d565b34801561044a57600080fd5b506102b6610459366004612190565b610b8f565b34801561046a57600080fd5b506102b66104793660046120c4565b610baa565b34801561048a57600080fd5b506102b661049936600461211e565b610c37565b3480156104aa57600080fd5b506102b66104b93660046120c4565b610c6e565b3480156104ca57600080fd5b5060105461028c9060ff1681565b3480156104e457600080fd5b506102b66104f336600461211e565b610c9d565b34801561050457600080fd5b506105186105133660046121d1565b610cd4565b60405161029891906121ee565b34801561053157600080fd5b506103a060055481565b34801561054757600080fd5b5061031d6105563660046120c4565b6000908152600660205260409020546001600160a01b031690565b34801561057d57600080fd5b506103a061058c3660046121d1565b610da1565b34801561059d57600080fd5b506103a0600c5481565b3480156105b357600080fd5b506001546001600160a01b031661031d565b3480156105d157600080fd5b506102b66105e03660046121d1565b610e15565b3480156105f157600080fd5b5061031d610f69565b34801561060657600080fd5b506102b66106153660046120c4565b610fd2565b34801561062657600080fd5b5060408051808201909152600881526714d310564813919560c21b60208201526102f0565b34801561065757600080fd5b506103a060045481565b34801561066d57600080fd5b506102b661067c366004612240565b611001565b34801561068d57600080fd5b506102b661069c3660046121d1565b61100c565b3480156106ad57600080fd5b50604051630a85bd0160e11b8152602001610298565b3480156106cf57600080fd5b506102b66106de36600461228f565b611092565b3480156106ef57600080fd5b506102b66106fe3660046120c4565b6110ca565b34801561070f57600080fd5b506102f061071e3660046120c4565b6110f9565b34801561072f57600080fd5b506102f061073e3660046120f2565b61119c565b6102b661075136600461236f565b61120d565b34801561076257600080fd5b506102b66107713660046120c4565b611437565b34801561078257600080fd5b506102b66107913660046123fd565b611466565b3480156107a257600080fd5b5060105461031d9061010090046001600160a01b031681565b3480156107c757600080fd5b506102b66107d63660046121d1565b611574565b3480156107e757600080fd5b5061028c6107f6366004612497565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061085557506001600160e01b03198216635b5e139f60e01b145b8061087057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146108a95760405162461bcd60e51b81526004016108a0906124c5565b60405180910390fd5b6010805460ff19166001179055565b60006108c3826115c6565b61091b5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084016108a0565b506000908152600860205260409020546001600160a01b031690565b610940816115c6565b6109815760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108a0565b6000818152600660205260409020546001600160a01b039081169083168190036109f75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a0565b336001600160a01b0382161480610a135750610a1381336107f6565b610a5f5760405162461bcd60e51b815260206004820152601d60248201527f4552433732313a206e6f7420617070726f766564206f72206f776e657200000060448201526064016108a0565b610a6983836115e3565b505050565b6001546001600160a01b03163314610a985760405162461bcd60e51b81526004016108a0906124c5565b600e610a69828483612572565b6001546001600160a01b03163314610acf5760405162461bcd60e51b81526004016108a0906124c5565b6010805460ff19169055565b610ae6335b8261164a565b610b025760405162461bcd60e51b81526004016108a090612633565b610a6983838361171c565b6001546001600160a01b03163314610b375760405162461bcd60e51b81526004016108a0906124c5565b604051600090339047908381818185875af1925050503d8060008114610b79576040519150601f19603f3d011682016040523d82523d6000602084013e610b7e565b606091505b5050905080610b8c57600080fd5b50565b610a6983838360405180602001604052806000815250611092565b600260005403610bfc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108a0565b6002600055610c0a33610ae0565b610c265760405162461bcd60e51b81526004016108a090612633565b610c2f8161196c565b506001600055565b6001546001600160a01b03163314610c615760405162461bcd60e51b81526004016108a0906124c5565b600f610a69828483612572565b6001546001600160a01b03163314610c985760405162461bcd60e51b81526004016108a0906124c5565b600b55565b6001546001600160a01b03163314610cc75760405162461bcd60e51b81526004016108a0906124c5565b600d610a69828483612572565b60606000610ce183610da1565b67ffffffffffffffff811115610cf957610cf9612279565b604051908082528060200260200182016040528015610d22578160200160208202803683370190505b509050610d2e83610da1565b600003610d3b5792915050565b6000805b600354811015610d98576000818152600660205260409020546001600160a01b03808716911603610d905780838381518110610d7d57610d7d61266a565b6020026020010181815250508160010191505b600101610d3f565b50909392505050565b60006001600160a01b038216610df95760405162461bcd60e51b815260206004820152601a60248201527f717565727920666f7220746865207a65726f206164647265737300000000000060448201526064016108a0565b506001600160a01b031660009081526007602052604090205490565b6001546001600160a01b03163314610e3f5760405162461bcd60e51b81526004016108a0906124c5565b6001600160a01b038116610e845760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108a0565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190612680565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190612699565b5050565b6000306001600160a01b031663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd91906126b6565b905090565b6001546001600160a01b03163314610ffc5760405162461bcd60e51b81526004016108a0906124c5565b600555565b610f65338383611a79565b6001546001600160a01b031633146110365760405162461bcd60e51b81526004016108a0906124c5565b6001546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b61109c338361164a565b6110b85760405162461bcd60e51b81526004016108a090612633565b6110c484848484611b47565b50505050565b6001546001600160a01b031633146110f45760405162461bcd60e51b81526004016108a0906124c5565b600c55565b6000818152600a60205260408120546060919060ff1661114357600d61111e84611b7a565b60405160200161112f929190612746565b60405160208183030381529060405261116f565b600e61114e84611b7a565b60405160200161115f929190612746565b6040516020818303038152906040525b905080600f60405160200161118592919061276b565b604051602081830303815290604052915050919050565b60105460609060ff1680156111b957506001600160a01b03831615155b80156111c55750600082115b156111df5750604080516020810190915260008152610870565b5060408051808201909152601081526f53616c65206973206e6f74206c69766560801b602082015292915050565b60105460ff16801561122e575060105461010090046001600160a01b031615155b6112705760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b60448201526064016108a0565b600082116112b35760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f74204d696e74205a65726f60801b60448201526064016108a0565b6001600160a01b0383166112f85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108a0565b6000816113125782600b5461130d91906127a8565b611320565b82600c5461132091906127a8565b9050803410156113675760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742056616c756560701b60448201526064016108a0565b60105460405160009161010090046001600160a01b03169034908381818185875af1925050503d80600081146113b9576040519150601f19603f3d011682016040523d82523d6000602084013e6113be565b606091505b505090508061140f5760405162461bcd60e51b815260206004820152601c60248201527f4d696e74526563697069656e74205061796d656e74204661696c65640000000060448201526064016108a0565b60005b8481101561142f576114278660035486611ca6565b600101611412565b505050505050565b6001546001600160a01b031633146114615760405162461bcd60e51b81526004016108a0906124c5565b600455565b6001546001600160a01b031633146114905760405162461bcd60e51b81526004016108a0906124c5565b848381146114d25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b60448201526064016108a0565b60005b8181101561156a5760005b8686838181106114f2576114f261266a565b90506020020135811015611561576115598989848181106115155761151561266a565b905060200201602081019061152a91906121d1565b60035487878681811061153f5761153f61266a565b905060200201602081019061155491906127bf565b611ca6565b6001016114e0565b506001016114d5565b5050505050505050565b6001546001600160a01b0316331461159e5760405162461bcd60e51b81526004016108a0906124c5565b601080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000908152600660205260409020546001600160a01b0316151590565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556006909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611655826115c6565b6116a15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016108a0565b6000828152600660205260409020546001600160a01b039081169084168114806116e45750836001600160a01b03166116d9846108b8565b6001600160a01b0316145b8061171457506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b60026000540361176e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108a0565b600260005561177c816115c6565b6117bd5760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108a0565b6000818152600660205260409020546001600160a01b038481169116146118185760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba1037bbb732b960891b60448201526064016108a0565b6001600160a01b03821661185d5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108a0565b600061186884610da1565b116118a45760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2042616c616e636560a01b60448201526064016108a0565b6118af6000826115e3565b6001600160a01b03831660009081526007602052604081208054600192906118d89084906127dc565b90915550506001600160a01b03821660009081526007602052604081208054600192906119069084906127ef565b909155505060008181526006602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050600160005550565b611975816115c6565b6119b85760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88111bd95cc8139bdd08115e1a5cdd60621b60448201526064016108a0565b6000818152600660205260408120546001600160a01b0316906119db90836115e3565b6001600160a01b0381166000908152600760205260408120805460019290611a049084906127dc565b9091555050600082815260066020526040812080546001600160a01b03191690556002805460019290611a389084906127dc565b909155505060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603611ada5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a0565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b5284848461171c565b611b5e84848484611d34565b6110c45760405162461bcd60e51b81526004016108a090612802565b606081600003611ba15750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bcb5780611bb581612848565b9150611bc49050600a83612861565b9150611ba5565b60008167ffffffffffffffff811115611be657611be6612279565b6040519080825280601f01601f191660200182016040528015611c10576020820181803683370190505b509050815b8515611c9d57611c266001826127dc565b90506000611c35600a88612861565b611c4090600a6127a8565b611c4a90886127dc565b611c55906030612883565b905060008160f81b905080848481518110611c7257611c7261266a565b60200101906001600160f81b031916908160001a905350611c94600a89612861565b97505050611c15565b50949350505050565b611cb1838383611e3c565b611ccd6000848460405180602001604052806000815250611d34565b610a695760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108a0565b6000611d48846001600160a01b0316611fee565b15611e3157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d7f90339089908890889060040161289c565b6020604051808303816000875af1925050508015611dba575060408051601f3d908101601f19168201909252611db7918101906128d9565b60015b611e17573d808015611de8576040519150601f19603f3d011682016040523d82523d6000602084013e611ded565b606091505b508051600003611e0f5760405162461bcd60e51b81526004016108a090612802565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611714565b506001949350505050565b611e45826115c6565b15611e925760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a0565b8015611f0f576000828152600a60205260409020805460ff19166001179055600554611f005760405162461bcd60e51b815260206004820152601860248201527f4c696d69746564204d696e74204578636565647320436170000000000000000060448201526064016108a0565b60058054600019019055611f6c565b600060045411611f615760405162461bcd60e51b815260206004820152601960248201527f5374616e64617264204d696e742045786365656473204361700000000000000060448201526064016108a0565b600480546000190190555b600082815260066020908152604080832080546001600160a01b0319166001600160a01b038816908117909155600380546001908101909155600280548201905581855260079093528184208054909301909255518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611714575050151592915050565b6001600160e01b031981168114610b8c57600080fd5b60006020828403121561204f57600080fd5b813561205a81612027565b9392505050565b60005b8381101561207c578181015183820152602001612064565b50506000910152565b6000815180845261209d816020860160208601612061565b601f01601f19169290920160200192915050565b60208152600061205a6020830184612085565b6000602082840312156120d657600080fd5b5035919050565b6001600160a01b0381168114610b8c57600080fd5b6000806040838503121561210557600080fd5b8235612110816120dd565b946020939093013593505050565b6000806020838503121561213157600080fd5b823567ffffffffffffffff8082111561214957600080fd5b818501915085601f83011261215d57600080fd5b81358181111561216c57600080fd5b86602082850101111561217e57600080fd5b60209290920196919550909350505050565b6000806000606084860312156121a557600080fd5b83356121b0816120dd565b925060208401356121c0816120dd565b929592945050506040919091013590565b6000602082840312156121e357600080fd5b813561205a816120dd565b6020808252825182820181905260009190848201906040850190845b818110156122265783518352928401929184019160010161220a565b50909695505050505050565b8015158114610b8c57600080fd5b6000806040838503121561225357600080fd5b823561225e816120dd565b9150602083013561226e81612232565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156122a557600080fd5b84356122b0816120dd565b935060208501356122c0816120dd565b925060408501359150606085013567ffffffffffffffff808211156122e457600080fd5b818701915087601f8301126122f857600080fd5b81358181111561230a5761230a612279565b604051601f8201601f19908116603f0116810190838211818310171561233257612332612279565b816040528281528a602084870101111561234b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006060848603121561238457600080fd5b833561238f816120dd565b92506020840135915060408401356123a681612232565b809150509250925092565b60008083601f8401126123c357600080fd5b50813567ffffffffffffffff8111156123db57600080fd5b6020830191508360208260051b85010111156123f657600080fd5b9250929050565b6000806000806000806060878903121561241657600080fd5b863567ffffffffffffffff8082111561242e57600080fd5b61243a8a838b016123b1565b9098509650602089013591508082111561245357600080fd5b61245f8a838b016123b1565b9096509450604089013591508082111561247857600080fd5b5061248589828a016123b1565b979a9699509497509295939492505050565b600080604083850312156124aa57600080fd5b82356124b5816120dd565b9150602083013561226e816120dd565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600181811c9082168061250657607f821691505b60208210810361252657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a6957600081815260208120601f850160051c810160208610156125535750805b601f850160051c820191505b8181101561142f5782815560010161255f565b67ffffffffffffffff83111561258a5761258a612279565b61259e8361259883546124f2565b8361252c565b6000601f8411600181146125d257600085156125ba5750838201355b600019600387901b1c1916600186901b17835561262c565b600083815260209020601f19861690835b8281101561260357868501358255602094850194600190920191016125e3565b50868210156126205760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020808252601d908201527f63616c6c6572206e6f74206f776e6572206e6f7220617070726f766564000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561269257600080fd5b5051919050565b6000602082840312156126ab57600080fd5b815161205a81612232565b6000602082840312156126c857600080fd5b815161205a816120dd565b600081546126e0816124f2565b600182811680156126f8576001811461270d5761273c565b60ff198416875282151583028701945061273c565b8560005260208060002060005b858110156127335781548a82015290840190820161271a565b50505082870194505b5050505092915050565b600061275282856126d3565b8351612762818360208801612061565b01949350505050565b6000835161277d818460208801612061565b612789818401856126d3565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761087057610870612792565b6000602082840312156127d157600080fd5b813561205a81612232565b8181038181111561087057610870612792565b8082018082111561087057610870612792565b60208082526026908201527f4552433732313a206e6f6e20455243373231526563656976657220696d706c6560408201526536b2b73a32b960d11b606082015260800190565b60006001820161285a5761285a612792565b5060010190565b60008261287e57634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561087057610870612792565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128cf90830184612085565b9695505050505050565b6000602082840312156128eb57600080fd5b815161205a8161202756fea264697066735822122018a0b2b829ae4d21ab1212c34ad6f529d96c87056b7f8266c7523b24c0318e1f64736f6c6343000814003368747470733a2f2f697066732e696f2f697066732f516d663146434145317a6d756633767a426231745356364e584335584b6a635658554d6545634b743633735150442f68747470733a2f2f697066732e696f2f697066732f516d63396d3674385a435a336e6b6145703144747753456634734d43554279634877574341457947374d616776682f0000000000000000000000002cd46c74514a41b57dc4573727d8b5d1bedf9d93

Deployed Bytecode

0x6080604052600436106102605760003560e01c80636352211e11610144578063ae9843d6116100b6578063d1a1beb41161007a578063d1a1beb414610743578063d9ea7d4c14610756578063e5b8467214610776578063e8a7bc5714610796578063e946b7ed146107bb578063e985e9c5146107db57600080fd5b8063ae9843d6146106a1578063b88d4fde146106c3578063bab56d7a146106e3578063c87b56dd14610703578063cc7192811461072357600080fd5b80638da5cb5b116101085780638da5cb5b146105e557806394f9b73d146105fa57806395d89b411461061a578063989df72a1461064b578063a22cb46514610661578063a6f9dae11461068157600080fd5b80636352211e1461053b57806370a08231146105715780637a54150f14610591578063893d20e8146105a757806389476069146105c557600080fd5b80631fe09da3116101dd5780634408a046116101a15780634408a0461461047e57806344a0d68a1461049e5780634ada218b146104be57806355f804b3146104d85780635bf244be146104f857806362684f581461052557600080fd5b80631fe09da3146103d957806323b872dd146104095780633ccfd60b1461042957806342842e0e1461043e57806342966c681461045e57600080fd5b8063096283291161022457806309628329146103555780631031e36e1461037557806313faede61461038a57806318160ddd146103ae5780631e263990146103c357600080fd5b806301ffc9a71461026c5780630694db1e146102a157806306fdde03146102b8578063081812fc146102fd578063095ea7b31461033557600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c61028736600461203d565b610824565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610876565b005b3480156102c457600080fd5b5060408051808201909152601381527215985b5c1a5c994814db185e595c9cc8139195606a1b60208201525b60405161029891906120b1565b34801561030957600080fd5b5061031d6103183660046120c4565b6108b8565b6040516001600160a01b039091168152602001610298565b34801561034157600080fd5b506102b66103503660046120f2565b610937565b34801561036157600080fd5b506102b661037036600461211e565b610a6e565b34801561038157600080fd5b506102b6610aa5565b34801561039657600080fd5b506103a0600b5481565b604051908152602001610298565b3480156103ba57600080fd5b506002546103a0565b3480156103cf57600080fd5b506103a060035481565b3480156103e557600080fd5b5061028c6103f43660046120c4565b600a6020526000908152604090205460ff1681565b34801561041557600080fd5b506102b6610424366004612190565b610adb565b34801561043557600080fd5b506102b6610b0d565b34801561044a57600080fd5b506102b6610459366004612190565b610b8f565b34801561046a57600080fd5b506102b66104793660046120c4565b610baa565b34801561048a57600080fd5b506102b661049936600461211e565b610c37565b3480156104aa57600080fd5b506102b66104b93660046120c4565b610c6e565b3480156104ca57600080fd5b5060105461028c9060ff1681565b3480156104e457600080fd5b506102b66104f336600461211e565b610c9d565b34801561050457600080fd5b506105186105133660046121d1565b610cd4565b60405161029891906121ee565b34801561053157600080fd5b506103a060055481565b34801561054757600080fd5b5061031d6105563660046120c4565b6000908152600660205260409020546001600160a01b031690565b34801561057d57600080fd5b506103a061058c3660046121d1565b610da1565b34801561059d57600080fd5b506103a0600c5481565b3480156105b357600080fd5b506001546001600160a01b031661031d565b3480156105d157600080fd5b506102b66105e03660046121d1565b610e15565b3480156105f157600080fd5b5061031d610f69565b34801561060657600080fd5b506102b66106153660046120c4565b610fd2565b34801561062657600080fd5b5060408051808201909152600881526714d310564813919560c21b60208201526102f0565b34801561065757600080fd5b506103a060045481565b34801561066d57600080fd5b506102b661067c366004612240565b611001565b34801561068d57600080fd5b506102b661069c3660046121d1565b61100c565b3480156106ad57600080fd5b50604051630a85bd0160e11b8152602001610298565b3480156106cf57600080fd5b506102b66106de36600461228f565b611092565b3480156106ef57600080fd5b506102b66106fe3660046120c4565b6110ca565b34801561070f57600080fd5b506102f061071e3660046120c4565b6110f9565b34801561072f57600080fd5b506102f061073e3660046120f2565b61119c565b6102b661075136600461236f565b61120d565b34801561076257600080fd5b506102b66107713660046120c4565b611437565b34801561078257600080fd5b506102b66107913660046123fd565b611466565b3480156107a257600080fd5b5060105461031d9061010090046001600160a01b031681565b3480156107c757600080fd5b506102b66107d63660046121d1565b611574565b3480156107e757600080fd5b5061028c6107f6366004612497565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b60006001600160e01b031982166380ac58cd60e01b148061085557506001600160e01b03198216635b5e139f60e01b145b8061087057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546001600160a01b031633146108a95760405162461bcd60e51b81526004016108a0906124c5565b60405180910390fd5b6010805460ff19166001179055565b60006108c3826115c6565b61091b5760405162461bcd60e51b815260206004820152602360248201527f4552433732313a20717565727920666f72206e6f6e6578697374656e7420746f60448201526235b2b760e91b60648201526084016108a0565b506000908152600860205260409020546001600160a01b031690565b610940816115c6565b6109815760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108a0565b6000818152600660205260409020546001600160a01b039081169083168190036109f75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a0565b336001600160a01b0382161480610a135750610a1381336107f6565b610a5f5760405162461bcd60e51b815260206004820152601d60248201527f4552433732313a206e6f7420617070726f766564206f72206f776e657200000060448201526064016108a0565b610a6983836115e3565b505050565b6001546001600160a01b03163314610a985760405162461bcd60e51b81526004016108a0906124c5565b600e610a69828483612572565b6001546001600160a01b03163314610acf5760405162461bcd60e51b81526004016108a0906124c5565b6010805460ff19169055565b610ae6335b8261164a565b610b025760405162461bcd60e51b81526004016108a090612633565b610a6983838361171c565b6001546001600160a01b03163314610b375760405162461bcd60e51b81526004016108a0906124c5565b604051600090339047908381818185875af1925050503d8060008114610b79576040519150601f19603f3d011682016040523d82523d6000602084013e610b7e565b606091505b5050905080610b8c57600080fd5b50565b610a6983838360405180602001604052806000815250611092565b600260005403610bfc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108a0565b6002600055610c0a33610ae0565b610c265760405162461bcd60e51b81526004016108a090612633565b610c2f8161196c565b506001600055565b6001546001600160a01b03163314610c615760405162461bcd60e51b81526004016108a0906124c5565b600f610a69828483612572565b6001546001600160a01b03163314610c985760405162461bcd60e51b81526004016108a0906124c5565b600b55565b6001546001600160a01b03163314610cc75760405162461bcd60e51b81526004016108a0906124c5565b600d610a69828483612572565b60606000610ce183610da1565b67ffffffffffffffff811115610cf957610cf9612279565b604051908082528060200260200182016040528015610d22578160200160208202803683370190505b509050610d2e83610da1565b600003610d3b5792915050565b6000805b600354811015610d98576000818152600660205260409020546001600160a01b03808716911603610d905780838381518110610d7d57610d7d61266a565b6020026020010181815250508160010191505b600101610d3f565b50909392505050565b60006001600160a01b038216610df95760405162461bcd60e51b815260206004820152601a60248201527f717565727920666f7220746865207a65726f206164647265737300000000000060448201526064016108a0565b506001600160a01b031660009081526007602052604090205490565b6001546001600160a01b03163314610e3f5760405162461bcd60e51b81526004016108a0906124c5565b6001600160a01b038116610e845760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108a0565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190612680565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190612699565b5050565b6000306001600160a01b031663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcd91906126b6565b905090565b6001546001600160a01b03163314610ffc5760405162461bcd60e51b81526004016108a0906124c5565b600555565b610f65338383611a79565b6001546001600160a01b031633146110365760405162461bcd60e51b81526004016108a0906124c5565b6001546040516001600160a01b038084169216907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73590600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b61109c338361164a565b6110b85760405162461bcd60e51b81526004016108a090612633565b6110c484848484611b47565b50505050565b6001546001600160a01b031633146110f45760405162461bcd60e51b81526004016108a0906124c5565b600c55565b6000818152600a60205260408120546060919060ff1661114357600d61111e84611b7a565b60405160200161112f929190612746565b60405160208183030381529060405261116f565b600e61114e84611b7a565b60405160200161115f929190612746565b6040516020818303038152906040525b905080600f60405160200161118592919061276b565b604051602081830303815290604052915050919050565b60105460609060ff1680156111b957506001600160a01b03831615155b80156111c55750600082115b156111df5750604080516020810190915260008152610870565b5060408051808201909152601081526f53616c65206973206e6f74206c69766560801b602082015292915050565b60105460ff16801561122e575060105461010090046001600160a01b031615155b6112705760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c8139bdd08115b98589b1959606a1b60448201526064016108a0565b600082116112b35760405162461bcd60e51b815260206004820152601060248201526f43616e6e6f74204d696e74205a65726f60801b60448201526064016108a0565b6001600160a01b0383166112f85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f204164647265737360a01b60448201526064016108a0565b6000816113125782600b5461130d91906127a8565b611320565b82600c5461132091906127a8565b9050803410156113675760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742056616c756560701b60448201526064016108a0565b60105460405160009161010090046001600160a01b03169034908381818185875af1925050503d80600081146113b9576040519150601f19603f3d011682016040523d82523d6000602084013e6113be565b606091505b505090508061140f5760405162461bcd60e51b815260206004820152601c60248201527f4d696e74526563697069656e74205061796d656e74204661696c65640000000060448201526064016108a0565b60005b8481101561142f576114278660035486611ca6565b600101611412565b505050505050565b6001546001600160a01b031633146114615760405162461bcd60e51b81526004016108a0906124c5565b600455565b6001546001600160a01b031633146114905760405162461bcd60e51b81526004016108a0906124c5565b848381146114d25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204c656e6774687360881b60448201526064016108a0565b60005b8181101561156a5760005b8686838181106114f2576114f261266a565b90506020020135811015611561576115598989848181106115155761151561266a565b905060200201602081019061152a91906121d1565b60035487878681811061153f5761153f61266a565b905060200201602081019061155491906127bf565b611ca6565b6001016114e0565b506001016114d5565b5050505050505050565b6001546001600160a01b0316331461159e5760405162461bcd60e51b81526004016108a0906124c5565b601080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000908152600660205260409020546001600160a01b0316151590565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556006909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6000611655826115c6565b6116a15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016108a0565b6000828152600660205260409020546001600160a01b039081169084168114806116e45750836001600160a01b03166116d9846108b8565b6001600160a01b0316145b8061171457506001600160a01b0380821660009081526009602090815260408083209388168352929052205460ff165b949350505050565b60026000540361176e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108a0565b600260005561177c816115c6565b6117bd5760405162461bcd60e51b81526020600482015260126024820152712737b71022bc34b9ba32b73a102a37b5b2b760711b60448201526064016108a0565b6000818152600660205260409020546001600160a01b038481169116146118185760405162461bcd60e51b815260206004820152600f60248201526e24b731b7b93932b1ba1037bbb732b960891b60448201526064016108a0565b6001600160a01b03821661185d5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b60448201526064016108a0565b600061186884610da1565b116118a45760405162461bcd60e51b815260206004820152600c60248201526b5a65726f2042616c616e636560a01b60448201526064016108a0565b6118af6000826115e3565b6001600160a01b03831660009081526007602052604081208054600192906118d89084906127dc565b90915550506001600160a01b03821660009081526007602052604081208054600192906119069084906127ef565b909155505060008181526006602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050600160005550565b611975816115c6565b6119b85760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88111bd95cc8139bdd08115e1a5cdd60621b60448201526064016108a0565b6000818152600660205260408120546001600160a01b0316906119db90836115e3565b6001600160a01b0381166000908152600760205260408120805460019290611a049084906127dc565b9091555050600082815260066020526040812080546001600160a01b03191690556002805460019290611a389084906127dc565b909155505060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603611ada5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a0565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b5284848461171c565b611b5e84848484611d34565b6110c45760405162461bcd60e51b81526004016108a090612802565b606081600003611ba15750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bcb5780611bb581612848565b9150611bc49050600a83612861565b9150611ba5565b60008167ffffffffffffffff811115611be657611be6612279565b6040519080825280601f01601f191660200182016040528015611c10576020820181803683370190505b509050815b8515611c9d57611c266001826127dc565b90506000611c35600a88612861565b611c4090600a6127a8565b611c4a90886127dc565b611c55906030612883565b905060008160f81b905080848481518110611c7257611c7261266a565b60200101906001600160f81b031916908160001a905350611c94600a89612861565b97505050611c15565b50949350505050565b611cb1838383611e3c565b611ccd6000848460405180602001604052806000815250611d34565b610a695760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108a0565b6000611d48846001600160a01b0316611fee565b15611e3157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d7f90339089908890889060040161289c565b6020604051808303816000875af1925050508015611dba575060408051601f3d908101601f19168201909252611db7918101906128d9565b60015b611e17573d808015611de8576040519150601f19603f3d011682016040523d82523d6000602084013e611ded565b606091505b508051600003611e0f5760405162461bcd60e51b81526004016108a090612802565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611714565b506001949350505050565b611e45826115c6565b15611e925760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a0565b8015611f0f576000828152600a60205260409020805460ff19166001179055600554611f005760405162461bcd60e51b815260206004820152601860248201527f4c696d69746564204d696e74204578636565647320436170000000000000000060448201526064016108a0565b60058054600019019055611f6c565b600060045411611f615760405162461bcd60e51b815260206004820152601960248201527f5374616e64617264204d696e742045786365656473204361700000000000000060448201526064016108a0565b600480546000190190555b600082815260066020908152604080832080546001600160a01b0319166001600160a01b038816908117909155600380546001908101909155600280548201905581855260079093528184208054909301909255518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611714575050151592915050565b6001600160e01b031981168114610b8c57600080fd5b60006020828403121561204f57600080fd5b813561205a81612027565b9392505050565b60005b8381101561207c578181015183820152602001612064565b50506000910152565b6000815180845261209d816020860160208601612061565b601f01601f19169290920160200192915050565b60208152600061205a6020830184612085565b6000602082840312156120d657600080fd5b5035919050565b6001600160a01b0381168114610b8c57600080fd5b6000806040838503121561210557600080fd5b8235612110816120dd565b946020939093013593505050565b6000806020838503121561213157600080fd5b823567ffffffffffffffff8082111561214957600080fd5b818501915085601f83011261215d57600080fd5b81358181111561216c57600080fd5b86602082850101111561217e57600080fd5b60209290920196919550909350505050565b6000806000606084860312156121a557600080fd5b83356121b0816120dd565b925060208401356121c0816120dd565b929592945050506040919091013590565b6000602082840312156121e357600080fd5b813561205a816120dd565b6020808252825182820181905260009190848201906040850190845b818110156122265783518352928401929184019160010161220a565b50909695505050505050565b8015158114610b8c57600080fd5b6000806040838503121561225357600080fd5b823561225e816120dd565b9150602083013561226e81612232565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156122a557600080fd5b84356122b0816120dd565b935060208501356122c0816120dd565b925060408501359150606085013567ffffffffffffffff808211156122e457600080fd5b818701915087601f8301126122f857600080fd5b81358181111561230a5761230a612279565b604051601f8201601f19908116603f0116810190838211818310171561233257612332612279565b816040528281528a602084870101111561234b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006060848603121561238457600080fd5b833561238f816120dd565b92506020840135915060408401356123a681612232565b809150509250925092565b60008083601f8401126123c357600080fd5b50813567ffffffffffffffff8111156123db57600080fd5b6020830191508360208260051b85010111156123f657600080fd5b9250929050565b6000806000806000806060878903121561241657600080fd5b863567ffffffffffffffff8082111561242e57600080fd5b61243a8a838b016123b1565b9098509650602089013591508082111561245357600080fd5b61245f8a838b016123b1565b9096509450604089013591508082111561247857600080fd5b5061248589828a016123b1565b979a9699509497509295939492505050565b600080604083850312156124aa57600080fd5b82356124b5816120dd565b9150602083013561226e816120dd565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b600181811c9082168061250657607f821691505b60208210810361252657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a6957600081815260208120601f850160051c810160208610156125535750805b601f850160051c820191505b8181101561142f5782815560010161255f565b67ffffffffffffffff83111561258a5761258a612279565b61259e8361259883546124f2565b8361252c565b6000601f8411600181146125d257600085156125ba5750838201355b600019600387901b1c1916600186901b17835561262c565b600083815260209020601f19861690835b8281101561260357868501358255602094850194600190920191016125e3565b50868210156126205760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020808252601d908201527f63616c6c6572206e6f74206f776e6572206e6f7220617070726f766564000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561269257600080fd5b5051919050565b6000602082840312156126ab57600080fd5b815161205a81612232565b6000602082840312156126c857600080fd5b815161205a816120dd565b600081546126e0816124f2565b600182811680156126f8576001811461270d5761273c565b60ff198416875282151583028701945061273c565b8560005260208060002060005b858110156127335781548a82015290840190820161271a565b50505082870194505b5050505092915050565b600061275282856126d3565b8351612762818360208801612061565b01949350505050565b6000835161277d818460208801612061565b612789818401856126d3565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761087057610870612792565b6000602082840312156127d157600080fd5b813561205a81612232565b8181038181111561087057610870612792565b8082018082111561087057610870612792565b60208082526026908201527f4552433732313a206e6f6e20455243373231526563656976657220696d706c6560408201526536b2b73a32b960d11b606082015260800190565b60006001820161285a5761285a612792565b5060010190565b60008261287e57634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561087057610870612792565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128cf90830184612085565b9695505050505050565b6000602082840312156128eb57600080fd5b815161205a8161202756fea264697066735822122018a0b2b829ae4d21ab1212c34ad6f529d96c87056b7f8266c7523b24c0318e1f64736f6c63430008140033

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

0000000000000000000000002cd46c74514a41b57dc4573727d8b5d1bedf9d93

-----Decoded View---------------
Arg [0] : _mintRecipient (address): 0x2Cd46c74514a41b57DC4573727D8b5d1BEdF9d93

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002cd46c74514a41b57dc4573727d8b5d1bedf9d93


Deployed Bytecode Sourcemap

24093:18671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37789:297;;;;;;;;;;-1:-1:-1;37789:297:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;37789:297:0;;;;;;;;26042:84;;;;;;;;;;;;;:::i;:::-;;38584:92;;;;;;;;;;-1:-1:-1;38663:5:0;;;;;;;;;;;;-1:-1:-1;;;38663:5:0;;;;38584:92;;;;;;;:::i;39990:204::-;;;;;;;;;;-1:-1:-1;39990:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;39990:204:0;1533:203:1;29727:435:0;;;;;;;;;;-1:-1:-1;29727:435:0;;;;;:::i;:::-;;:::i;26706:112::-;;;;;;;;;;-1:-1:-1;26706:112:0;;;;;:::i;:::-;;:::i;26134:84::-;;;;;;;;;;;;;:::i;25276:33::-;;;;;;;;;;;;;;;;;;;2940:25:1;;;2928:2;2913:18;25276:33:0;2794:177:1;37139:93:0;;;;;;;;;;-1:-1:-1;37212:12:0;;37139:93;;24521:33;;;;;;;;;;;;;;;;25189:38;;;;;;;;;;-1:-1:-1;25189:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30450:256;;;;;;;;;;-1:-1:-1;30450:256:0;;;;;:::i;:::-;;:::i;26226:149::-;;;;;;;;;;;;;:::i;30777:177::-;;;;;;;;;;-1:-1:-1;30777:177:0;;;;;:::i;:::-;;:::i;29448:180::-;;;;;;;;;;-1:-1:-1;29448:180:0;;;;;:::i;:::-;;:::i;26826:114::-;;;;;;;;;;-1:-1:-1;26826:114:0;;;;;:::i;:::-;;:::i;27074:82::-;;;;;;;;;;-1:-1:-1;27074:82:0;;;;;:::i;:::-;;:::i;25656:26::-;;;;;;;;;;-1:-1:-1;25656:26:0;;;;;;;;26600:98;;;;;;;;;;-1:-1:-1;26600:98:0;;;;;:::i;:::-;;:::i;37240:477::-;;;;;;;;;;-1:-1:-1;37240:477:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24645:44::-;;;;;;;;;;;;;;;;38402:115;;;;;;;;;;-1:-1:-1;38402:115:0;;;;;:::i;:::-;38466:7;38493:16;;;:7;:16;;;;;;-1:-1:-1;;;;;38493:16:0;;38402:115;38150:190;;;;;;;;;;-1:-1:-1;38150:190:0;;;;;:::i;:::-;;:::i;25316:40::-;;;;;;;;;;;;;;;;24001:83;;;;;;;;;;-1:-1:-1;24071:5:0;;-1:-1:-1;;;;;24071:5:0;24001:83;;26383:209;;;;;;;;;;-1:-1:-1;26383:209:0;;;;;:::i;:::-;;:::i;39834:90::-;;;;;;;;;;;;;:::i;27408:130::-;;;;;;;;;;-1:-1:-1;27408:130:0;;;;;:::i;:::-;;:::i;38745:96::-;;;;;;;;;;-1:-1:-1;38826:7:0;;;;;;;;;;;;-1:-1:-1;;;38826:7:0;;;;38745:96;;24580:46;;;;;;;;;;;;;;;;30234:149;;;;;;;;;;-1:-1:-1;30234:149:0;;;;;:::i;:::-;;:::i;23775:132::-;;;;;;;;;;-1:-1:-1;23775:132:0;;;;;:::i;:::-;;:::i;41285:124::-;;;;;;;;;;-1:-1:-1;41285:124:0;;-1:-1:-1;;;4980:52:1;;4968:2;4953:18;41285:124:0;4836:202:1;31025:300:0;;;;;;;;;;-1:-1:-1;31025:300:0;;;;;:::i;:::-;;:::i;27164:96::-;;;;;;;;;;-1:-1:-1;27164:96:0;;;;;:::i;:::-;;:::i;38912:277::-;;;;;;;;;;-1:-1:-1;38912:277:0;;;;;:::i;:::-;;:::i;36882:249::-;;;;;;;;;;-1:-1:-1;36882:249:0;;;;;:::i;:::-;;:::i;28468:972::-;;;;;;:::i;:::-;;:::i;27268:132::-;;;;;;;;;;-1:-1:-1;27268:132:0;;;;;:::i;:::-;;:::i;27743:487::-;;;;;;;;;;-1:-1:-1;27743:487:0;;;;;:::i;:::-;;:::i;25714:28::-;;;;;;;;;;-1:-1:-1;25714:28:0;;;;;;;-1:-1:-1;;;;;25714:28:0;;;26948:118;;;;;;;;;;-1:-1:-1;26948:118:0;;;;;:::i;:::-;;:::i;40265:162::-;;;;;;;;;;-1:-1:-1;40265:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;40381:27:0;;;40357:4;40381:27;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;;;;40265:162;37789:297;37883:4;-1:-1:-1;;;;;;37920:40:0;;-1:-1:-1;;;37920:40:0;;:105;;-1:-1:-1;;;;;;;37977:48:0;;-1:-1:-1;;;37977:48:0;37920:105;:158;;;-1:-1:-1;;;;;;;;;;1616:40:0;;;38042:36;37900:178;37789:297;-1:-1:-1;;37789:297:0:o;26042:84::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;;;;;;;;;26097:14:::1;:21:::0;;-1:-1:-1;;26097:21:0::1;26114:4;26097:21;::::0;;26042:84::o;39990:204::-;40058:7;40086:16;40094:7;40086;:16::i;:::-;40078:64;;;;-1:-1:-1;;;40078:64:0;;9306:2:1;40078:64:0;;;9288:21:1;9345:2;9325:18;;;9318:30;9384:34;9364:18;;;9357:62;-1:-1:-1;;;9435:18:1;;;9428:33;9478:19;;40078:64:0;9104:399:1;40078:64:0;-1:-1:-1;40162:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;40162:24:0;;39990:204::o;29727:435::-;29808:16;29816:7;29808;:16::i;:::-;29800:47;;;;-1:-1:-1;;;29800:47:0;;9710:2:1;29800:47:0;;;9692:21:1;9749:2;9729:18;;;9722:30;-1:-1:-1;;;9768:18:1;;;9761:48;9826:18;;29800:47:0;9508:342:1;29800:47:0;29858:15;38493:16;;;:7;:16;;;;;;-1:-1:-1;;;;;38493:16:0;;;;29911:13;;;;;29903:59;;;;-1:-1:-1;;;29903:59:0;;10057:2:1;29903:59:0;;;10039:21:1;10096:2;10076:18;;;10069:30;10135:34;10115:18;;;10108:62;-1:-1:-1;;;10186:18:1;;;10179:31;10227:19;;29903:59:0;9855:397:1;29903:59:0;17407:10;-1:-1:-1;;;;;29997:23:0;;;;:66;;-1:-1:-1;30024:39:0;30041:7;17407:10;40265:162;:::i;30024:39::-;29975:145;;;;-1:-1:-1;;;29975:145:0;;10459:2:1;29975:145:0;;;10441:21:1;10498:2;10478:18;;;10471:30;10537:31;10517:18;;;10510:59;10586:18;;29975:145:0;10257:353:1;29975:145:0;30133:21;30142:2;30146:7;30133:8;:21::i;:::-;29789:373;29727:435;;:::o;26706:112::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;26787:14:::1;:23;26804:6:::0;;26787:14;:23:::1;:::i;26134:84::-:0;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;26188:14:::1;:22:::0;;-1:-1:-1;;26188:22:0::1;::::0;;26134:84::o;30450:256::-;30584:41;17407:10;30603:12;30617:7;30584:18;:41::i;:::-;30576:83;;;;-1:-1:-1;;;30576:83:0;;;;;;;:::i;:::-;30670:28;30680:4;30686:2;30690:7;30670:9;:28::i;26226:149::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;26288:58:::1;::::0;26277:6:::1;::::0;26296:10:::1;::::0;26320:21:::1;::::0;26277:6;26288:58;26277:6;26288:58;26320:21;26296:10;26288:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26276:70;;;26365:1;26357:10;;;::::0;::::1;;26265:110;26226:149::o:0;30777:177::-;30907:39;30924:4;30930:2;30934:7;30907:39;;;;;;;;;;;;:16;:39::i;29448:180::-;17666:1;17811:7;;:19;17803:63;;;;-1:-1:-1;;;17803:63:0;;13828:2:1;17803:63:0;;;13810:21:1;13867:2;13847:18;;;13840:30;13906:33;13886:18;;;13879:61;13957:18;;17803:63:0;13626:355:1;17803:63:0;17666:1;17877:7;:18;29520:41:::1;17407:10:::0;29539:12:::1;17327:98:::0;29520:41:::1;29512:83;;;;-1:-1:-1::0;;;29512:83:0::1;;;;;;;:::i;:::-;29606:14;29612:7;29606:5;:14::i;:::-;-1:-1:-1::0;17622:1:0;17918:7;:22;29448:180::o;26826:114::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;26911:6:::1;:21;26920:12:::0;;26911:6;:21:::1;:::i;27074:82::-:0;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;27136:4:::1;:12:::0;27074:82::o;26600:98::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;26674:7:::1;:16;26684:6:::0;;26674:7;:16:::1;:::i;37240:477::-:0;37302:16;37331:20;37368:17;37378:6;37368:9;:17::i;:::-;37354:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37354:32:0;;37331:55;;37401:17;37411:6;37401:9;:17::i;:::-;37422:1;37401:22;37397:38;;37432:3;37240:477;-1:-1:-1;;37240:477:0:o;37397:38::-;37446:13;37479:6;37474:215;37495:18;;37491:1;:22;37474:215;;;37535:10;;;;:7;:10;;;;;;-1:-1:-1;;;;;37535:20:0;;;:10;;:20;37531:115;;37589:1;37576:3;37580:5;37576:10;;;;;;;;:::i;:::-;;;;;;:14;;;;;37621:7;;;;;37531:115;37672:3;;37474:215;;;-1:-1:-1;37706:3:0;;37240:477;-1:-1:-1;;;37240:477:0:o;38150:190::-;38216:7;-1:-1:-1;;;;;38244:21:0;;38236:60;;;;-1:-1:-1;;;38236:60:0;;14320:2:1;38236:60:0;;;14302:21:1;14359:2;14339:18;;;14332:30;14398:28;14378:18;;;14371:56;14444:18;;38236:60:0;14118:350:1;38236:60:0;-1:-1:-1;;;;;;38314:18:0;;;;;:9;:18;;;;;;;38150:190::o;26383:209::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26460:20:0;::::1;26452:45;;;::::0;-1:-1:-1;;;26452:45:0;;14675:2:1;26452:45:0::1;::::0;::::1;14657:21:1::0;14714:2;14694:18;;;14687:30;-1:-1:-1;;;14733:18:1;;;14726:42;14785:18;;26452:45:0::1;14473:336:1::0;26452:45:0::1;26544:39;::::0;-1:-1:-1;;;26544:39:0;;26577:4:::1;26544:39;::::0;::::1;1679:51:1::0;-1:-1:-1;;;;;26508:23:0;::::1;::::0;::::1;::::0;26532:10:::1;::::0;26508:23;;26544:24:::1;::::0;1652:18:1;;26544:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26508:76;::::0;-1:-1:-1;;;;;;26508:76:0::1;::::0;;;;;;-1:-1:-1;;;;;15195:32:1;;;26508:76:0::1;::::0;::::1;15177:51:1::0;15244:18;;;15237:34;15150:18;;26508:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26383:209:::0;:::o;39834:90::-;39874:7;39901:4;-1:-1:-1;;;;;39901:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39894:22;;39834:90;:::o;27408:130::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;27493:22:::1;:37:::0;27408:130::o;30234:149::-;30322:53;17407:10;30355:9;30366:8;30322:18;:53::i;23775:132::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;23856:5:::1;::::0;23847:25:::1;::::0;-1:-1:-1;;;;;23847:25:0;;::::1;::::0;23856:5:::1;::::0;23847:25:::1;::::0;23856:5:::1;::::0;23847:25:::1;23883:5;:16:::0;;-1:-1:-1;;;;;;23883:16:0::1;-1:-1:-1::0;;;;;23883:16:0;;;::::1;::::0;;;::::1;::::0;;23775:132::o;31025:300::-;31192:41;17407:10;31225:7;31192:18;:41::i;:::-;31184:83;;;;-1:-1:-1;;;31184:83:0;;;;;;;:::i;:::-;31278:39;31292:4;31298:2;31302:7;31311:5;31278:13;:39::i;:::-;31025:300;;;;:::o;27164:96::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;27233:11:::1;:19:::0;27164:96::o;38912:277::-;39003:19;39025:15;;;:6;:15;;;;;;38977:13;;39003:19;39025:15;;:110;;39108:7;39117:17;39126:7;39117:8;:17::i;:::-;39094:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39025:110;;;39057:14;39073:17;39082:7;39073:8;:17::i;:::-;39043:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39025:110;39003:132;;39167:5;39174:6;39153:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39146:35;;;38912:277;;;:::o;36882:249::-;36998:14;;36968:13;;36998:14;;:35;;;;-1:-1:-1;;;;;;37016:17:0;;;;36998:35;:52;;;;;37049:1;37037:9;:13;36998:52;36994:94;;;-1:-1:-1;37067:9:0;;;;;;;;;-1:-1:-1;37067:9:0;;;;36994:94;-1:-1:-1;37098:25:0;;;;;;;;;;;;-1:-1:-1;;;37098:25:0;;;;36882:249;;;;:::o;28468:972::-;28568:14;;;;:45;;;;-1:-1:-1;28586:13:0;;;;;-1:-1:-1;;;;;28586:13:0;:27;;28568:45;28546:114;;;;-1:-1:-1;;;28546:114:0;;17485:2:1;28546:114:0;;;17467:21:1;17524:2;17504:18;;;17497:30;-1:-1:-1;;;17543:18:1;;;17536:49;17602:18;;28546:114:0;17283:343:1;28546:114:0;28699:1;28693:3;:7;28671:74;;;;-1:-1:-1;;;28671:74:0;;17833:2:1;28671:74:0;;;17815:21:1;17872:2;17852:18;;;17845:30;-1:-1:-1;;;17891:18:1;;;17884:46;17947:18;;28671:74:0;17631:340:1;28671:74:0;-1:-1:-1;;;;;28778:16:0;;28756:78;;;;-1:-1:-1;;;28756:78:0;;14675:2:1;28756:78:0;;;14657:21:1;14714:2;14694:18;;;14687:30;-1:-1:-1;;;14733:18:1;;;14726:42;14785:18;;28756:78:0;14473:336:1;28756:78:0;28889:16;28908:4;:37;;28942:3;28935:4;;:10;;;;:::i;:::-;28908:37;;;28929:3;28915:11;;:17;;;;:::i;:::-;28889:56;;29036:8;29023:9;:21;;29001:89;;;;-1:-1:-1;;;29001:89:0;;18483:2:1;29001:89:0;;;18465:21:1;18522:2;18502:18;;;18495:30;-1:-1:-1;;;18541:18:1;;;18534:48;18599:18;;29001:89:0;18281:342:1;29001:89:0;29173:13;;29165:49;;29154:6;;29173:13;;;-1:-1:-1;;;;;29173:13:0;;29200:9;;29154:6;29165:49;29154:6;29165:49;29200:9;29173:13;29165:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29153:61;;;29233:1;29225:42;;;;-1:-1:-1;;;29225:42:0;;18830:2:1;29225:42:0;;;18812:21:1;18869:2;18849:18;;;18842:30;18908;18888:18;;;18881:58;18956:18;;29225:42:0;18628:352:1;29225:42:0;29313:6;29308:125;29329:3;29325:1;:7;29308:125;;;29350:39;29360:2;29364:18;;29384:4;29350:9;:39::i;:::-;29416:3;;29308:125;;;;28535:905;;28468:972;;;:::o;27268:132::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;27354:23:::1;:38:::0;27268:132::o;27743:487::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;27891:3;27920:22;;::::1;27912:50;;;::::0;-1:-1:-1;;;27912:50:0;;19187:2:1;27912:50:0::1;::::0;::::1;19169:21:1::0;19226:2;19206:18;;;19199:30;-1:-1:-1;;;19245:18:1;;;19238:45;19300:18;;27912:50:0::1;18985:339:1::0;27912:50:0::1;27988:6;27983:240;28004:7;28000:1;:11;27983:240;;;28034:6;28029:151;28050:4;;28055:1;28050:7;;;;;;;:::i;:::-;;;;;;;28046:1;:11;28029:151;;;28079:49;28089:3;;28093:1;28089:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28097:18;;28117:7;;28125:1;28117:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28079:9;:49::i;:::-;28159:3;;28029:151;;;-1:-1:-1::0;28206:3:0::1;;27983:240;;;;27855:375;27743:487:::0;;;;;;:::o;26948:118::-;23382:5;;-1:-1:-1;;;;;23382:5:0;23368:10;:19;23360:51;;;;-1:-1:-1;;;23360:51:0;;;;;;;:::i;:::-;27028:13:::1;:30:::0;;-1:-1:-1;;;;;27028:30:0;;::::1;;;-1:-1:-1::0;;;;;;27028:30:0;;::::1;::::0;;;::::1;::::0;;26948:118::o;40671:119::-;40728:4;40752:16;;;:7;:16;;;;;;-1:-1:-1;;;;;40752:16:0;:30;;;40671:119::o;36086:159::-;36153:24;;;;:15;:24;;;;;;;;:29;;-1:-1:-1;;;;;;36153:29:0;-1:-1:-1;;;;;36153:29:0;;;;;;;;;38493:7;:16;;;;;;;36198:39;;36153:24;;38493:16;;;;;36198:39;;;36086:159;;:::o;40957:320::-;41042:4;41067:16;41075:7;41067;:16::i;:::-;41059:54;;;;-1:-1:-1;;;41059:54:0;;19777:2:1;41059:54:0;;;19759:21:1;19816:2;19796:18;;;19789:30;19855:27;19835:18;;;19828:55;19900:18;;41059:54:0;19575:349:1;41059:54:0;41124:15;38493:16;;;:7;:16;;;;;;-1:-1:-1;;;;;38493:16:0;;;;41177:18;;;;;:53;;;41223:7;-1:-1:-1;;;;;41199:31:0;:20;41211:7;41199:11;:20::i;:::-;-1:-1:-1;;;;;41199:31:0;;41177:53;:91;;;-1:-1:-1;;;;;;40381:27:0;;;40357:4;40381:27;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;41234:34;41169:100;40957:320;-1:-1:-1;;;;40957:320:0:o;34597:645::-;17666:1;17811:7;;:19;17803:63;;;;-1:-1:-1;;;17803:63:0;;13828:2:1;17803:63:0;;;13810:21:1;13867:2;13847:18;;;13840:30;13906:33;13886:18;;;13879:61;13957:18;;17803:63:0;13626:355:1;17803:63:0;17666:1;17877:7;:18;34734:16:::1;34742:7:::0;34734::::1;:16::i;:::-;34726:47;;;::::0;-1:-1:-1;;;34726:47:0;;9710:2:1;34726:47:0::1;::::0;::::1;9692:21:1::0;9749:2;9729:18;;;9722:30;-1:-1:-1;;;9768:18:1;;;9761:48;9826:18;;34726:47:0::1;9508:342:1::0;34726:47:0::1;38466:7:::0;38493:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34792:24:0;;::::1;38493:16:::0;;34792:24:::1;34784:52;;;::::0;-1:-1:-1;;;34784:52:0;;20131:2:1;34784:52:0::1;::::0;::::1;20113:21:1::0;20170:2;20150:18;;;20143:30;-1:-1:-1;;;20189:18:1;;;20182:45;20244:18;;34784:52:0::1;19929:339:1::0;34784:52:0::1;-1:-1:-1::0;;;;;34855:16:0;::::1;34847:41;;;::::0;-1:-1:-1;;;34847:41:0;;20475:2:1;34847:41:0::1;::::0;::::1;20457:21:1::0;20514:2;20494:18;;;20487:30;-1:-1:-1;;;20533:18:1;;;20526:42;20585:18;;34847:41:0::1;20273:336:1::0;34847:41:0::1;34925:1;34907:15;34917:4;34907:9;:15::i;:::-;:19;34899:44;;;::::0;-1:-1:-1;;;34899:44:0;;20816:2:1;34899:44:0::1;::::0;::::1;20798:21:1::0;20855:2;20835:18;;;20828:30;-1:-1:-1;;;20874:18:1;;;20867:42;20926:18;;34899:44:0::1;20614:336:1::0;34899:44:0::1;35008:29;35025:1;35029:7;35008:8;:29::i;:::-;-1:-1:-1::0;;;;;35080:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:20;;35099:1:::1;::::0;35080:15;:20:::1;::::0;35099:1;;35080:20:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;35111:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;:20;;35130:1:::1;::::0;35111:13;:20:::1;::::0;35130:1;;35111:20:::1;:::i;:::-;::::0;;;-1:-1:-1;;35142:16:0::1;::::0;;;:7:::1;:16;::::0;;;;;:21;;-1:-1:-1;;;;;;35142:21:0::1;-1:-1:-1::0;;;;;35142:21:0;;::::1;::::0;;::::1;::::0;;;35207:27;;35142:16;;35207:27;;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;17622:1:0;17918:7;:22;-1:-1:-1;34597:645:0:o;35471:497::-;35531:16;35539:7;35531;:16::i;:::-;35523:49;;;;-1:-1:-1;;;35523:49:0;;21420:2:1;35523:49:0;;;21402:21:1;21459:2;21439:18;;;21432:30;-1:-1:-1;;;21478:18:1;;;21471:50;21538:18;;35523:49:0;21218:344:1;35523:49:0;35612:14;38493:16;;;:7;:16;;;;;;-1:-1:-1;;;;;38493:16:0;;35686:29;;38493:16;35686:8;:29::i;:::-;-1:-1:-1;;;;;35758:17:0;;;;;;:9;:17;;;;;:22;;35779:1;;35758:17;:22;;35779:1;;35758:22;:::i;:::-;;;;-1:-1:-1;;35798:16:0;;;;:7;:16;;;;;35791:23;;-1:-1:-1;;;;;;35791:23:0;;;35862:12;:17;;35791:23;;35798:16;35862:17;;35791:23;;35862:17;:::i;:::-;;;;-1:-1:-1;;35923:37:0;;35952:7;;35948:1;;-1:-1:-1;;;;;35923:37:0;;;;;35948:1;;35923:37;35512:456;35471:497;:::o;36387:319::-;36539:9;-1:-1:-1;;;;;36528:20:0;:7;-1:-1:-1;;;;;36528:20:0;;36520:58;;;;-1:-1:-1;;;36520:58:0;;21769:2:1;36520:58:0;;;21751:21:1;21808:2;21788:18;;;21781:30;21847:27;21827:18;;;21820:55;21892:18;;36520:58:0;21567:349:1;36520:58:0;-1:-1:-1;;;;;36589:27:0;;;;;;;:18;:27;;;;;;;;:38;;;;;;;;;;;;;:49;;-1:-1:-1;;36589:49:0;;;;;;;;;;36654:44;;540:41:1;;;36654:44:0;;513:18:1;36654:44:0;;;;;;;36387:319;;;:::o;33965:295::-;34114:28;34124:4;34130:2;34134:7;34114:9;:28::i;:::-;34161:48;34184:4;34190:2;34194:7;34203:5;34161:22;:48::i;:::-;34153:99;;;;-1:-1:-1;;;34153:99:0;;;;;;;:::i;39253:573::-;39303:27;39347:2;39353:1;39347:7;39343:50;;-1:-1:-1;;39371:10:0;;;;;;;;;;;;-1:-1:-1;;;39371:10:0;;;;;39253:573::o;39343:50::-;39412:2;39403:6;39444:69;39451:6;;39444:69;;39474:5;;;;:::i;:::-;;-1:-1:-1;39494:7:0;;-1:-1:-1;39499:2:0;39494:7;;:::i;:::-;;;39444:69;;;39523:17;39553:3;39543:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39543:14:0;-1:-1:-1;39523:34:0;-1:-1:-1;39577:3:0;39591:198;39598:7;;39591:198;;39626:3;39628:1;39626;:3;:::i;:::-;39622:7;-1:-1:-1;39644:10:0;39674:7;39679:2;39674;:7;:::i;:::-;:12;;39684:2;39674:12;:::i;:::-;39669:17;;:2;:17;:::i;:::-;39658:29;;:2;:29;:::i;:::-;39644:44;;39703:9;39722:4;39715:12;;39703:24;;39752:2;39742:4;39747:1;39742:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;39742:12:0;;;;;;;;-1:-1:-1;39769:8:0;39775:2;39769:8;;:::i;:::-;;;39607:182;;39591:198;;;-1:-1:-1;39813:4:0;39253:573;-1:-1:-1;;;;39253:573:0:o;31722:313::-;31838:27;31844:2;31848:7;31857;31838:5;:27::i;:::-;31898:51;31929:1;31933:2;31937:7;31898:51;;;;;;;;;;;;:22;:51::i;:::-;31876:151;;;;-1:-1:-1;;;31876:151:0;;23045:2:1;31876:151:0;;;23027:21:1;23084:2;23064:18;;;23057:30;23123:34;23103:18;;;23096:62;-1:-1:-1;;;23174:18:1;;;23167:48;23232:19;;31876:151:0;22843:414:1;41974:787:0;42129:4;42150:15;:2;-1:-1:-1;;;;;42150:13:0;;:15::i;:::-;42146:608;;;42186:72;;-1:-1:-1;;;42186:72:0;;-1:-1:-1;;;;;42186:36:0;;;;;:72;;17407:10;;42237:4;;42243:7;;42252:5;;42186:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42186:72:0;;;;;;;;-1:-1:-1;;42186:72:0;;;;;;;;;;;;:::i;:::-;;;42182:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42428:6;:13;42445:1;42428:18;42424:260;;42471:48;;-1:-1:-1;;;42471:48:0;;;;;;;:::i;42424:260::-;42634:6;42628:13;42619:6;42615:2;42611:15;42604:38;42182:517;-1:-1:-1;;;;;;42309:51:0;-1:-1:-1;;;42309:51:0;;-1:-1:-1;42302:58:0;;42146:608;-1:-1:-1;42738:4:0;41974:787;;;;;;:::o;32371:712::-;32458:16;32466:7;32458;:16::i;:::-;32457:17;32449:58;;;;-1:-1:-1;;;32449:58:0;;24212:2:1;32449:58:0;;;24194:21:1;24251:2;24231:18;;;24224:30;24290;24270:18;;;24263:58;24338:18;;32449:58:0;24010:352:1;32449:58:0;32524:7;32520:345;;;32548:15;;;;:6;:15;;;;;:22;;-1:-1:-1;;32548:22:0;32566:4;32548:22;;;32593;;32585:63;;;;-1:-1:-1;;;32585:63:0;;24569:2:1;32585:63:0;;;24551:21:1;24608:2;24588:18;;;24581:30;24647:26;24627:18;;;24620:54;24691:18;;32585:63:0;24367:348:1;32585:63:0;32677:22;32675:24;;-1:-1:-1;;32675:24:0;;;32520:345;;;32768:1;32742:23;;:27;32734:65;;;;-1:-1:-1;;;32734:65:0;;24922:2:1;32734:65:0;;;24904:21:1;24961:2;24941:18;;;24934:30;25000:27;24980:18;;;24973:55;25045:18;;32734:65:0;24720:349:1;32734:65:0;32828:23;32826:25;;-1:-1:-1;;32826:25:0;;;32520:345;32877:16;;;;:7;:16;;;;;;;;:21;;-1:-1:-1;;;;;;32877:21:0;-1:-1:-1;;;;;32877:21:0;;;;;;;;32936:18;32934:20;;-1:-1:-1;32934:20:0;;;;;;32971:12;32969:14;;;;;;33000:13;;;:9;:13;;;;;;32998:15;;;;;;;;33042:33;32877:16;;;33042:33;;32877:16;;33042:33;32371:712;;;:::o;8474:619::-;8534:4;9002:20;;8845:66;9042:23;;;;;;:42;;-1:-1:-1;;9069:15:0;;;9034:51;-1:-1:-1;;8474:619:0:o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2197:592::-;2268:6;2276;2329:2;2317:9;2308:7;2304:23;2300:32;2297:52;;;2345:1;2342;2335:12;2297:52;2385:9;2372:23;2414:18;2455:2;2447:6;2444:14;2441:34;;;2471:1;2468;2461:12;2441:34;2509:6;2498:9;2494:22;2484:32;;2554:7;2547:4;2543:2;2539:13;2535:27;2525:55;;2576:1;2573;2566:12;2525:55;2616:2;2603:16;2642:2;2634:6;2631:14;2628:34;;;2658:1;2655;2648:12;2628:34;2703:7;2698:2;2689:6;2685:2;2681:15;2677:24;2674:37;2671:57;;;2724:1;2721;2714:12;2671:57;2755:2;2747:11;;;;;2777:6;;-1:-1:-1;2197:592:1;;-1:-1:-1;;;;2197:592:1:o;2976:456::-;3053:6;3061;3069;3122:2;3110:9;3101:7;3097:23;3093:32;3090:52;;;3138:1;3135;3128:12;3090:52;3177:9;3164:23;3196:31;3221:5;3196:31;:::i;:::-;3246:5;-1:-1:-1;3303:2:1;3288:18;;3275:32;3316:33;3275:32;3316:33;:::i;:::-;2976:456;;3368:7;;-1:-1:-1;;;3422:2:1;3407:18;;;;3394:32;;2976:456::o;3437:247::-;3496:6;3549:2;3537:9;3528:7;3524:23;3520:32;3517:52;;;3565:1;3562;3555:12;3517:52;3604:9;3591:23;3623:31;3648:5;3623:31;:::i;3689:632::-;3860:2;3912:21;;;3982:13;;3885:18;;;4004:22;;;3831:4;;3860:2;4083:15;;;;4057:2;4042:18;;;3831:4;4126:169;4140:6;4137:1;4134:13;4126:169;;;4201:13;;4189:26;;4270:15;;;;4235:12;;;;4162:1;4155:9;4126:169;;;-1:-1:-1;4312:3:1;;3689:632;-1:-1:-1;;;;;;3689:632:1:o;4326:118::-;4412:5;4405:13;4398:21;4391:5;4388:32;4378:60;;4434:1;4431;4424:12;4449:382;4514:6;4522;4575:2;4563:9;4554:7;4550:23;4546:32;4543:52;;;4591:1;4588;4581:12;4543:52;4630:9;4617:23;4649:31;4674:5;4649:31;:::i;:::-;4699:5;-1:-1:-1;4756:2:1;4741:18;;4728:32;4769:30;4728:32;4769:30;:::i;:::-;4818:7;4808:17;;;4449:382;;;;;:::o;5043:127::-;5104:10;5099:3;5095:20;5092:1;5085:31;5135:4;5132:1;5125:15;5159:4;5156:1;5149:15;5175:1266;5270:6;5278;5286;5294;5347:3;5335:9;5326:7;5322:23;5318:33;5315:53;;;5364:1;5361;5354:12;5315:53;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;:::-;5472:5;-1:-1:-1;5529:2:1;5514:18;;5501:32;5542:33;5501:32;5542:33;:::i;:::-;5594:7;-1:-1:-1;5648:2:1;5633:18;;5620:32;;-1:-1:-1;5703:2:1;5688:18;;5675:32;5726:18;5756:14;;;5753:34;;;5783:1;5780;5773:12;5753:34;5821:6;5810:9;5806:22;5796:32;;5866:7;5859:4;5855:2;5851:13;5847:27;5837:55;;5888:1;5885;5878:12;5837:55;5924:2;5911:16;5946:2;5942;5939:10;5936:36;;;5952:18;;:::i;:::-;6027:2;6021:9;5995:2;6081:13;;-1:-1:-1;;6077:22:1;;;6101:2;6073:31;6069:40;6057:53;;;6125:18;;;6145:22;;;6122:46;6119:72;;;6171:18;;:::i;:::-;6211:10;6207:2;6200:22;6246:2;6238:6;6231:18;6286:7;6281:2;6276;6272;6268:11;6264:20;6261:33;6258:53;;;6307:1;6304;6297:12;6258:53;6363:2;6358;6354;6350:11;6345:2;6337:6;6333:15;6320:46;6408:1;6403:2;6398;6390:6;6386:15;6382:24;6375:35;6429:6;6419:16;;;;;;;5175:1266;;;;;;;:::o;6446:450::-;6520:6;6528;6536;6589:2;6577:9;6568:7;6564:23;6560:32;6557:52;;;6605:1;6602;6595:12;6557:52;6644:9;6631:23;6663:31;6688:5;6663:31;:::i;:::-;6713:5;-1:-1:-1;6765:2:1;6750:18;;6737:32;;-1:-1:-1;6821:2:1;6806:18;;6793:32;6834:30;6793:32;6834:30;:::i;:::-;6883:7;6873:17;;;6446:450;;;;;:::o;6901:367::-;6964:8;6974:6;7028:3;7021:4;7013:6;7009:17;7005:27;6995:55;;7046:1;7043;7036:12;6995:55;-1:-1:-1;7069:20:1;;7112:18;7101:30;;7098:50;;;7144:1;7141;7134:12;7098:50;7181:4;7173:6;7169:17;7157:29;;7241:3;7234:4;7224:6;7221:1;7217:14;7209:6;7205:27;7201:38;7198:47;7195:67;;;7258:1;7255;7248:12;7195:67;6901:367;;;;;:::o;7273:1085::-;7428:6;7436;7444;7452;7460;7468;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;7577:9;7564:23;7606:18;7647:2;7639:6;7636:14;7633:34;;;7663:1;7660;7653:12;7633:34;7702:70;7764:7;7755:6;7744:9;7740:22;7702:70;:::i;:::-;7791:8;;-1:-1:-1;7676:96:1;-1:-1:-1;7879:2:1;7864:18;;7851:32;;-1:-1:-1;7895:16:1;;;7892:36;;;7924:1;7921;7914:12;7892:36;7963:72;8027:7;8016:8;8005:9;8001:24;7963:72;:::i;:::-;8054:8;;-1:-1:-1;7937:98:1;-1:-1:-1;8142:2:1;8127:18;;8114:32;;-1:-1:-1;8158:16:1;;;8155:36;;;8187:1;8184;8177:12;8155:36;;8226:72;8290:7;8279:8;8268:9;8264:24;8226:72;:::i;:::-;7273:1085;;;;-1:-1:-1;7273:1085:1;;-1:-1:-1;7273:1085:1;;8317:8;;7273:1085;-1:-1:-1;;;7273:1085:1:o;8363:388::-;8431:6;8439;8492:2;8480:9;8471:7;8467:23;8463:32;8460:52;;;8508:1;8505;8498:12;8460:52;8547:9;8534:23;8566:31;8591:5;8566:31;:::i;:::-;8616:5;-1:-1:-1;8673:2:1;8658:18;;8645:32;8686:33;8645:32;8686:33;:::i;8756:343::-;8958:2;8940:21;;;8997:2;8977:18;;;8970:30;-1:-1:-1;;;9031:2:1;9016:18;;9009:49;9090:2;9075:18;;8756:343::o;10615:380::-;10694:1;10690:12;;;;10737;;;10758:61;;10812:4;10804:6;10800:17;10790:27;;10758:61;10865:2;10857:6;10854:14;10834:18;10831:38;10828:161;;10911:10;10906:3;10902:20;10899:1;10892:31;10946:4;10943:1;10936:15;10974:4;10971:1;10964:15;10828:161;;10615:380;;;:::o;11126:545::-;11228:2;11223:3;11220:11;11217:448;;;11264:1;11289:5;11285:2;11278:17;11334:4;11330:2;11320:19;11404:2;11392:10;11388:19;11385:1;11381:27;11375:4;11371:38;11440:4;11428:10;11425:20;11422:47;;;-1:-1:-1;11463:4:1;11422:47;11518:2;11513:3;11509:12;11506:1;11502:20;11496:4;11492:31;11482:41;;11573:82;11591:2;11584:5;11581:13;11573:82;;;11636:17;;;11617:1;11606:13;11573:82;;11847:1206;11971:18;11966:3;11963:27;11960:53;;;11993:18;;:::i;:::-;12022:94;12112:3;12072:38;12104:4;12098:11;12072:38;:::i;:::-;12066:4;12022:94;:::i;:::-;12142:1;12167:2;12162:3;12159:11;12184:1;12179:616;;;;12839:1;12856:3;12853:93;;;-1:-1:-1;12912:19:1;;;12899:33;12853:93;-1:-1:-1;;11804:1:1;11800:11;;;11796:24;11792:29;11782:40;11828:1;11824:11;;;11779:57;12959:78;;12152:895;;12179:616;11073:1;11066:14;;;11110:4;11097:18;;-1:-1:-1;;12215:17:1;;;12316:9;12338:229;12352:7;12349:1;12346:14;12338:229;;;12441:19;;;12428:33;12413:49;;12548:4;12533:20;;;;12501:1;12489:14;;;;12368:12;12338:229;;;12342:3;12595;12586:7;12583:16;12580:159;;;12719:1;12715:6;12709:3;12703;12700:1;12696:11;12692:21;12688:34;12684:39;12671:9;12666:3;12662:19;12649:33;12645:79;12637:6;12630:95;12580:159;;;12782:1;12776:3;12773:1;12769:11;12765:19;12759:4;12752:33;12152:895;;;11847:1206;;;:::o;13058:353::-;13260:2;13242:21;;;13299:2;13279:18;;;13272:30;13338:31;13333:2;13318:18;;13311:59;13402:2;13387:18;;13058:353::o;13986:127::-;14047:10;14042:3;14038:20;14035:1;14028:31;14078:4;14075:1;14068:15;14102:4;14099:1;14092:15;14814:184;14884:6;14937:2;14925:9;14916:7;14912:23;14908:32;14905:52;;;14953:1;14950;14943:12;14905:52;-1:-1:-1;14976:16:1;;14814:184;-1:-1:-1;14814:184:1:o;15282:245::-;15349:6;15402:2;15390:9;15381:7;15377:23;15373:32;15370:52;;;15418:1;15415;15408:12;15370:52;15450:9;15444:16;15469:28;15491:5;15469:28;:::i;15532:251::-;15602:6;15655:2;15643:9;15634:7;15630:23;15626:32;15623:52;;;15671:1;15668;15661:12;15623:52;15703:9;15697:16;15722:31;15747:5;15722:31;:::i;15788:722::-;15838:3;15879:5;15873:12;15908:36;15934:9;15908:36;:::i;:::-;15963:1;15980:18;;;16007:133;;;;16154:1;16149:355;;;;15973:531;;16007:133;-1:-1:-1;;16040:24:1;;16028:37;;16113:14;;16106:22;16094:35;;16085:45;;;-1:-1:-1;16007:133:1;;16149:355;16180:5;16177:1;16170:16;16209:4;16254:2;16251:1;16241:16;16279:1;16293:165;16307:6;16304:1;16301:13;16293:165;;;16385:14;;16372:11;;;16365:35;16428:16;;;;16322:10;;16293:165;;;16297:3;;;16487:6;16482:3;16478:16;16471:23;;15973:531;;;;;15788:722;;;;:::o;16515:389::-;16691:3;16719:38;16753:3;16745:6;16719:38;:::i;:::-;16786:6;16780:13;16802:65;16860:6;16856:2;16849:4;16841:6;16837:17;16802:65;:::i;:::-;16883:15;;16515:389;-1:-1:-1;;;;16515:389:1:o;16909:369::-;17085:3;17123:6;17117:13;17139:66;17198:6;17193:3;17186:4;17178:6;17174:17;17139:66;:::i;:::-;17221:51;17264:6;17259:3;17255:16;17247:6;17221:51;:::i;:::-;17214:58;16909:369;-1:-1:-1;;;;;16909:369:1:o;17976:127::-;18037:10;18032:3;18028:20;18025:1;18018:31;18068:4;18065:1;18058:15;18092:4;18089:1;18082:15;18108:168;18181:9;;;18212;;18229:15;;;18223:22;;18209:37;18199:71;;18250:18;;:::i;19329:241::-;19385:6;19438:2;19426:9;19417:7;19413:23;19409:32;19406:52;;;19454:1;19451;19444:12;19406:52;19493:9;19480:23;19512:28;19534:5;19512:28;:::i;20955:128::-;21022:9;;;21043:11;;;21040:37;;;21057:18;;:::i;21088:125::-;21153:9;;;21174:10;;;21171:36;;;21187:18;;:::i;21921:402::-;22123:2;22105:21;;;22162:2;22142:18;;;22135:30;22201:34;22196:2;22181:18;;22174:62;-1:-1:-1;;;22267:2:1;22252:18;;22245:36;22313:3;22298:19;;21921:402::o;22328:135::-;22367:3;22388:17;;;22385:43;;22408:18;;:::i;:::-;-1:-1:-1;22455:1:1;22444:13;;22328:135::o;22468:217::-;22508:1;22534;22524:132;;22578:10;22573:3;22569:20;22566:1;22559:31;22613:4;22610:1;22603:15;22641:4;22638:1;22631:15;22524:132;-1:-1:-1;22670:9:1;;22468:217::o;22690:148::-;22778:4;22757:12;;;22771;;;22753:31;;22796:13;;22793:39;;;22812:18;;:::i;23262:489::-;-1:-1:-1;;;;;23531:15:1;;;23513:34;;23583:15;;23578:2;23563:18;;23556:43;23630:2;23615:18;;23608:34;;;23678:3;23673:2;23658:18;;23651:31;;;23456:4;;23699:46;;23725:19;;23717:6;23699:46;:::i;:::-;23691:54;23262:489;-1:-1:-1;;;;;;23262:489:1:o;23756:249::-;23825:6;23878:2;23866:9;23857:7;23853:23;23849:32;23846:52;;;23894:1;23891;23884:12;23846:52;23926:9;23920:16;23945:30;23969:5;23945:30;:::i

Swarm Source

ipfs://18a0b2b829ae4d21ab1212c34ad6f529d96c87056b7f8266c7523b24c0318e1f
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.