ETH Price: $2,774.11 (+5.71%)

Token

 

Overview

Max Total Supply

782

Holders

94

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xfd2713ff98db05741c2e59422aff224889bb0808
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:
PortalGun

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
File 1 of 15 : PortalGun.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.8.4;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ERC165, IERC165, ERC1155, ERC1155Pausable} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol";
import {ERC1155Holder, ERC1155Receiver} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";

contract PortalGun is Ownable, ERC1155Pausable, ERC1155Holder {
    using Strings for uint256;

    uint8 public constant MAX_PER_TX = 10;
    uint8 public constant MAX_GOLD_GUNS = 250;
    uint16 public constant MAX_GUNS = 2250;

    uint16 public totalGunsMinted;
    uint8 public totalGoldGunsMinted;

    string private baseURI;

    uint256[] public itemIds;

    bool public publicSaleActive;

    uint256 public publicSaleCost;

    mapping(uint256 => bool) public registeredItems;

    event UpdateBaseURI(string uri);

    event UpdateInjector(address injector);

    event ItemAdded(uint256 itemId);

    event ItemDisabled(uint256 itemId);
    
    event ItemCostUpdated(uint256 oldCost, uint256 newCost);

    event ItemPurchased(address purchaser, uint256 itemId, uint256 amount);

    event ItemDestroyed(address destroyer, uint256 itemId, uint256 amount);

    event PublicSaleStatusFlipped(bool previous, bool current);

    event GunsMinted(address owner, uint256 tokenId, uint8 amount);

    constructor(string memory _baseURI) ERC1155(_baseURI) {
        baseURI = _baseURI;
        registeredItems[0] = true;
        registeredItems[1] = true;

        publicSaleActive = true;
        publicSaleCost = 0.025 ether;
    }

    function transferItems(uint256 itemId) external onlyOwner {
        safeTransferFrom(address(this), msg.sender, itemId, balanceOf(address(this), itemId), "");
    }

    function destroyItem(uint256 itemId, uint256 amount) external whenNotPaused {
        _burn(msg.sender, itemId, amount);
        emit ItemDestroyed(msg.sender, itemId, amount);
    }

    function updateBaseUri(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        _setURI(_baseURI);
        emit UpdateBaseURI(baseURI);
    }

    function mintPublicSale(uint8 amount) external payable _onlyPublicSale() {
        require(amount > 0, "amount_zero");
        require(msg.value >= publicSaleCost * amount, "not_enough_ether");
        mint(msg.sender, 0, amount);
    }

    function mint(address owner, uint256 tokenId, uint8 amount) internal _canMint(amount) {
        for(uint i=0;i<amount;++i) {
            uint256 randomNum = random(tokenId);
            bool mustMintGold = totalGunsMinted == MAX_GUNS;
            bool mustMintRegular = totalGoldGunsMinted == MAX_GOLD_GUNS;
            if(!mustMintRegular && (mustMintGold || randomNum % 10 == 1)) {
                totalGoldGunsMinted += 1;
                _mint(owner, 1, 1, "");
            } else {
                totalGunsMinted += 1;
                _mint(owner, 0, 1, "");
            }
        }
        
        emit GunsMinted(owner, tokenId, amount);
    }

    function mintBatch(uint256[] memory ids, uint256[] memory amounts) external onlyOwner {
        _mintBatch(owner(), ids, amounts, "");
    }

    function mintBatchFor(uint256[] memory ids, uint256[] memory amounts, address to) external onlyOwner {
        _mintBatch(to, ids, amounts, "");
    }

    function flipPublicSaleStatus() external onlyOwner {
        publicSaleActive = !publicSaleActive;

        emit PublicSaleStatusFlipped(!publicSaleActive, publicSaleActive);
    }

    function updatePublicSaleCost(uint256 cost) external onlyOwner {
        publicSaleCost = cost;
    }

    function currentMintCost() external view returns (uint256 cost) {
        cost = publicSaleCost;
    }

    function uri(uint256 typeId)
        public
        view                
        override
        returns (string memory)
    {
        require(
            registeredItems[typeId],
            "URI requested for invalid item type"
        );
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString()))
                : baseURI;
    }

    function withdraw() external onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function random(uint256 seed) internal view returns (uint256) {
        return uint256(
            keccak256(abi.encodePacked(tx.origin, blockhash(block.number - 1), block.timestamp, seed))
        );
    }

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

    function pause() external onlyOwner whenNotPaused {
        super._pause();
    }

    function unpause() external onlyOwner whenPaused {
        super._unpause();
    }

    modifier _onlyPublicSale() {
        require(publicSaleActive, "public_sale_not_active");
        _;
    }

    modifier _canMint(uint8 amount) {
        require(totalGunsMinted + totalGoldGunsMinted + amount <= MAX_GUNS + MAX_GOLD_GUNS, "maximum_guns_minted");
        require(amount <= MAX_PER_TX, "amount_exceeds_tx_max");
        _;
    }
}

File 2 of 15 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 15 : ERC1155Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/ERC1155Pausable.sol)

pragma solidity ^0.8.0;

import "../ERC1155.sol";
import "../../../security/Pausable.sol";

/**
 * @dev ERC1155 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Pausable is ERC1155, Pausable {
    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        require(!paused(), "ERC1155Pausable: token transfer while paused");
    }
}

File 4 of 15 : ERC1155Holder.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/utils/ERC1155Holder.sol)

pragma solidity ^0.8.0;

import "./ERC1155Receiver.sol";

/**
 * @dev _Available since v3.1._
 */
contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

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

pragma solidity ^0.8.0;

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 6 of 15 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 7 of 15 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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

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

        return array;
    }
}

File 8 of 15 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (security/Pausable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 9 of 15 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

File 10 of 15 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

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

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

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

File 11 of 15 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

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

File 12 of 15 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 13 of 15 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 14 of 15 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 15 of 15 : ERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC1155/utils/ERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../IERC1155Receiver.sol";
import "../../../utils/introspection/ERC165.sol";

/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none"
  },
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"amount","type":"uint8"}],"name":"GunsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"ItemAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldCost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newCost","type":"uint256"}],"name":"ItemCostUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"destroyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ItemDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"ItemDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"purchaser","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ItemPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"previous","type":"bool"},{"indexed":false,"internalType":"bool","name":"current","type":"bool"}],"name":"PublicSaleStatusFlipped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"UpdateBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"injector","type":"address"}],"name":"UpdateInjector","type":"event"},{"inputs":[],"name":"MAX_GOLD_GUNS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_GUNS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMintCost","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"destroyItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPublicSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"to","type":"address"}],"name":"mintBatchFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"mintPublicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"registeredItems","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGoldGunsMinted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGunsMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"transferItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"updatePublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162003516380380620035168339810160408190526200003491620001fc565b806200004033620000ed565b6200004b816200013d565b506004805460ff1916905580516200006b90600590602084019062000156565b505060096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b8054600160ff19918216811790925560008290527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3680548216831790556007805490911690911790556658d15e1762800060085562000325565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516200015290600390602084019062000156565b5050565b8280546200016490620002d2565b90600052602060002090601f016020900481019282620001885760008555620001d3565b82601f10620001a357805160ff1916838001178555620001d3565b82800160010185558215620001d3579182015b82811115620001d3578251825591602001919060010190620001b6565b50620001e1929150620001e5565b5090565b5b80821115620001e15760008155600101620001e6565b600060208083850312156200020f578182fd5b82516001600160401b038082111562000226578384fd5b818501915085601f8301126200023a578384fd5b8151818111156200024f576200024f6200030f565b604051601f8201601f19908116603f011681019083821181831017156200027a576200027a6200030f565b81604052828152888684870101111562000292578687fd5b8693505b82841015620002b5578484018601518185018701529285019262000296565b82841115620002c657868684830101525b98975050505050505050565b600181811c90821680620002e757607f821691505b602082108114156200030957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6131e180620003356000396000f3fe6080604052600436106102335760003560e01c8063854797e911610138578063cac254ed116100b0578063f23a6e611161007f578063f2fde38b11610064578063f2fde38b14610693578063f43a22dc146106b3578063f75e16b3146106c857600080fd5b8063f23a6e6114610647578063f242432a1461067357600080fd5b8063cac254ed1461059d578063d351cfdc146105be578063d5a3deca146105de578063e985e9c5146105fe57600080fd5b8063b5b781c511610107578063bc197c81116100ec578063bc197c811461052b578063bc8893b414610570578063c31f2d1d1461058a57600080fd5b8063b5b781c5146104f6578063b9f758921461050b57600080fd5b8063854797e9146104795780638da5cb5b1461048e578063a22cb465146104b6578063b3dc00fe146104d657600080fd5b8063453afb0f116101cb5780635f09c7821161019a57806365dd80a01161017f57806365dd80a01461042f578063715018a61461044f5780638456cb591461046457600080fd5b80635f09c782146103e8578063605d591b1461040857600080fd5b8063453afb0f1461035d57806348d9b402146103735780634e1273f4146103a35780635c975abb146103d057600080fd5b806339f7e37f1161020757806339f7e37f146102ea5780633abafd371461030a5780633ccfd60b146103335780633f4ba83a1461034857600080fd5b8062fdd58e1461023857806301ffc9a71461026b5780630e89341c1461029b5780632eb2c2d6146102c8575b600080fd5b34801561024457600080fd5b50610258610253366004612a48565b6106e8565b6040519081526020015b60405180910390f35b34801561027757600080fd5b5061028b610286366004612bf7565b610793565b6040519015158152602001610262565b3480156102a757600080fd5b506102bb6102b6366004612c75565b6107a4565b6040516102629190612e97565b3480156102d457600080fd5b506102e86102e3366004612905565b610902565b005b3480156102f657600080fd5b506102e8610305366004612c2f565b6109a4565b34801561031657600080fd5b506103206108ca81565b60405161ffff9091168152602001610262565b34801561033f57600080fd5b506102e8610a44565b34801561035457600080fd5b506102e8610abf565b34801561036957600080fd5b5061025860085481565b34801561037f57600080fd5b5061028b61038e366004612c75565b60096020526000908152604090205460ff1681565b3480156103af57600080fd5b506103c36103be366004612a71565b610b63565b6040516102629190612e56565b3480156103dc57600080fd5b5060045460ff1661028b565b3480156103f457600080fd5b506102e8610403366004612c8d565b610cd9565b34801561041457600080fd5b5061041d60fa81565b60405160ff9091168152602001610262565b34801561043b57600080fd5b506102e861044a366004612c75565b610d6f565b34801561045b57600080fd5b506102e8610ddf565b34801561047057600080fd5b506102e8610e31565b34801561048557600080fd5b50600854610258565b34801561049a57600080fd5b506000546040516001600160a01b039091168152602001610262565b3480156104c257600080fd5b506102e86104d1366004612a0e565b610ec7565b3480156104e257600080fd5b506102586104f1366004612c75565b610ed2565b34801561050257600080fd5b506102e8610ef3565b34801561051757600080fd5b5060045461032090610100900461ffff1681565b34801561053757600080fd5b50610557610546366004612905565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610262565b34801561057c57600080fd5b5060075461028b9060ff1681565b6102e8610598366004612cae565b610f90565b3480156105a957600080fd5b5060045461041d906301000000900460ff1681565b3480156105ca57600080fd5b506102e86105d9366004612b3c565b6110a1565b3480156105ea57600080fd5b506102e86105f9366004612b86565b611115565b34801561060a57600080fd5b5061028b6106193660046128d3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b34801561065357600080fd5b506105576106623660046129ab565b63f23a6e6160e01b95945050505050565b34801561067f57600080fd5b506102e861068e3660046129ab565b61117d565b34801561069f57600080fd5b506102e86106ae3660046128b9565b611218565b3480156106bf57600080fd5b5061041d600a81565b3480156106d457600080fd5b506102e86106e3366004612c75565b6112e5565b60006001600160a01b03831661076b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b600061079e82611332565b92915050565b60008181526009602052604090205460609060ff1661082b5760405162461bcd60e51b815260206004820152602360248201527f5552492072657175657374656420666f7220696e76616c6964206974656d207460448201527f79706500000000000000000000000000000000000000000000000000000000006064820152608401610762565b60006005805461083a90613023565b9050116108d1576005805461084e90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461087a90613023565b80156108c75780601f1061089c576101008083540402835291602001916108c7565b820191906000526020600020905b8154815290600101906020018083116108aa57829003601f168201915b505050505061079e565b60056108dc83611370565b6040516020016108ed929190612d35565b60405160208183030381529060405292915050565b6001600160a01b03851633148061091e575061091e8533610619565b6109905760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610762565b61099d85858585856114c6565b5050505050565b6000546001600160a01b031633146109ec5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b80516109ff90600590602084019061270c565b50610a0981611751565b7f157d450c8fb1377294d9db75af1de2753efc52d8e5578551d70d2c7d9cd74df96005604051610a399190612eaa565b60405180910390a150565b6000546001600160a01b03163314610a8c5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b6040514790339082156108fc029083906000818181858888f19350505050158015610abb573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610b075760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b60045460ff16610b595760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610762565b610b61611764565b565b60608151835114610bdc5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610762565b6000835167ffffffffffffffff811115610c0657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c2f578160200160208202803683370190505b50905060005b8451811015610cd157610c96858281518110610c6157634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610c8957634e487b7160e01b600052603260045260246000fd5b60200260200101516106e8565b828281518110610cb657634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610cca8161308b565b9050610c35565b509392505050565b60045460ff1615610d1f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610762565b610d2a3383836117fb565b60408051338152602081018490529081018290527fd5a6b92e9ce7526b6436f01b4bf0d6647dfef511352212f6efab3e71cc4f67a39060600160405180910390a15050565b6000546001600160a01b03163314610db75760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b610ddc303383610dc730866106e8565b6040518060200160405280600081525061117d565b50565b6000546001600160a01b03163314610e275760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b610b6160006119ab565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b60045460ff1615610ebf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610762565b610b61611a13565b610abb338383611a8e565b60068181548110610ee257600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b6007805460ff8082161560ff1990921682179092556040805191909216158082521560208201527fafc764693a27a006fd1d3b3d2332c689d79c83c614d5990e13aa4bfcc3ca9c4691015b60405180910390a1565b60075460ff16610fe25760405162461bcd60e51b815260206004820152601660248201527f7075626c69635f73616c655f6e6f745f616374697665000000000000000000006044820152606401610762565b60008160ff16116110355760405162461bcd60e51b815260206004820152600b60248201527f616d6f756e745f7a65726f0000000000000000000000000000000000000000006044820152606401610762565b8060ff166008546110469190612fbd565b3410156110955760405162461bcd60e51b815260206004820152601060248201527f6e6f745f656e6f7567685f6574686572000000000000000000000000000000006044820152606401610762565b610ddc33600083611b83565b6000546001600160a01b031633146110e95760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b610abb6110fe6000546001600160a01b031690565b838360405180602001604052806000815250611dde565b6000546001600160a01b0316331461115d5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b61117881848460405180602001604052806000815250611dde565b505050565b6001600160a01b03851633148061119957506111998533610619565b61120b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610762565b61099d8585858585611fd0565b6000546001600160a01b031633146112605760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b6001600160a01b0381166112dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610762565b610ddc816119ab565b6000546001600160a01b0316331461132d5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b600855565b60006001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061079e575061079e82612181565b6060816113b057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113da57806113c48161308b565b91506113d39050600a83612fa9565b91506113b4565b60008167ffffffffffffffff81111561140357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561142d576020820181803683370190505b5090505b84156114be57611442600183612fdc565b915061144f600a866130a6565b61145a906030612f6c565b60f81b81838151811061147d57634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506114b7600a86612fa9565b9450611431565b949350505050565b81518351146115285760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610762565b6001600160a01b03841661158c5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610762565b3361159b81878787878761221c565b60005b84518110156116e35760008582815181106115c957634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106115f557634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156116895760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610762565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906116c8908490612f6c565b92505081905550505050806116dc9061308b565b905061159e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611733929190612e69565b60405180910390a4611749818787878787612295565b505050505050565b8051610abb90600390602084019061270c565b60045460ff166117b65760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610762565b6004805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610f86565b6001600160a01b0383166118775760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610762565b336118a6818560006118888761244a565b6118918761244a565b6040518060200160405280600081525061221c565b60008381526001602090815260408083206001600160a01b03881684529091529020548281101561193e5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610762565b60008481526001602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60045460ff1615611a595760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610762565b6004805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e33390565b816001600160a01b0316836001600160a01b03161415611b165760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b80611b9160fa6108ca612f4f565b60045461ffff9182169160ff80851692611bbc92630100000082049092169161010090910416612f4f565b611bc69190612f4f565b61ffff161115611c185760405162461bcd60e51b815260206004820152601360248201527f6d6178696d756d5f67756e735f6d696e746564000000000000000000000000006044820152606401610762565b600a60ff82161115611c6c5760405162461bcd60e51b815260206004820152601560248201527f616d6f756e745f657863656564735f74785f6d617800000000000000000000006044820152606401610762565b60005b8260ff16811015611d8c576000611c85856124a3565b600454909150610100810461ffff166108ca14906301000000900460ff1660fa14801581611cc457508180611cc45750611cc0600a846130a6565b6001145b15611d21576001600460038282829054906101000a900460ff16611ce89190612f84565b92506101000a81548160ff021916908360ff160217905550611d1c8860018060405180602001604052806000815250612502565b611d78565b6001600460018282829054906101000a900461ffff16611d419190612f4f565b92506101000a81548161ffff021916908361ffff160217905550611d78886000600160405180602001604052806000815250612502565b50505080611d859061308b565b9050611c6f565b50604080516001600160a01b03861681526020810185905260ff84168183015290517f8914acde3f17821ad609110a0a64bf9dd88cb8c677d47f47371b5fa6a74c42b99181900360600190a150505050565b6001600160a01b038416611e3e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610762565b8151835114611ea05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610762565b33611eb08160008787878761221c565b60005b8451811015611f6857838181518110611edc57634e487b7160e01b600052603260045260246000fd5b602002602001015160016000878481518110611f0857634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f509190612f6c565b90915550819050611f608161308b565b915050611eb3565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fb9929190612e69565b60405180910390a461099d81600087878787612295565b6001600160a01b0384166120345760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610762565b336120538187876120448861244a565b61204d8861244a565b8761221c565b60008481526001602090815260408083206001600160a01b038a168452909152902054838110156120d95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610762565b60008581526001602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290612118908490612f6c565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612178828888888888612601565b50505050505050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806121e457506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061079e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461079e565b60045460ff16156117495760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201527f7768696c652070617573656400000000000000000000000000000000000000006064820152608401610762565b6001600160a01b0384163b156117495760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906122d99089908990889088908890600401612db5565b602060405180830381600087803b1580156122f357600080fd5b505af1925050508015612323575060408051601f3d908101601f1916820190925261232091810190612c13565b60015b6123d95761232f6130fc565b806308c379a014156123695750612344613114565b8061234f575061236b565b8060405162461bcd60e51b81526004016107629190612e97565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610762565b6001600160e01b0319811663bc197c8160e01b146121785760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610762565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061249257634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6000326124b1600143612fdc565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074810183905260940160408051601f19818403018152919052805160209091012092915050565b6001600160a01b0384166125625760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610762565b33612573816000876120448861244a565b60008481526001602090815260408083206001600160a01b0389168452909152812080548592906125a5908490612f6c565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461099d816000878787875b6001600160a01b0384163b156117495760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906126459089908990889088908890600401612e13565b602060405180830381600087803b15801561265f57600080fd5b505af192505050801561268f575060408051601f3d908101601f1916820190925261268c91810190612c13565b60015b61269b5761232f6130fc565b6001600160e01b0319811663f23a6e6160e01b146121785760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610762565b82805461271890613023565b90600052602060002090601f01602090048101928261273a5760008555612780565b82601f1061275357805160ff1916838001178555612780565b82800160010185558215612780579182015b82811115612780578251825591602001919060010190612765565b5061278c929150612790565b5090565b5b8082111561278c5760008155600101612791565b600067ffffffffffffffff8311156127bf576127bf6130e6565b6040516127d6601f8501601f19166020018261305e565b8091508381528484840111156127eb57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461281a57600080fd5b919050565b600082601f83011261282f578081fd5b8135602061283c82612f2b565b604051612849828261305e565b8381528281019150858301600585901b87018401881015612868578586fd5b855b858110156128865781358452928401929084019060010161286a565b5090979650505050505050565b600082601f8301126128a3578081fd5b6128b2838335602085016127a5565b9392505050565b6000602082840312156128ca578081fd5b6128b282612803565b600080604083850312156128e5578081fd5b6128ee83612803565b91506128fc60208401612803565b90509250929050565b600080600080600060a0868803121561291c578081fd5b61292586612803565b945061293360208701612803565b9350604086013567ffffffffffffffff8082111561294f578283fd5b61295b89838a0161281f565b94506060880135915080821115612970578283fd5b61297c89838a0161281f565b93506080880135915080821115612991578283fd5b5061299e88828901612893565b9150509295509295909350565b600080600080600060a086880312156129c2578081fd5b6129cb86612803565b94506129d960208701612803565b93506040860135925060608601359150608086013567ffffffffffffffff811115612a02578182fd5b61299e88828901612893565b60008060408385031215612a20578182fd5b612a2983612803565b915060208301358015158114612a3d578182fd5b809150509250929050565b60008060408385031215612a5a578182fd5b612a6383612803565b946020939093013593505050565b60008060408385031215612a83578182fd5b823567ffffffffffffffff80821115612a9a578384fd5b818501915085601f830112612aad578384fd5b81356020612aba82612f2b565b604051612ac7828261305e565b8381528281019150858301600585901b870184018b1015612ae6578889fd5b8896505b84871015612b0f57612afb81612803565b835260019690960195918301918301612aea565b5096505086013592505080821115612b25578283fd5b50612b328582860161281f565b9150509250929050565b60008060408385031215612b4e578081fd5b823567ffffffffffffffff80821115612b65578283fd5b612b718683870161281f565b93506020850135915080821115612b25578283fd5b600080600060608486031215612b9a578081fd5b833567ffffffffffffffff80821115612bb1578283fd5b612bbd8783880161281f565b94506020860135915080821115612bd2578283fd5b50612bdf8682870161281f565b925050612bee60408501612803565b90509250925092565b600060208284031215612c08578081fd5b81356128b28161319e565b600060208284031215612c24578081fd5b81516128b28161319e565b600060208284031215612c40578081fd5b813567ffffffffffffffff811115612c56578182fd5b8201601f81018413612c66578182fd5b6114be848235602084016127a5565b600060208284031215612c86578081fd5b5035919050565b60008060408385031215612c9f578182fd5b50508035926020909101359150565b600060208284031215612cbf578081fd5b813560ff811681146128b2578182fd5b6000815180845260208085019450808401835b83811015612cfe57815187529582019590820190600101612ce2565b509495945050505050565b60008151808452612d21816020860160208601612ff3565b601f01601f19169290920160200192915050565b6000808454612d4381613023565b60018281168015612d5b5760018114612d6c57612d98565b60ff19841687528287019450612d98565b8886526020808720875b85811015612d8f5781548a820152908401908201612d76565b50505082870194505b505050508351612dac818360208801612ff3565b01949350505050565b60006001600160a01b03808816835280871660208401525060a06040830152612de160a0830186612ccf565b8281036060840152612df38186612ccf565b90508281036080840152612e078185612d09565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152612e4b60a0830184612d09565b979650505050505050565b6020815260006128b26020830184612ccf565b604081526000612e7c6040830185612ccf565b8281036020840152612e8e8185612ccf565b95945050505050565b6020815260006128b26020830184612d09565b60006020808352818454612ebd81613023565b80848701526040600180841660008114612ede5760018114612ef257612f1d565b60ff19851689840152606089019550612f1d565b898852868820885b85811015612f155781548b8201860152908301908801612efa565b8a0184019650505b509398975050505050505050565b600067ffffffffffffffff821115612f4557612f456130e6565b5060051b60200190565b600061ffff808316818516808303821115612dac57612dac6130ba565b60008219821115612f7f57612f7f6130ba565b500190565b600060ff821660ff84168060ff03821115612fa157612fa16130ba565b019392505050565b600082612fb857612fb86130d0565b500490565b6000816000190483118215151615612fd757612fd76130ba565b500290565b600082821015612fee57612fee6130ba565b500390565b60005b8381101561300e578181015183820152602001612ff6565b8381111561301d576000848401525b50505050565b600181811c9082168061303757607f821691505b6020821081141561305857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715613084576130846130e6565b6040525050565b600060001982141561309f5761309f6130ba565b5060010190565b6000826130b5576130b56130d0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561311157600481823e5160e01c5b90565b600060443d10156131225790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561315257505050505090565b828501915081518181111561316a5750505050505090565b843d87010160208285010111156131845750505050505090565b6131936020828601018761305e565b509095945050505050565b6001600160e01b031981168114610ddc57600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a164736f6c6343000804000a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6170692e6f75746261636b6d61727469616e732e636f6d2f6d657461646174612f0000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102335760003560e01c8063854797e911610138578063cac254ed116100b0578063f23a6e611161007f578063f2fde38b11610064578063f2fde38b14610693578063f43a22dc146106b3578063f75e16b3146106c857600080fd5b8063f23a6e6114610647578063f242432a1461067357600080fd5b8063cac254ed1461059d578063d351cfdc146105be578063d5a3deca146105de578063e985e9c5146105fe57600080fd5b8063b5b781c511610107578063bc197c81116100ec578063bc197c811461052b578063bc8893b414610570578063c31f2d1d1461058a57600080fd5b8063b5b781c5146104f6578063b9f758921461050b57600080fd5b8063854797e9146104795780638da5cb5b1461048e578063a22cb465146104b6578063b3dc00fe146104d657600080fd5b8063453afb0f116101cb5780635f09c7821161019a57806365dd80a01161017f57806365dd80a01461042f578063715018a61461044f5780638456cb591461046457600080fd5b80635f09c782146103e8578063605d591b1461040857600080fd5b8063453afb0f1461035d57806348d9b402146103735780634e1273f4146103a35780635c975abb146103d057600080fd5b806339f7e37f1161020757806339f7e37f146102ea5780633abafd371461030a5780633ccfd60b146103335780633f4ba83a1461034857600080fd5b8062fdd58e1461023857806301ffc9a71461026b5780630e89341c1461029b5780632eb2c2d6146102c8575b600080fd5b34801561024457600080fd5b50610258610253366004612a48565b6106e8565b6040519081526020015b60405180910390f35b34801561027757600080fd5b5061028b610286366004612bf7565b610793565b6040519015158152602001610262565b3480156102a757600080fd5b506102bb6102b6366004612c75565b6107a4565b6040516102629190612e97565b3480156102d457600080fd5b506102e86102e3366004612905565b610902565b005b3480156102f657600080fd5b506102e8610305366004612c2f565b6109a4565b34801561031657600080fd5b506103206108ca81565b60405161ffff9091168152602001610262565b34801561033f57600080fd5b506102e8610a44565b34801561035457600080fd5b506102e8610abf565b34801561036957600080fd5b5061025860085481565b34801561037f57600080fd5b5061028b61038e366004612c75565b60096020526000908152604090205460ff1681565b3480156103af57600080fd5b506103c36103be366004612a71565b610b63565b6040516102629190612e56565b3480156103dc57600080fd5b5060045460ff1661028b565b3480156103f457600080fd5b506102e8610403366004612c8d565b610cd9565b34801561041457600080fd5b5061041d60fa81565b60405160ff9091168152602001610262565b34801561043b57600080fd5b506102e861044a366004612c75565b610d6f565b34801561045b57600080fd5b506102e8610ddf565b34801561047057600080fd5b506102e8610e31565b34801561048557600080fd5b50600854610258565b34801561049a57600080fd5b506000546040516001600160a01b039091168152602001610262565b3480156104c257600080fd5b506102e86104d1366004612a0e565b610ec7565b3480156104e257600080fd5b506102586104f1366004612c75565b610ed2565b34801561050257600080fd5b506102e8610ef3565b34801561051757600080fd5b5060045461032090610100900461ffff1681565b34801561053757600080fd5b50610557610546366004612905565b63bc197c8160e01b95945050505050565b6040516001600160e01b03199091168152602001610262565b34801561057c57600080fd5b5060075461028b9060ff1681565b6102e8610598366004612cae565b610f90565b3480156105a957600080fd5b5060045461041d906301000000900460ff1681565b3480156105ca57600080fd5b506102e86105d9366004612b3c565b6110a1565b3480156105ea57600080fd5b506102e86105f9366004612b86565b611115565b34801561060a57600080fd5b5061028b6106193660046128d3565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b34801561065357600080fd5b506105576106623660046129ab565b63f23a6e6160e01b95945050505050565b34801561067f57600080fd5b506102e861068e3660046129ab565b61117d565b34801561069f57600080fd5b506102e86106ae3660046128b9565b611218565b3480156106bf57600080fd5b5061041d600a81565b3480156106d457600080fd5b506102e86106e3366004612c75565b6112e5565b60006001600160a01b03831661076b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b600061079e82611332565b92915050565b60008181526009602052604090205460609060ff1661082b5760405162461bcd60e51b815260206004820152602360248201527f5552492072657175657374656420666f7220696e76616c6964206974656d207460448201527f79706500000000000000000000000000000000000000000000000000000000006064820152608401610762565b60006005805461083a90613023565b9050116108d1576005805461084e90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461087a90613023565b80156108c75780601f1061089c576101008083540402835291602001916108c7565b820191906000526020600020905b8154815290600101906020018083116108aa57829003601f168201915b505050505061079e565b60056108dc83611370565b6040516020016108ed929190612d35565b60405160208183030381529060405292915050565b6001600160a01b03851633148061091e575061091e8533610619565b6109905760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610762565b61099d85858585856114c6565b5050505050565b6000546001600160a01b031633146109ec5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b80516109ff90600590602084019061270c565b50610a0981611751565b7f157d450c8fb1377294d9db75af1de2753efc52d8e5578551d70d2c7d9cd74df96005604051610a399190612eaa565b60405180910390a150565b6000546001600160a01b03163314610a8c5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b6040514790339082156108fc029083906000818181858888f19350505050158015610abb573d6000803e3d6000fd5b5050565b6000546001600160a01b03163314610b075760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b60045460ff16610b595760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610762565b610b61611764565b565b60608151835114610bdc5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610762565b6000835167ffffffffffffffff811115610c0657634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c2f578160200160208202803683370190505b50905060005b8451811015610cd157610c96858281518110610c6157634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610c8957634e487b7160e01b600052603260045260246000fd5b60200260200101516106e8565b828281518110610cb657634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610cca8161308b565b9050610c35565b509392505050565b60045460ff1615610d1f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610762565b610d2a3383836117fb565b60408051338152602081018490529081018290527fd5a6b92e9ce7526b6436f01b4bf0d6647dfef511352212f6efab3e71cc4f67a39060600160405180910390a15050565b6000546001600160a01b03163314610db75760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b610ddc303383610dc730866106e8565b6040518060200160405280600081525061117d565b50565b6000546001600160a01b03163314610e275760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b610b6160006119ab565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b60045460ff1615610ebf5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610762565b610b61611a13565b610abb338383611a8e565b60068181548110610ee257600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314610f3b5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b6007805460ff8082161560ff1990921682179092556040805191909216158082521560208201527fafc764693a27a006fd1d3b3d2332c689d79c83c614d5990e13aa4bfcc3ca9c4691015b60405180910390a1565b60075460ff16610fe25760405162461bcd60e51b815260206004820152601660248201527f7075626c69635f73616c655f6e6f745f616374697665000000000000000000006044820152606401610762565b60008160ff16116110355760405162461bcd60e51b815260206004820152600b60248201527f616d6f756e745f7a65726f0000000000000000000000000000000000000000006044820152606401610762565b8060ff166008546110469190612fbd565b3410156110955760405162461bcd60e51b815260206004820152601060248201527f6e6f745f656e6f7567685f6574686572000000000000000000000000000000006044820152606401610762565b610ddc33600083611b83565b6000546001600160a01b031633146110e95760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b610abb6110fe6000546001600160a01b031690565b838360405180602001604052806000815250611dde565b6000546001600160a01b0316331461115d5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b61117881848460405180602001604052806000815250611dde565b505050565b6001600160a01b03851633148061119957506111998533610619565b61120b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201527f20617070726f76656400000000000000000000000000000000000000000000006064820152608401610762565b61099d8585858585611fd0565b6000546001600160a01b031633146112605760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b6001600160a01b0381166112dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610762565b610ddc816119ab565b6000546001600160a01b0316331461132d5760405162461bcd60e51b815260206004820181905260248201526000805160206131b58339815191526044820152606401610762565b600855565b60006001600160e01b031982167f4e2312e000000000000000000000000000000000000000000000000000000000148061079e575061079e82612181565b6060816113b057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156113da57806113c48161308b565b91506113d39050600a83612fa9565b91506113b4565b60008167ffffffffffffffff81111561140357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561142d576020820181803683370190505b5090505b84156114be57611442600183612fdc565b915061144f600a866130a6565b61145a906030612f6c565b60f81b81838151811061147d57634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506114b7600a86612fa9565b9450611431565b949350505050565b81518351146115285760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610762565b6001600160a01b03841661158c5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610762565b3361159b81878787878761221c565b60005b84518110156116e35760008582815181106115c957634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106115f557634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156116895760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610762565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906116c8908490612f6c565b92505081905550505050806116dc9061308b565b905061159e565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611733929190612e69565b60405180910390a4611749818787878787612295565b505050505050565b8051610abb90600390602084019061270c565b60045460ff166117b65760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610762565b6004805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610f86565b6001600160a01b0383166118775760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610762565b336118a6818560006118888761244a565b6118918761244a565b6040518060200160405280600081525061221c565b60008381526001602090815260408083206001600160a01b03881684529091529020548281101561193e5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610762565b60008481526001602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60045460ff1615611a595760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610762565b6004805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e33390565b816001600160a01b0316836001600160a01b03161415611b165760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610762565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b80611b9160fa6108ca612f4f565b60045461ffff9182169160ff80851692611bbc92630100000082049092169161010090910416612f4f565b611bc69190612f4f565b61ffff161115611c185760405162461bcd60e51b815260206004820152601360248201527f6d6178696d756d5f67756e735f6d696e746564000000000000000000000000006044820152606401610762565b600a60ff82161115611c6c5760405162461bcd60e51b815260206004820152601560248201527f616d6f756e745f657863656564735f74785f6d617800000000000000000000006044820152606401610762565b60005b8260ff16811015611d8c576000611c85856124a3565b600454909150610100810461ffff166108ca14906301000000900460ff1660fa14801581611cc457508180611cc45750611cc0600a846130a6565b6001145b15611d21576001600460038282829054906101000a900460ff16611ce89190612f84565b92506101000a81548160ff021916908360ff160217905550611d1c8860018060405180602001604052806000815250612502565b611d78565b6001600460018282829054906101000a900461ffff16611d419190612f4f565b92506101000a81548161ffff021916908361ffff160217905550611d78886000600160405180602001604052806000815250612502565b50505080611d859061308b565b9050611c6f565b50604080516001600160a01b03861681526020810185905260ff84168183015290517f8914acde3f17821ad609110a0a64bf9dd88cb8c677d47f47371b5fa6a74c42b99181900360600190a150505050565b6001600160a01b038416611e3e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610762565b8151835114611ea05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610762565b33611eb08160008787878761221c565b60005b8451811015611f6857838181518110611edc57634e487b7160e01b600052603260045260246000fd5b602002602001015160016000878481518110611f0857634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611f509190612f6c565b90915550819050611f608161308b565b915050611eb3565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fb9929190612e69565b60405180910390a461099d81600087878787612295565b6001600160a01b0384166120345760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610762565b336120538187876120448861244a565b61204d8861244a565b8761221c565b60008481526001602090815260408083206001600160a01b038a168452909152902054838110156120d95760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610762565b60008581526001602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290612118908490612f6c565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612178828888888888612601565b50505050505050565b60006001600160e01b031982167fd9b67a260000000000000000000000000000000000000000000000000000000014806121e457506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061079e57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461079e565b60045460ff16156117495760405162461bcd60e51b815260206004820152602c60248201527f455243313135355061757361626c653a20746f6b656e207472616e736665722060448201527f7768696c652070617573656400000000000000000000000000000000000000006064820152608401610762565b6001600160a01b0384163b156117495760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906122d99089908990889088908890600401612db5565b602060405180830381600087803b1580156122f357600080fd5b505af1925050508015612323575060408051601f3d908101601f1916820190925261232091810190612c13565b60015b6123d95761232f6130fc565b806308c379a014156123695750612344613114565b8061234f575061236b565b8060405162461bcd60e51b81526004016107629190612e97565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610762565b6001600160e01b0319811663bc197c8160e01b146121785760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610762565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061249257634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6000326124b1600143612fdc565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074810183905260940160408051601f19818403018152919052805160209091012092915050565b6001600160a01b0384166125625760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610762565b33612573816000876120448861244a565b60008481526001602090815260408083206001600160a01b0389168452909152812080548592906125a5908490612f6c565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461099d816000878787875b6001600160a01b0384163b156117495760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906126459089908990889088908890600401612e13565b602060405180830381600087803b15801561265f57600080fd5b505af192505050801561268f575060408051601f3d908101601f1916820190925261268c91810190612c13565b60015b61269b5761232f6130fc565b6001600160e01b0319811663f23a6e6160e01b146121785760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610762565b82805461271890613023565b90600052602060002090601f01602090048101928261273a5760008555612780565b82601f1061275357805160ff1916838001178555612780565b82800160010185558215612780579182015b82811115612780578251825591602001919060010190612765565b5061278c929150612790565b5090565b5b8082111561278c5760008155600101612791565b600067ffffffffffffffff8311156127bf576127bf6130e6565b6040516127d6601f8501601f19166020018261305e565b8091508381528484840111156127eb57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461281a57600080fd5b919050565b600082601f83011261282f578081fd5b8135602061283c82612f2b565b604051612849828261305e565b8381528281019150858301600585901b87018401881015612868578586fd5b855b858110156128865781358452928401929084019060010161286a565b5090979650505050505050565b600082601f8301126128a3578081fd5b6128b2838335602085016127a5565b9392505050565b6000602082840312156128ca578081fd5b6128b282612803565b600080604083850312156128e5578081fd5b6128ee83612803565b91506128fc60208401612803565b90509250929050565b600080600080600060a0868803121561291c578081fd5b61292586612803565b945061293360208701612803565b9350604086013567ffffffffffffffff8082111561294f578283fd5b61295b89838a0161281f565b94506060880135915080821115612970578283fd5b61297c89838a0161281f565b93506080880135915080821115612991578283fd5b5061299e88828901612893565b9150509295509295909350565b600080600080600060a086880312156129c2578081fd5b6129cb86612803565b94506129d960208701612803565b93506040860135925060608601359150608086013567ffffffffffffffff811115612a02578182fd5b61299e88828901612893565b60008060408385031215612a20578182fd5b612a2983612803565b915060208301358015158114612a3d578182fd5b809150509250929050565b60008060408385031215612a5a578182fd5b612a6383612803565b946020939093013593505050565b60008060408385031215612a83578182fd5b823567ffffffffffffffff80821115612a9a578384fd5b818501915085601f830112612aad578384fd5b81356020612aba82612f2b565b604051612ac7828261305e565b8381528281019150858301600585901b870184018b1015612ae6578889fd5b8896505b84871015612b0f57612afb81612803565b835260019690960195918301918301612aea565b5096505086013592505080821115612b25578283fd5b50612b328582860161281f565b9150509250929050565b60008060408385031215612b4e578081fd5b823567ffffffffffffffff80821115612b65578283fd5b612b718683870161281f565b93506020850135915080821115612b25578283fd5b600080600060608486031215612b9a578081fd5b833567ffffffffffffffff80821115612bb1578283fd5b612bbd8783880161281f565b94506020860135915080821115612bd2578283fd5b50612bdf8682870161281f565b925050612bee60408501612803565b90509250925092565b600060208284031215612c08578081fd5b81356128b28161319e565b600060208284031215612c24578081fd5b81516128b28161319e565b600060208284031215612c40578081fd5b813567ffffffffffffffff811115612c56578182fd5b8201601f81018413612c66578182fd5b6114be848235602084016127a5565b600060208284031215612c86578081fd5b5035919050565b60008060408385031215612c9f578182fd5b50508035926020909101359150565b600060208284031215612cbf578081fd5b813560ff811681146128b2578182fd5b6000815180845260208085019450808401835b83811015612cfe57815187529582019590820190600101612ce2565b509495945050505050565b60008151808452612d21816020860160208601612ff3565b601f01601f19169290920160200192915050565b6000808454612d4381613023565b60018281168015612d5b5760018114612d6c57612d98565b60ff19841687528287019450612d98565b8886526020808720875b85811015612d8f5781548a820152908401908201612d76565b50505082870194505b505050508351612dac818360208801612ff3565b01949350505050565b60006001600160a01b03808816835280871660208401525060a06040830152612de160a0830186612ccf565b8281036060840152612df38186612ccf565b90508281036080840152612e078185612d09565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152612e4b60a0830184612d09565b979650505050505050565b6020815260006128b26020830184612ccf565b604081526000612e7c6040830185612ccf565b8281036020840152612e8e8185612ccf565b95945050505050565b6020815260006128b26020830184612d09565b60006020808352818454612ebd81613023565b80848701526040600180841660008114612ede5760018114612ef257612f1d565b60ff19851689840152606089019550612f1d565b898852868820885b85811015612f155781548b8201860152908301908801612efa565b8a0184019650505b509398975050505050505050565b600067ffffffffffffffff821115612f4557612f456130e6565b5060051b60200190565b600061ffff808316818516808303821115612dac57612dac6130ba565b60008219821115612f7f57612f7f6130ba565b500190565b600060ff821660ff84168060ff03821115612fa157612fa16130ba565b019392505050565b600082612fb857612fb86130d0565b500490565b6000816000190483118215151615612fd757612fd76130ba565b500290565b600082821015612fee57612fee6130ba565b500390565b60005b8381101561300e578181015183820152602001612ff6565b8381111561301d576000848401525b50505050565b600181811c9082168061303757607f821691505b6020821081141561305857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715613084576130846130e6565b6040525050565b600060001982141561309f5761309f6130ba565b5060010190565b6000826130b5576130b56130d0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561311157600481823e5160e01c5b90565b600060443d10156131225790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561315257505050505090565b828501915081518181111561316a5750505050505090565b843d87010160208285010111156131845750505050505090565b6131936020828601018761305e565b509095945050505050565b6001600160e01b031981168114610ddc57600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a164736f6c6343000804000a

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6170692e6f75746261636b6d61727469616e732e636f6d2f6d657461646174612f0000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://api.outbackmartians.com/metadata/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [2] : 68747470733a2f2f6170692e6f75746261636b6d61727469616e732e636f6d2f
Arg [3] : 6d657461646174612f0000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

453:5000:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2170:228:2;;;;;;;;;;-1:-1:-1;2170:228:2;;;;;:::i;:::-;;:::i;:::-;;;25643:25:15;;;25631:2;25616:18;2170:228:2;;;;;;;;4729:179:14;;;;;;;;;;-1:-1:-1;4729:179:14;;;;;:::i;:::-;;:::i;:::-;;;14243:14:15;;14236:22;14218:41;;14206:2;14191:18;4729:179:14;14173:92:15;3939:413:14;;;;;;;;;;-1:-1:-1;3939:413:14;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4045:430:2:-;;;;;;;;;;-1:-1:-1;4045:430:2;;;;;:::i;:::-;;:::i;:::-;;2114:169:14;;;;;;;;;;-1:-1:-1;2114:169:14;;;;;:::i;:::-;;:::i;648:38::-;;;;;;;;;;;;682:4;648:38;;;;;25478:6:15;25466:19;;;25448:38;;25436:2;25421:18;648:38:14;25403:89:15;4360:142:14;;;;;;;;;;;;;:::i;5007:84::-;;;;;;;;;;;;;:::i;873:29::-;;;;;;;;;;;;;;;;911:47;;;;;;;;;;-1:-1:-1;911:47:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;2555:508:2;;;;;;;;;;-1:-1:-1;2555:508:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1098:84:1:-;;;;;;;;;;-1:-1:-1;1168:7:1;;;;1098:84;;1921:185:14;;;;;;;;;;-1:-1:-1;1921:185:14;;;;;:::i;:::-;;:::i;600:41::-;;;;;;;;;;;;638:3;600:41;;;;;26104:4:15;26092:17;;;26074:36;;26062:2;26047:18;600:41:14;26029:87:15;1747:166:14;;;;;;;;;;-1:-1:-1;1747:166:14;;;;;:::i;:::-;;:::i;1668:101:0:-;;;;;;;;;;;;;:::i;4916:83:14:-;;;;;;;;;;;;;:::i;3827:104::-;;;;;;;;;;-1:-1:-1;3909:14:14;;3827:104;;1036:85:0;;;;;;;;;;-1:-1:-1;1082:7:0;1108:6;1036:85;;-1:-1:-1;;;;;1108:6:0;;;11062:74:15;;11050:2;11035:18;1036:85:0;11017:125:15;3131:153:2;;;;;;;;;;-1:-1:-1;3131:153:2;;;;;:::i;:::-;;:::i;803:24:14:-;;;;;;;;;;-1:-1:-1;803:24:14;;;;;:::i;:::-;;:::i;3524:184::-;;;;;;;;;;;;;:::i;695:29::-;;;;;;;;;;-1:-1:-1;695:29:14;;;;;;;;;;;477:247:7;;;;;;;;;;-1:-1:-1;477:247:7;;;;;:::i;:::-;-1:-1:-1;;;477:247:7;;;;;;;;;;;-1:-1:-1;;;;;;14705:79:15;;;14687:98;;14675:2;14660:18;477:247:7;14642:149:15;836:28:14;;;;;;;;;;-1:-1:-1;836:28:14;;;;;;;;2291:240;;;;;;:::i;:::-;;:::i;731:32::-;;;;;;;;;;-1:-1:-1;731:32:14;;;;;;;;;;;3214:142;;;;;;;;;;-1:-1:-1;3214:142:14;;;;;:::i;:::-;;:::i;3364:152::-;;;;;;;;;;-1:-1:-1;3364:152:14;;;;;:::i;:::-;;:::i;3351:166:2:-;;;;;;;;;;-1:-1:-1;3351:166:2;;;;;:::i;:::-;-1:-1:-1;;;;;3473:27:2;;;3450:4;3473:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3351:166;252:219:7;;;;;;;;;;-1:-1:-1;252:219:7;;;;;:::i;:::-;-1:-1:-1;;;252:219:7;;;;;;;;3584:389:2;;;;;;;;;;-1:-1:-1;3584:389:2;;;;;:::i;:::-;;:::i;1918:198:0:-;;;;;;;;;;-1:-1:-1;1918:198:0;;;;;:::i;:::-;;:::i;556:37:14:-;;;;;;;;;;;;591:2;556:37;;3716:103;;;;;;;;;;-1:-1:-1;3716:103:14;;;;;:::i;:::-;;:::i;2170:228:2:-;2256:7;-1:-1:-1;;;;;2283:21:2;;2275:77;;;;-1:-1:-1;;;2275:77:2;;18037:2:15;2275:77:2;;;18019:21:15;18076:2;18056:18;;;18049:30;18115:34;18095:18;;;18088:62;18186:13;18166:18;;;18159:41;18217:19;;2275:77:2;;;;;;;;;-1:-1:-1;2369:13:2;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;2369:22:2;;;;;;;;;;;;2170:228::o;4729:179:14:-;4840:4;4864:36;4888:11;4864:23;:36::i;:::-;4857:43;4729:179;-1:-1:-1;;4729:179:14:o;3939:413::-;4103:23;;;;:15;:23;;;;;;4050:13;;4103:23;;4081:108;;;;-1:-1:-1;;;4081:108:14;;23530:2:15;4081:108:14;;;23512:21:15;23569:2;23549:18;;;23542:30;23608:34;23588:18;;;23581:62;23679:5;23659:18;;;23652:33;23702:19;;4081:108:14;23502:225:15;4081:108:14;4244:1;4226:7;4220:21;;;;;:::i;:::-;;;:25;:124;;4337:7;4220:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4289:7;4298:17;:6;:15;:17::i;:::-;4272:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4200:144;3939:413;-1:-1:-1;;3939:413:14:o;4045:430:2:-;-1:-1:-1;;;;;4270:20:2;;719:10:10;4270:20:2;;:60;;-1:-1:-1;4294:36:2;4311:4;719:10:10;3351:166:2;:::i;4294:36::-;4249:157;;;;-1:-1:-1;;;4249:157:2;;21525:2:15;4249:157:2;;;21507:21:15;21564:2;21544:18;;;21537:30;21603:34;21583:18;;;21576:62;21674:20;21654:18;;;21647:48;21712:19;;4249:157:2;21497:240:15;4249:157:2;4416:52;4439:4;4445:2;4449:3;4454:7;4463:4;4416:22;:52::i;:::-;4045:430;;;;;:::o;2114:169:14:-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;2191:18:14;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2220:17;2228:8;2220:7;:17::i;:::-;2253:22;2267:7;2253:22;;;;;;:::i;:::-;;;;;;;;2114:169:::0;:::o;4360:142::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;4457:37:14::1;::::0;4425:21:::1;::::0;4465:10:::1;::::0;4457:37;::::1;;;::::0;4425:21;;4410:12:::1;4457:37:::0;4410:12;4457:37;4425:21;4465:10;4457:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1318:1:0;4360:142:14:o:0;5007:84::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;1168:7:1;;;;1669:41:::1;;;::::0;-1:-1:-1;;;1669:41:1;;17343:2:15;1669:41:1::1;::::0;::::1;17325:21:15::0;17382:2;17362:18;;;17355:30;17421:22;17401:18;;;17394:50;17461:18;;1669:41:1::1;17315:170:15::0;1669:41:1::1;5067:16:14::2;:14;:16::i;:::-;5007:84::o:0;2555:508:2:-;2706:16;2765:3;:10;2746:8;:15;:29;2738:83;;;;-1:-1:-1;;;2738:83:2;;23934:2:15;2738:83:2;;;23916:21:15;23973:2;23953:18;;;23946:30;24012:34;23992:18;;;23985:62;24083:11;24063:18;;;24056:39;24112:19;;2738:83:2;23906:231:15;2738:83:2;2832:30;2879:8;:15;2865:30;;;;;;-1:-1:-1;;;2865:30:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2865:30:2;;2832:63;;2911:9;2906:120;2930:8;:15;2926:1;:19;2906:120;;;2985:30;2995:8;3004:1;2995:11;;;;;;-1:-1:-1;;;2995:11:2;;;;;;;;;;;;;;;3008:3;3012:1;3008:6;;;;;;-1:-1:-1;;;3008:6:2;;;;;;;;;;;;;;;2985:9;:30::i;:::-;2966:13;2980:1;2966:16;;;;;;-1:-1:-1;;;2966:16:2;;;;;;;;;;;;;;;;;;:49;2947:3;;;:::i;:::-;;;2906:120;;;-1:-1:-1;3043:13:2;2555:508;-1:-1:-1;;;2555:508:2:o;1921:185:14:-;1168:7:1;;;;1411:9;1403:38;;;;-1:-1:-1;;;1403:38:1;;20774:2:15;1403:38:1;;;20756:21:15;20813:2;20793:18;;;20786:30;-1:-1:-1;;;20832:18:15;;;20825:46;20888:18;;1403:38:1;20746:166:15;1403:38:1;2008:33:14::1;2014:10;2026:6;2034;2008:5;:33::i;:::-;2057:41;::::0;;2071:10:::1;12791:74:15::0;;12896:2;12881:18;;12874:34;;;12924:18;;;12917:34;;;2057:41:14::1;::::0;12779:2:15;12764:18;2057:41:14::1;;;;;;;1921:185:::0;;:::o;1747:166::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;1816:89:14::1;1841:4;1848:10;1860:6;1868:32;1886:4;1893:6;1868:9;:32::i;:::-;1816:89;;;;;;;;;;;::::0;:16:::1;:89::i;:::-;1747:166:::0;:::o;1668:101:0:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;1732:30:::1;1759:1;1732:18;:30::i;4916:83:14:-:0;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;1168:7:1;;;;1411:9:::1;1403:38;;;::::0;-1:-1:-1;;;1403:38:1;;20774:2:15;1403:38:1::1;::::0;::::1;20756:21:15::0;20813:2;20793:18;;;20786:30;-1:-1:-1;;;20832:18:15;;;20825:46;20888:18;;1403:38:1::1;20746:166:15::0;1403:38:1::1;4977:14:14::2;:12;:14::i;3131:153:2:-:0;3225:52;719:10:10;3258:8:2;3268;3225:18;:52::i;803:24:14:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:24:14;:::o;3524:184::-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;3606:16:14::1;::::0;;::::1;::::0;;::::1;3605:17;-1:-1:-1::0;;3586:36:14;;::::1;::::0;::::1;::::0;;;3640:60:::1;::::0;;3665:16;;;;3664:17:::1;14432:41:15::0;;;14457:14;14504:2;14489:18;;14482:50;3640:60:14::1;::::0;14405:18:15;3640:60:14::1;;;;;;;;3524:184::o:0;2291:240::-;5145:16;;;;5137:51;;;;-1:-1:-1;;;5137:51:14;;25155:2:15;5137:51:14;;;25137:21:15;25194:2;25174:18;;;25167:30;25233:24;25213:18;;;25206:52;25275:18;;5137:51:14;25127:172:15;5137:51:14;2392:1:::1;2383:6;:10;;;2375:34;;;::::0;-1:-1:-1;;;2375:34:14;;20434:2:15;2375:34:14::1;::::0;::::1;20416:21:15::0;20473:2;20453:18;;;20446:30;20512:13;20492:18;;;20485:41;20543:18;;2375:34:14::1;20406:161:15::0;2375:34:14::1;2458:6;2441:23;;:14;;:23;;;;:::i;:::-;2428:9;:36;;2420:65;;;::::0;-1:-1:-1;;;2420:65:14;;17692:2:15;2420:65:14::1;::::0;::::1;17674:21:15::0;17731:2;17711:18;;;17704:30;17770:18;17750;;;17743:46;17806:18;;2420:65:14::1;17664:166:15::0;2420:65:14::1;2496:27;2501:10;2513:1;2516:6;2496:4;:27::i;3214:142::-:0;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;3311:37:14::1;3322:7;1082::0::0;1108:6;-1:-1:-1;;;;;1108:6:0;;1036:85;3322:7:14::1;3331:3;3336:7;3311:37;;;;;;;;;;;::::0;:10:::1;:37::i;3364:152::-:0;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;3476:32:14::1;3487:2;3491:3;3496:7;3476:32;;;;;;;;;;;::::0;:10:::1;:32::i;:::-;3364:152:::0;;;:::o;3584:389:2:-;-1:-1:-1;;;;;3784:20:2;;719:10:10;3784:20:2;;:60;;-1:-1:-1;3808:36:2;3825:4;719:10:10;3351:166:2;:::i;3808:36::-;3763:148;;;;-1:-1:-1;;;3763:148:2;;20024:2:15;3763:148:2;;;20006:21:15;20063:2;20043:18;;;20036:30;20102:34;20082:18;;;20075:62;20173:11;20153:18;;;20146:39;20202:19;;3763:148:2;19996:231:15;3763:148:2;3921:45;3939:4;3945:2;3949;3953:6;3961:4;3921:17;:45::i;1918:198:0:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;-1:-1:-1;;;;;2006:22:0;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:0;;18799:2:15;1998:73:0::1;::::0;::::1;18781:21:15::0;18838:2;18818:18;;;18811:30;18877:34;18857:18;;;18850:62;18948:8;18928:18;;;18921:36;18974:19;;1998:73:0::1;18771:228:15::0;1998:73:0::1;2081:28;2100:8;2081:18;:28::i;3716:103:14:-:0;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:10;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;22759:2:15;1240:68:0;;;22741:21:15;;;22778:18;;;22771:30;-1:-1:-1;;;;;;;;;;;22817:18:15;;;22810:62;22889:18;;1240:68:0;22731:182:15;1240:68:0;3790:14:14::1;:21:::0;3716:103::o;387:221:8:-;489:4;-1:-1:-1;;;;;;512:49:8;;527:34;512:49;;:89;;;565:36;589:11;565:23;:36::i;328:703:11:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:11;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:11;;-1:-1:-1;773:2:11;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;-1:-1:-1;;;817:17:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:11;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:11;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;-1:-1:-1;;;902:14:11;;;;;;;;;;;;:56;;;;;;;;;;-1:-1:-1;972:11:11;981:2;972:11;;:::i;:::-;;;844:150;;;1017:6;328:703;-1:-1:-1;;;;328:703:11:o;6068:1045:2:-;6288:7;:14;6274:3;:10;:28;6266:81;;;;-1:-1:-1;;;6266:81:2;;24344:2:15;6266:81:2;;;24326:21:15;24383:2;24363:18;;;24356:30;24422:34;24402:18;;;24395:62;-1:-1:-1;;;24473:18:15;;;24466:38;24521:19;;6266:81:2;24316:230:15;6266:81:2;-1:-1:-1;;;;;6365:16:2;;6357:66;;;;-1:-1:-1;;;6357:66:2;;21119:2:15;6357:66:2;;;21101:21:15;21158:2;21138:18;;;21131:30;21197:34;21177:18;;;21170:62;-1:-1:-1;;;21248:18:15;;;21241:35;21293:19;;6357:66:2;21091:227:15;6357:66:2;719:10:10;6476:60:2;719:10:10;6507:4:2;6513:2;6517:3;6522:7;6531:4;6476:20;:60::i;:::-;6552:9;6547:411;6571:3;:10;6567:1;:14;6547:411;;;6602:10;6615:3;6619:1;6615:6;;;;;;-1:-1:-1;;;6615:6:2;;;;;;;;;;;;;;;6602:19;;6635:14;6652:7;6660:1;6652:10;;;;;;-1:-1:-1;;;6652:10:2;;;;;;;;;;;;;;;;;;;;6677:19;6699:13;;;:9;:13;;;;;;-1:-1:-1;;;;;6699:19:2;;;;;;;;;;;;6652:10;;-1:-1:-1;6740:21:2;;;;6732:76;;;;-1:-1:-1;;;6732:76:2;;22348:2:15;6732:76:2;;;22330:21:15;22387:2;22367:18;;;22360:30;22426:34;22406:18;;;22399:62;-1:-1:-1;;;22477:18:15;;;22470:40;22527:19;;6732:76:2;22320:232:15;6732:76:2;6850:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6850:19:2;;;;;;;;;;6872:20;;;6850:42;;6920:17;;;;;;;:27;;6872:20;;6850:13;6920:27;;6872:20;;6920:27;:::i;:::-;;;;;;;;6547:411;;;6583:3;;;;:::i;:::-;;;6547:411;;;;7003:2;-1:-1:-1;;;;;6973:47:2;6997:4;-1:-1:-1;;;;;6973:47:2;6987:8;-1:-1:-1;;;;;6973:47:2;;7007:3;7012:7;6973:47;;;;;;;:::i;:::-;;;;;;;;7031:75;7067:8;7077:4;7083:2;7087:3;7092:7;7101:4;7031:35;:75::i;:::-;6068:1045;;;;;;:::o;7936:86::-;8002:13;;;;:4;;:13;;;;;:::i;2110:117:1:-;1168:7;;;;1669:41;;;;-1:-1:-1;;;1669:41:1;;17343:2:15;1669:41:1;;;17325:21:15;17382:2;17362:18;;;17355:30;17421:22;17401:18;;;17394:50;17461:18;;1669:41:1;17315:170:15;1669:41:1;2168:7:::1;:15:::0;;-1:-1:-1;;2168:15:1::1;::::0;;2198:22:::1;719:10:10::0;2207:12:1::1;2198:22;::::0;-1:-1:-1;;;;;11080:55:15;;;11062:74;;11050:2;11035:18;2198:22:1::1;11017:125:15::0;10248:630:2;-1:-1:-1;;;;;10370:18:2;;10362:66;;;;-1:-1:-1;;;10362:66:2;;21944:2:15;10362:66:2;;;21926:21:15;21983:2;21963:18;;;21956:30;22022:34;22002:18;;;21995:62;22093:5;22073:18;;;22066:33;22116:19;;10362:66:2;21916:225:15;10362:66:2;719:10:10;10481:102:2;719:10:10;10512:4:2;10439:16;10530:21;10548:2;10530:17;:21::i;:::-;10553:25;10571:6;10553:17;:25::i;:::-;10481:102;;;;;;;;;;;;:20;:102::i;:::-;10594:19;10616:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;10616:19:2;;;;;;;;;;10653:21;;;;10645:70;;;;-1:-1:-1;;;10645:70:2;;19206:2:15;10645:70:2;;;19188:21:15;19245:2;19225:18;;;19218:30;19284:34;19264:18;;;19257:62;19355:6;19335:18;;;19328:34;19379:19;;10645:70:2;19178:226:15;10645:70:2;10749:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;10749:19:2;;;;;;;;;;;;10771:20;;;10749:42;;10817:54;;25853:25:15;;;25894:18;;;25887:34;;;10749:19:2;;10817:54;;;;;;25826:18:15;10817:54:2;;;;;;;10248:630;;;;;:::o;2270:187:0:-;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:0;;;;;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2270:187;;:::o;1863:115:1:-;1168:7;;;;1411:9;1403:38;;;;-1:-1:-1;;;1403:38:1;;20774:2:15;1403:38:1;;;20756:21:15;20813:2;20793:18;;;20786:30;-1:-1:-1;;;20832:18:15;;;20825:46;20888:18;;1403:38:1;20746:166:15;1403:38:1;1922:7:::1;:14:::0;;-1:-1:-1;;1922:14:1::1;1932:4;1922:14;::::0;;1951:20:::1;1958:12;719:10:10::0;;640:96;12074:323:2;12224:8;-1:-1:-1;;;;;12215:17:2;:5;-1:-1:-1;;;;;12215:17:2;;;12207:71;;;;-1:-1:-1;;;12207:71:2;;23120:2:15;12207:71:2;;;23102:21:15;23159:2;23139:18;;;23132:30;23198:34;23178:18;;;23171:62;23269:11;23249:18;;;23242:39;23298:19;;12207:71:2;23092:231:15;12207:71:2;-1:-1:-1;;;;;12288:25:2;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;12288:46:2;;;;;;;;;;12349:41;;14218::15;;;12349::2;;14191:18:15;12349:41:2;;;;;;;12074:323;;;:::o;2539:667:14:-;2617:6;5317:24;638:3;682:4;5317:24;:::i;:::-;5285:19;;5267:74;;;;;:46;;;;;:37;;5285:19;;;;;;;;5267:15;;;;:37;:::i;:::-;:46;;;;:::i;:::-;:74;;;;5259:106;;;;-1:-1:-1;;;5259:106:14;;16995:2:15;5259:106:14;;;16977:21:15;17034:2;17014:18;;;17007:30;17073:21;17053:18;;;17046:49;17112:18;;5259:106:14;16967:169:15;5259:106:14;591:2;5384:20;;;;;5376:54;;;;-1:-1:-1;;;5376:54:14;;18449:2:15;5376:54:14;;;18431:21:15;18488:2;18468:18;;;18461:30;18527:23;18507:18;;;18500:51;18568:18;;5376:54:14;18421:171:15;5376:54:14;2640:6:::1;2636:503;2651:6;2649:8;;:1;:8;2636:503;;;2678:17;2698:15;2705:7;2698:6;:15::i;:::-;2748;::::0;2678:35;;-1:-1:-1;2748:15:14::1;::::0;::::1;:27;:15;682:4;2748:27;::::0;2813:19;;::::1;:36;:19;638:3;2813:36;2867:16:::0;::::1;2813:36:::0;2867:57:::1;;;2888:12;:35;;;-1:-1:-1::0;2904:14:14::1;2916:2;2904:9:::0;:14:::1;:::i;:::-;2922:1;2904:19;2888:35;2864:264;;;2968:1;2945:19;;:24;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2988:22;2994:5;3001:1;3004::::0;2988:22:::1;;;;;;;;;;;::::0;:5:::1;:22::i;:::-;2864:264;;;3070:1;3051:15;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3090:22;3096:5;3103:1;3106;3090:22;;;;;;;;;;;::::0;:5:::1;:22::i;:::-;2636:503;;;2658:3;;;;:::i;:::-;;;2636:503;;;-1:-1:-1::0;3164:34:14::1;::::0;;-1:-1:-1;;;;;13178:55:15;;13160:74;;13265:2;13250:18;;13243:34;;;13325:4;13313:17;;13293:18;;;13286:45;3164:34:14;;::::1;::::0;;;;13148:2:15;3164:34:14;;::::1;2539:667:::0;;;;:::o;9293:715:2:-;-1:-1:-1;;;;;9465:16:2;;9457:62;;;;-1:-1:-1;;;9457:62:2;;24753:2:15;9457:62:2;;;24735:21:15;24792:2;24772:18;;;24765:30;24831:34;24811:18;;;24804:62;-1:-1:-1;;;24882:18:15;;;24875:31;24923:19;;9457:62:2;24725:223:15;9457:62:2;9551:7;:14;9537:3;:10;:28;9529:81;;;;-1:-1:-1;;;9529:81:2;;24344:2:15;9529:81:2;;;24326:21:15;24383:2;24363:18;;;24356:30;24422:34;24402:18;;;24395:62;-1:-1:-1;;;24473:18:15;;;24466:38;24521:19;;9529:81:2;24316:230:15;9529:81:2;719:10:10;9663:66:2;719:10:10;9621:16:2;9706:2;9710:3;9715:7;9724:4;9663:20;:66::i;:::-;9745:9;9740:101;9764:3;:10;9760:1;:14;9740:101;;;9820:7;9828:1;9820:10;;;;;;-1:-1:-1;;;9820:10:2;;;;;;;;;;;;;;;9795:9;:17;9805:3;9809:1;9805:6;;;;;;-1:-1:-1;;;9805:6:2;;;;;;;;;;;;;;;9795:17;;;;;;;;;;;:21;9813:2;-1:-1:-1;;;;;9795:21:2;-1:-1:-1;;;;;9795:21:2;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;9776:3:2;;-1:-1:-1;9776:3:2;;;:::i;:::-;;;;9740:101;;;;9892:2;-1:-1:-1;;;;;9856:53:2;9888:1;-1:-1:-1;;;;;9856:53:2;9870:8;-1:-1:-1;;;;;9856:53:2;;9896:3;9901:7;9856:53;;;;;;;:::i;:::-;;;;;;;;9920:81;9956:8;9974:1;9978:2;9982:3;9987:7;9996:4;9920:35;:81::i;4925:797::-;-1:-1:-1;;;;;5106:16:2;;5098:66;;;;-1:-1:-1;;;5098:66:2;;21119:2:15;5098:66:2;;;21101:21:15;21158:2;21138:18;;;21131:30;21197:34;21177:18;;;21170:62;-1:-1:-1;;;21248:18:15;;;21241:35;21293:19;;5098:66:2;21091:227:15;5098:66:2;719:10:10;5217:96:2;719:10:10;5248:4:2;5254:2;5258:21;5276:2;5258:17;:21::i;:::-;5281:25;5299:6;5281:17;:25::i;:::-;5308:4;5217:20;:96::i;:::-;5324:19;5346:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;5346:19:2;;;;;;;;;;5383:21;;;;5375:76;;;;-1:-1:-1;;;5375:76:2;;22348:2:15;5375:76:2;;;22330:21:15;22387:2;22367:18;;;22360:30;22426:34;22406:18;;;22399:62;-1:-1:-1;;;22477:18:15;;;22470:40;22527:19;;5375:76:2;22320:232:15;5375:76:2;5485:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;5485:19:2;;;;;;;;;;5507:20;;;5485:42;;5547:17;;;;;;;:27;;5507:20;;5485:13;5547:27;;5507:20;;5547:27;:::i;:::-;;;;-1:-1:-1;;5590:46:2;;;25853:25:15;;;25909:2;25894:18;;25887:34;;;-1:-1:-1;;;;;5590:46:2;;;;;;;;;;;;;;25826:18:15;5590:46:2;;;;;;;5647:68;5678:8;5688:4;5694:2;5698;5702:6;5710:4;5647:30;:68::i;:::-;4925:797;;;;;;;:::o;1221:305::-;1323:4;-1:-1:-1;;;;;;1358:41:2;;1373:26;1358:41;;:109;;-1:-1:-1;;;;;;;1415:52:2;;1430:37;1415:52;1358:109;:161;;;-1:-1:-1;952:25:12;-1:-1:-1;;;;;;937:40:12;;;1483:36:2;829:155:12;709:381:5;1168:7:1;;;;1025:9:5;1017:66;;;;-1:-1:-1;;;1017:66:5;;19611:2:15;1017:66:5;;;19593:21:15;19650:2;19630:18;;;19623:30;19689:34;19669:18;;;19662:62;19760:14;19740:18;;;19733:42;19792:19;;1017:66:5;19583:234:15;14282:792:2;-1:-1:-1;;;;;14514:13:2;;1087:20:9;1133:8;14510:558:2;;14549:79;;-1:-1:-1;;;14549:79:2;;-1:-1:-1;;;;;14549:43:2;;;;;:79;;14593:8;;14603:4;;14609:3;;14614:7;;14623:4;;14549:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14549:79:2;;;;;;;;-1:-1:-1;;14549:79:2;;;;;;;;;;;;:::i;:::-;;;14545:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14934:6;14927:14;;-1:-1:-1;;;14927:14:2;;;;;;;;:::i;14545:513::-;;;14981:62;;-1:-1:-1;;;14981:62:2;;16165:2:15;14981:62:2;;;16147:21:15;16204:2;16184:18;;;16177:30;16243:34;16223:18;;;16216:62;16314:22;16294:18;;;16287:50;16354:19;;14981:62:2;16137:242:15;14545:513:2;-1:-1:-1;;;;;;14707:60:2;;-1:-1:-1;;;14707:60:2;14703:157;;14791:50;;-1:-1:-1;;;14791:50:2;;16586:2:15;14791:50:2;;;16568:21:15;16625:2;16605:18;;;16598:30;16664:34;16644:18;;;16637:62;-1:-1:-1;;;16715:18:15;;;16708:38;16763:19;;14791:50:2;16558:230:15;15080:193:2;15199:16;;;15213:1;15199:16;;;;;;;;;15146;;15174:22;;15199:16;;;;;;;;;;;;-1:-1:-1;15199:16:2;15174:41;;15236:7;15225:5;15231:1;15225:8;;;;;;-1:-1:-1;;;15225:8:2;;;;;;;;;;;;;;;;;;:18;15261:5;15080:193;-1:-1:-1;;15080:193:2:o;4510:211:14:-;4563:7;4639:9;4660:16;4675:1;4660:12;:16;:::i;:::-;4622:79;;9728:2:15;9724:15;;;;-1:-1:-1;;9720:53:15;4622:79:14;;;9708:66:15;4650:27:14;9790:12:15;;;9783:28;4679:15:14;9827:12:15;;;9820:28;9864:12;;;9857:28;;;9901:13;;4622:79:14;;;-1:-1:-1;;4622:79:14;;;;;;;;;4612:90;;4622:79;4612:90;;;;;4510:211;-1:-1:-1;;4510:211:14:o;8395:553:2:-;-1:-1:-1;;;;;8542:16:2;;8534:62;;;;-1:-1:-1;;;8534:62:2;;24753:2:15;8534:62:2;;;24735:21:15;24792:2;24772:18;;;24765:30;24831:34;24811:18;;;24804:62;-1:-1:-1;;;24882:18:15;;;24875:31;24923:19;;8534:62:2;24725:223:15;8534:62:2;719:10:10;8649:102:2;719:10:10;8607:16:2;8692:2;8696:21;8714:2;8696:17;:21::i;8649:102::-;8762:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;8762:17:2;;;;;;;;;:27;;8783:6;;8762:13;:27;;8783:6;;8762:27;:::i;:::-;;;;-1:-1:-1;;8804:52:2;;;25853:25:15;;;25909:2;25894:18;;25887:34;;;-1:-1:-1;;;;;8804:52:2;;;;8837:1;;8804:52;;;;;;25826:18:15;8804:52:2;;;;;;;8867:74;8898:8;8916:1;8920:2;8924;8928:6;8936:4;13551:725;-1:-1:-1;;;;;13758:13:2;;1087:20:9;1133:8;13754:516:2;;13793:72;;-1:-1:-1;;;13793:72:2;;-1:-1:-1;;;;;13793:38:2;;;;;:72;;13832:8;;13842:4;;13848:2;;13852:6;;13860:4;;13793:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13793:72:2;;;;;;;;-1:-1:-1;;13793:72:2;;;;;;;;;;;;:::i;:::-;;;13789:471;;;;:::i;:::-;-1:-1:-1;;;;;;13914:55:2;;-1:-1:-1;;;13914:55:2;13910:152;;13993:50;;-1:-1:-1;;;13993:50:2;;16586:2:15;13993:50:2;;;16568:21:15;16625:2;16605:18;;;16598:30;16664:34;16644:18;;;16637:62;-1:-1:-1;;;16715:18:15;;;16708:38;16763:19;;13993:50:2;16558:230:15;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:15;78:5;112:18;104:6;101:30;98:2;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:15;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:2;;;369:1;366;359:12;328:2;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;88:394;;;;;:::o;487:196::-;555:20;;-1:-1:-1;;;;;604:54:15;;594:65;;584:2;;673:1;670;663:12;584:2;536:147;;;:::o;688:755::-;742:5;795:3;788:4;780:6;776:17;772:27;762:2;;817:5;810;803:20;762:2;857:6;844:20;883:4;906:43;946:2;906:43;:::i;:::-;978:2;972:9;990:31;1018:2;1010:6;990:31;:::i;:::-;1056:18;;;1090:15;;;;-1:-1:-1;1125:15:15;;;1175:1;1171:10;;;1159:23;;1155:32;;1152:41;-1:-1:-1;1149:2:15;;;1210:5;1203;1196:20;1149:2;1236:5;1250:163;1264:2;1261:1;1258:9;1250:163;;;1321:17;;1309:30;;1359:12;;;;1391;;;;1282:1;1275:9;1250:163;;;-1:-1:-1;1431:6:15;;752:691;-1:-1:-1;;;;;;;752:691:15:o;1448:228::-;1490:5;1543:3;1536:4;1528:6;1524:17;1520:27;1510:2;;1565:5;1558;1551:20;1510:2;1591:79;1666:3;1657:6;1644:20;1637:4;1629:6;1625:17;1591:79;:::i;:::-;1582:88;1500:176;-1:-1:-1;;;1500:176:15:o;1681:196::-;1740:6;1793:2;1781:9;1772:7;1768:23;1764:32;1761:2;;;1814:6;1806;1799:22;1761:2;1842:29;1861:9;1842:29;:::i;1882:270::-;1950:6;1958;2011:2;1999:9;1990:7;1986:23;1982:32;1979:2;;;2032:6;2024;2017:22;1979:2;2060:29;2079:9;2060:29;:::i;:::-;2050:39;;2108:38;2142:2;2131:9;2127:18;2108:38;:::i;:::-;2098:48;;1969:183;;;;;:::o;2157:983::-;2311:6;2319;2327;2335;2343;2396:3;2384:9;2375:7;2371:23;2367:33;2364:2;;;2418:6;2410;2403:22;2364:2;2446:29;2465:9;2446:29;:::i;:::-;2436:39;;2494:38;2528:2;2517:9;2513:18;2494:38;:::i;:::-;2484:48;;2583:2;2572:9;2568:18;2555:32;2606:18;2647:2;2639:6;2636:14;2633:2;;;2668:6;2660;2653:22;2633:2;2696:61;2749:7;2740:6;2729:9;2725:22;2696:61;:::i;:::-;2686:71;;2810:2;2799:9;2795:18;2782:32;2766:48;;2839:2;2829:8;2826:16;2823:2;;;2860:6;2852;2845:22;2823:2;2888:63;2943:7;2932:8;2921:9;2917:24;2888:63;:::i;:::-;2878:73;;3004:3;2993:9;2989:19;2976:33;2960:49;;3034:2;3024:8;3021:16;3018:2;;;3055:6;3047;3040:22;3018:2;;3083:51;3126:7;3115:8;3104:9;3100:24;3083:51;:::i;:::-;3073:61;;;2354:786;;;;;;;;:::o;3145:626::-;3249:6;3257;3265;3273;3281;3334:3;3322:9;3313:7;3309:23;3305:33;3302:2;;;3356:6;3348;3341:22;3302:2;3384:29;3403:9;3384:29;:::i;:::-;3374:39;;3432:38;3466:2;3455:9;3451:18;3432:38;:::i;:::-;3422:48;;3517:2;3506:9;3502:18;3489:32;3479:42;;3568:2;3557:9;3553:18;3540:32;3530:42;;3623:3;3612:9;3608:19;3595:33;3651:18;3643:6;3640:30;3637:2;;;3688:6;3680;3673:22;3637:2;3716:49;3757:7;3748:6;3737:9;3733:22;3716:49;:::i;3776:367::-;3841:6;3849;3902:2;3890:9;3881:7;3877:23;3873:32;3870:2;;;3923:6;3915;3908:22;3870:2;3951:29;3970:9;3951:29;:::i;:::-;3941:39;;4030:2;4019:9;4015:18;4002:32;4077:5;4070:13;4063:21;4056:5;4053:32;4043:2;;4104:6;4096;4089:22;4043:2;4132:5;4122:15;;;3860:283;;;;;:::o;4148:264::-;4216:6;4224;4277:2;4265:9;4256:7;4252:23;4248:32;4245:2;;;4298:6;4290;4283:22;4245:2;4326:29;4345:9;4326:29;:::i;:::-;4316:39;4402:2;4387:18;;;;4374:32;;-1:-1:-1;;;4235:177:15:o;4417:1274::-;4535:6;4543;4596:2;4584:9;4575:7;4571:23;4567:32;4564:2;;;4617:6;4609;4602:22;4564:2;4662:9;4649:23;4691:18;4732:2;4724:6;4721:14;4718:2;;;4753:6;4745;4738:22;4718:2;4796:6;4785:9;4781:22;4771:32;;4841:7;4834:4;4830:2;4826:13;4822:27;4812:2;;4868:6;4860;4853:22;4812:2;4909;4896:16;4931:4;4954:43;4994:2;4954:43;:::i;:::-;5026:2;5020:9;5038:31;5066:2;5058:6;5038:31;:::i;:::-;5104:18;;;5138:15;;;;-1:-1:-1;5173:11:15;;;5215:1;5211:10;;;5203:19;;5199:28;;5196:41;-1:-1:-1;5193:2:15;;;5255:6;5247;5240:22;5193:2;5282:6;5273:15;;5297:169;5311:2;5308:1;5305:9;5297:169;;;5368:23;5387:3;5368:23;:::i;:::-;5356:36;;5329:1;5322:9;;;;;5412:12;;;;5444;;5297:169;;;-1:-1:-1;5485:6:15;-1:-1:-1;;5529:18:15;;5516:32;;-1:-1:-1;;5560:16:15;;;5557:2;;;5594:6;5586;5579:22;5557:2;;5622:63;5677:7;5666:8;5655:9;5651:24;5622:63;:::i;:::-;5612:73;;;4554:1137;;;;;:::o;5696:625::-;5814:6;5822;5875:2;5863:9;5854:7;5850:23;5846:32;5843:2;;;5896:6;5888;5881:22;5843:2;5941:9;5928:23;5970:18;6011:2;6003:6;6000:14;5997:2;;;6032:6;6024;6017:22;5997:2;6060:61;6113:7;6104:6;6093:9;6089:22;6060:61;:::i;:::-;6050:71;;6174:2;6163:9;6159:18;6146:32;6130:48;;6203:2;6193:8;6190:16;6187:2;;;6224:6;6216;6209:22;6326:699;6453:6;6461;6469;6522:2;6510:9;6501:7;6497:23;6493:32;6490:2;;;6543:6;6535;6528:22;6490:2;6588:9;6575:23;6617:18;6658:2;6650:6;6647:14;6644:2;;;6679:6;6671;6664:22;6644:2;6707:61;6760:7;6751:6;6740:9;6736:22;6707:61;:::i;:::-;6697:71;;6821:2;6810:9;6806:18;6793:32;6777:48;;6850:2;6840:8;6837:16;6834:2;;;6871:6;6863;6856:22;6834:2;;6899:63;6954:7;6943:8;6932:9;6928:24;6899:63;:::i;:::-;6889:73;;;6981:38;7015:2;7004:9;7000:18;6981:38;:::i;:::-;6971:48;;6480:545;;;;;:::o;7030:255::-;7088:6;7141:2;7129:9;7120:7;7116:23;7112:32;7109:2;;;7162:6;7154;7147:22;7109:2;7206:9;7193:23;7225:30;7249:5;7225:30;:::i;7290:259::-;7359:6;7412:2;7400:9;7391:7;7387:23;7383:32;7380:2;;;7433:6;7425;7418:22;7380:2;7470:9;7464:16;7489:30;7513:5;7489:30;:::i;7554:480::-;7623:6;7676:2;7664:9;7655:7;7651:23;7647:32;7644:2;;;7697:6;7689;7682:22;7644:2;7742:9;7729:23;7775:18;7767:6;7764:30;7761:2;;;7812:6;7804;7797:22;7761:2;7840:22;;7893:4;7885:13;;7881:27;-1:-1:-1;7871:2:15;;7927:6;7919;7912:22;7871:2;7955:73;8020:7;8015:2;8002:16;7997:2;7993;7989:11;7955:73;:::i;8039:190::-;8098:6;8151:2;8139:9;8130:7;8126:23;8122:32;8119:2;;;8172:6;8164;8157:22;8119:2;-1:-1:-1;8200:23:15;;8109:120;-1:-1:-1;8109:120:15:o;8234:258::-;8302:6;8310;8363:2;8351:9;8342:7;8338:23;8334:32;8331:2;;;8384:6;8376;8369:22;8331:2;-1:-1:-1;;8412:23:15;;;8482:2;8467:18;;;8454:32;;-1:-1:-1;8321:171:15:o;8497:289::-;8554:6;8607:2;8595:9;8586:7;8582:23;8578:32;8575:2;;;8628:6;8620;8613:22;8575:2;8672:9;8659:23;8722:4;8715:5;8711:16;8704:5;8701:27;8691:2;;8747:6;8739;8732:22;8791:437;8844:3;8882:5;8876:12;8909:6;8904:3;8897:19;8935:4;8964:2;8959:3;8955:12;8948:19;;9001:2;8994:5;8990:14;9022:3;9034:169;9048:6;9045:1;9042:13;9034:169;;;9109:13;;9097:26;;9143:12;;;;9178:15;;;;9070:1;9063:9;9034:169;;;-1:-1:-1;9219:3:15;;8852:376;-1:-1:-1;;;;;8852:376:15:o;9233:257::-;9274:3;9312:5;9306:12;9339:6;9334:3;9327:19;9355:63;9411:6;9404:4;9399:3;9395:14;9388:4;9381:5;9377:16;9355:63;:::i;:::-;9472:2;9451:15;-1:-1:-1;;9447:29:15;9438:39;;;;9479:4;9434:50;;9282:208;-1:-1:-1;;9282:208:15:o;9925:986::-;10101:3;10130;10165:6;10159:13;10195:36;10221:9;10195:36;:::i;:::-;10250:1;10267:18;;;10294:104;;;;10412:1;10407:362;;;;10260:509;;10294:104;-1:-1:-1;;10327:24:15;;10315:37;;10372:16;;;;-1:-1:-1;10294:104:15;;10407:362;10440:6;10435:3;10428:19;10470:4;10517:2;10512:3;10502:18;10542:3;10558:165;10572:6;10569:1;10566:13;10558:165;;;10650:14;;10637:11;;;10630:35;10693:16;;;;10587:10;;10558:165;;;10562:3;;;10752:6;10747:3;10743:16;10736:23;;10260:509;;;;;10800:6;10794:13;10816:55;10862:8;10857:3;10850:4;10842:6;10838:17;10816:55;:::i;:::-;10887:18;;10109:802;-1:-1:-1;;;;10109:802:15:o;11147:849::-;11469:4;-1:-1:-1;;;;;11579:2:15;11571:6;11567:15;11556:9;11549:34;11631:2;11623:6;11619:15;11614:2;11603:9;11599:18;11592:43;;11671:3;11666:2;11655:9;11651:18;11644:31;11698:57;11750:3;11739:9;11735:19;11727:6;11698:57;:::i;:::-;11803:9;11795:6;11791:22;11786:2;11775:9;11771:18;11764:50;11837:44;11874:6;11866;11837:44;:::i;:::-;11823:58;;11930:9;11922:6;11918:22;11912:3;11901:9;11897:19;11890:51;11958:32;11983:6;11975;11958:32;:::i;:::-;11950:40;11478:518;-1:-1:-1;;;;;;;;11478:518:15:o;12001:583::-;12223:4;-1:-1:-1;;;;;12333:2:15;12325:6;12321:15;12310:9;12303:34;12385:2;12377:6;12373:15;12368:2;12357:9;12353:18;12346:43;;12425:6;12420:2;12409:9;12405:18;12398:34;12468:6;12463:2;12452:9;12448:18;12441:34;12512:3;12506;12495:9;12491:19;12484:32;12533:45;12573:3;12562:9;12558:19;12550:6;12533:45;:::i;:::-;12525:53;12232:352;-1:-1:-1;;;;;;;12232:352:15:o;13342:261::-;13521:2;13510:9;13503:21;13484:4;13541:56;13593:2;13582:9;13578:18;13570:6;13541:56;:::i;13608:465::-;13865:2;13854:9;13847:21;13828:4;13891:56;13943:2;13932:9;13928:18;13920:6;13891:56;:::i;:::-;13995:9;13987:6;13983:22;13978:2;13967:9;13963:18;13956:50;14023:44;14060:6;14052;14023:44;:::i;:::-;14015:52;13837:236;-1:-1:-1;;;;;13837:236:15:o;14796:219::-;14945:2;14934:9;14927:21;14908:4;14965:44;15005:2;14994:9;14990:18;14982:6;14965:44;:::i;15020:938::-;15129:4;15158:2;15187;15176:9;15169:21;15210:4;15246:6;15240:13;15276:36;15302:9;15276:36;:::i;:::-;15348:6;15343:2;15332:9;15328:18;15321:34;15374:2;15395:1;15427:2;15416:9;15412:18;15444:1;15439:121;;;;15574:1;15569:363;;;;15405:527;;15439:121;-1:-1:-1;;15487:24:15;;15467:18;;;15460:52;15547:2;15532:18;;;-1:-1:-1;15439:121:15;;15569:363;15603:6;15597:4;15590:20;15654:2;15648:4;15638:19;15679:4;15696:180;15710:6;15707:1;15704:13;15696:180;;;15803:14;;15779:17;;;15775:26;;15768:50;15846:16;;;;15725:10;;15696:180;;;15900:17;;15896:26;;;-1:-1:-1;;15405:527:15;-1:-1:-1;15949:3:15;;15138:820;-1:-1:-1;;;;;;;;15138:820:15:o;26121:183::-;26181:4;26214:18;26206:6;26203:30;26200:2;;;26236:18;;:::i;:::-;-1:-1:-1;26281:1:15;26277:14;26293:4;26273:25;;26190:114::o;26309:224::-;26348:3;26376:6;26409:2;26406:1;26402:10;26439:2;26436:1;26432:10;26470:3;26466:2;26462:12;26457:3;26454:21;26451:2;;;26478:18;;:::i;26538:128::-;26578:3;26609:1;26605:6;26602:1;26599:13;26596:2;;;26615:18;;:::i;:::-;-1:-1:-1;26651:9:15;;26586:80::o;26671:204::-;26709:3;26745:4;26742:1;26738:12;26777:4;26774:1;26770:12;26812:3;26806:4;26802:14;26797:3;26794:23;26791:2;;;26820:18;;:::i;:::-;26856:13;;26717:158;-1:-1:-1;;;26717:158:15:o;26880:120::-;26920:1;26946;26936:2;;26951:18;;:::i;:::-;-1:-1:-1;26985:9:15;;26926:74::o;27005:168::-;27045:7;27111:1;27107;27103:6;27099:14;27096:1;27093:21;27088:1;27081:9;27074:17;27070:45;27067:2;;;27118:18;;:::i;:::-;-1:-1:-1;27158:9:15;;27057:116::o;27178:125::-;27218:4;27246:1;27243;27240:8;27237:2;;;27251:18;;:::i;:::-;-1:-1:-1;27288:9:15;;27227:76::o;27308:258::-;27380:1;27390:113;27404:6;27401:1;27398:13;27390:113;;;27480:11;;;27474:18;27461:11;;;27454:39;27426:2;27419:10;27390:113;;;27521:6;27518:1;27515:13;27512:2;;;27556:1;27547:6;27542:3;27538:16;27531:27;27512:2;;27361:205;;;:::o;27571:437::-;27650:1;27646:12;;;;27693;;;27714:2;;27768:4;27760:6;27756:17;27746:27;;27714:2;27821;27813:6;27810:14;27790:18;27787:38;27784:2;;;-1:-1:-1;;;27855:1:15;27848:88;27959:4;27956:1;27949:15;27987:4;27984:1;27977:15;27784:2;;27626:382;;;:::o;28013:249::-;28123:2;28104:13;;-1:-1:-1;;28100:27:15;28088:40;;28158:18;28143:34;;28179:22;;;28140:62;28137:2;;;28205:18;;:::i;:::-;28241:2;28234:22;-1:-1:-1;;28060:202:15:o;28267:135::-;28306:3;-1:-1:-1;;28327:17:15;;28324:2;;;28347:18;;:::i;:::-;-1:-1:-1;28394:1:15;28383:13;;28314:88::o;28407:112::-;28439:1;28465;28455:2;;28470:18;;:::i;:::-;-1:-1:-1;28504:9:15;;28445:74::o;28524:184::-;-1:-1:-1;;;28573:1:15;28566:88;28673:4;28670:1;28663:15;28697:4;28694:1;28687:15;28713:184;-1:-1:-1;;;28762:1:15;28755:88;28862:4;28859:1;28852:15;28886:4;28883:1;28876:15;28902:184;-1:-1:-1;;;28951:1:15;28944:88;29051:4;29048:1;29041:15;29075:4;29072:1;29065:15;29091:185;29126:3;29168:1;29150:16;29147:23;29144:2;;;29218:1;29213:3;29208;29193:27;29249:10;29244:3;29240:20;29144:2;29134:142;:::o;29281:671::-;29320:3;29362:4;29344:16;29341:26;29338:2;;;29328:624;:::o;29338:2::-;29404;29398:9;-1:-1:-1;;29469:16:15;29465:25;;29462:1;29398:9;29441:50;29520:4;29514:11;29544:16;29579:18;29650:2;29643:4;29635:6;29631:17;29628:25;29623:2;29615:6;29612:14;29609:45;29606:2;;;29657:5;;;;;29328:624;:::o;29606:2::-;29694:6;29688:4;29684:17;29673:28;;29730:3;29724:10;29757:2;29749:6;29746:14;29743:2;;;29763:5;;;;;;29328:624;:::o;29743:2::-;29847;29828:16;29822:4;29818:27;29814:36;29807:4;29798:6;29793:3;29789:16;29785:27;29782:69;29779:2;;;29854:5;;;;;;29328:624;:::o;29779:2::-;29870:57;29921:4;29912:6;29904;29900:19;29896:30;29890:4;29870:57;:::i;:::-;-1:-1:-1;29943:3:15;;29328:624;-1:-1:-1;;;;;29328:624:15:o;29957:177::-;-1:-1:-1;;;;;;30035:5:15;30031:78;30024:5;30021:89;30011:2;;30124:1;30121;30114:12

Swarm Source

none
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.