ETH Price: $2,468.32 (-2.19%)
Gas: 0.56 Gwei

Token

DomainPlug Membership Pass (DMP)
 

Overview

Max Total Supply

90 DMP

Holders

58

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
yungsb.eth
0xa5f146cbd3ee13f482315dd0f873c2bfbbc5f2c4
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:
DomainPlugPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 11 : Membership.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

/// @author no-op.eth (nft-lab.xyz)
/// @title DomainPlug Membership Pass
contract DomainPlugPass is ERC1155, Ownable {
  /** Name of collection */
  string public constant name = "DomainPlug Membership Pass";
  /** Symbol of collection */
  string public constant symbol = "DMP";
  /** Maximum amount of tokens in collection */
  uint256 public constant MAX_SUPPLY = 1000;
  /** Maximum amount of tokens mintable per tx */
  uint256 public constant MAX_TX = 4;
  /** Cost per mint */
  uint256 public cost = 0.25 ether;
  /** URI for the contract metadata */
  string public contractURI;
  /** Funds recipient */
  address public recipient;

  /** Total supply */
  uint256 private _supply = 0;

  /** Sale state */
  bool public saleActive = false;

  /** Notify on sale state change */
  event SaleStateChanged(bool _val);
  /** Notify on total supply change */
  event TotalSupplyChanged(uint256 _val);

  /** For URI conversions */
  using Strings for uint256;

  constructor(string memory _uri) ERC1155(_uri) {}

  /// @notice Sets public sale state
  /// @param _val The new value
  function setSaleState(bool _val) external onlyOwner {
    saleActive = _val;
    emit SaleStateChanged(_val);
  }

  /// @notice Sets cost per mint
  /// @param _val New price
  /// @dev Send in WEI
  function setCost(uint256 _val) external onlyOwner {
    cost = _val;
  }

  /// @notice Sets a new funds recipient
  /// @param _val New address
  function setRecipient(address _val) external onlyOwner {
    recipient = _val;
  }

  /// @notice Sets the base metadata URI
  /// @param _val The new URI
  function setBaseURI(string memory _val) external onlyOwner {
    _setURI(_val);
  }

  /// @notice Sets the contract metadata URI
  /// @param _val The new URI
  function setContractURI(string memory _val) external onlyOwner {
    contractURI = _val;
  }

  /// @notice Returns the amount of tokens sold
  /// @return supply The number of tokens sold
  function totalSupply() public view returns (uint256) {
    return _supply;
  }

  /// @notice Returns the URI for a given token ID
  /// @param _id The ID to return URI for
  /// @return Token URI
  function uri(uint256 _id) public view override returns (string memory) {
    return string(abi.encodePacked(super.uri(_id), _id.toString()));
  }

  /// @notice Withdraws contract funds
  function withdraw() public payable onlyOwner {
    payable(recipient).transfer(address(this).balance);
  }

  /// @notice Reserves a set of NFTs for collection owner (giveaways, etc)
  /// @param _amt The amount to reserve
  function reserve(uint256 _amt) external onlyOwner {
    require(_supply + _amt <= MAX_SUPPLY, "Amount exceeds supply.");

    _supply += _amt;
    _mint(msg.sender, 0, _amt, "0x0000");

    emit TotalSupplyChanged(totalSupply());
  }

  /// @notice Mints a new token in public sale
  /// @param _quantity Amount to be minted
  /// @dev Must send COST * amt in wei
  function mint(uint256 _quantity) external payable {
    require(saleActive, "Sale is not yet active.");
    require(_quantity <= MAX_TX, "Amount of tokens exceeds transaction limit.");
    require(_supply + _quantity <= MAX_SUPPLY, "Amount exceeds supply.");
    require(cost * _quantity == msg.value, "ETH sent not equal to cost.");

    _supply += _quantity;
    _mint(msg.sender, 0, _quantity, "0x0000");

    emit TotalSupplyChanged(totalSupply());
  }
}

File 2 of 11 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.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: address zero is not a valid owner");
        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 token 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: caller is not token 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

        _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);

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _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);

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

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

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * 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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

        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);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * 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);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {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 `ids` and `amounts` 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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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 3 of 11 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.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 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 4 of 11 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 5 of 11 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.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.
     *
     * NOTE: 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.
     *
     * NOTE: 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 6 of 11 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 7 of 11 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 8 of 11 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 9 of 11 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 10 of 11 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 11 of 11 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

Settings
{
  "metadata": {
    "useLiteralContent": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_uri","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":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":"bool","name":"_val","type":"bool"}],"name":"SaleStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_val","type":"uint256"}],"name":"TotalSupplyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"reserve","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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_val","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_val","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_val","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_val","type":"address"}],"name":"setRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_val","type":"bool"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526703782dace9d9000060045560006007556000600860006101000a81548160ff0219169083151502179055503480156200003d57600080fd5b5060405162004068380380620040688339818101604052810190620000639190620002b5565b8062000075816200009d60201b60201c565b50620000966200008a620000b960201b60201c565b620000c160201b60201c565b506200048a565b8060029080519060200190620000b592919062000187565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000195906200039b565b90600052602060002090601f016020900481019282620001b9576000855562000205565b82601f10620001d457805160ff191683800117855562000205565b8280016001018555821562000205579182015b8281111562000204578251825591602001919060010190620001e7565b5b50905062000214919062000218565b5090565b5b808211156200023357600081600090555060010162000219565b5090565b60006200024e62000248846200032f565b62000306565b9050828152602081018484840111156200026d576200026c6200046a565b5b6200027a84828562000365565b509392505050565b600082601f8301126200029a576200029962000465565b5b8151620002ac84826020860162000237565b91505092915050565b600060208284031215620002ce57620002cd62000474565b5b600082015167ffffffffffffffff811115620002ef57620002ee6200046f565b5b620002fd8482850162000282565b91505092915050565b60006200031262000325565b9050620003208282620003d1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200034d576200034c62000436565b5b620003588262000479565b9050602081019050919050565b60005b838110156200038557808201518184015260208101905062000368565b8381111562000395576000848401525b50505050565b60006002820490506001821680620003b457607f821691505b60208210811415620003cb57620003ca62000407565b5b50919050565b620003dc8262000479565b810181811067ffffffffffffffff82111715620003fe57620003fd62000436565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613bce806200049a6000396000f3fe6080604052600436106101b65760003560e01c806368428a1b116100ec578063a22cb4651161008a578063e985e9c511610064578063e985e9c5146105b7578063f242432a146105f4578063f2fde38b1461061d578063f3b2db3f14610646576101b6565b8063a22cb4651461053a578063c4e3709514610563578063e8a3d4851461058c576101b6565b80638da5cb5b116100c65780638da5cb5b1461049f578063938e3d7b146104ca57806395d89b41146104f3578063a0712d681461051e576101b6565b806368428a1b14610434578063715018a61461045f578063819b25ba14610476576101b6565b806332cb6b0c1161015957806344a0d68a1161013357806344a0d68a1461037a5780634e1273f4146103a357806355f804b3146103e057806366d003ac14610409576101b6565b806332cb6b0c1461031c5780633bbed4a0146103475780633ccfd60b14610370576101b6565b80630e89341c116101955780630e89341c1461026057806313faede61461029d57806318160ddd146102c85780632eb2c2d6146102f3576101b6565b8062fdd58e146101bb57806301ffc9a7146101f857806306fdde0314610235575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd91906127f2565b610671565b6040516101ef91906130c3565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a91906128d7565b61073a565b60405161022c9190612e86565b60405180910390f35b34801561024157600080fd5b5061024a61081c565b6040516102579190612ea1565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061297a565b610855565b6040516102949190612ea1565b60405180910390f35b3480156102a957600080fd5b506102b2610890565b6040516102bf91906130c3565b60405180910390f35b3480156102d457600080fd5b506102dd610896565b6040516102ea91906130c3565b60405180910390f35b3480156102ff57600080fd5b5061031a6004803603810190610315919061264c565b6108a0565b005b34801561032857600080fd5b50610331610941565b60405161033e91906130c3565b60405180910390f35b34801561035357600080fd5b5061036e600480360381019061036991906125df565b610947565b005b610378610993565b005b34801561038657600080fd5b506103a1600480360381019061039c919061297a565b610a06565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190612832565b610a18565b6040516103d79190612e2d565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190612931565b610b31565b005b34801561041557600080fd5b5061041e610b45565b60405161042b9190612d50565b60405180910390f35b34801561044057600080fd5b50610449610b6b565b6040516104569190612e86565b60405180910390f35b34801561046b57600080fd5b50610474610b7e565b005b34801561048257600080fd5b5061049d6004803603810190610498919061297a565b610b92565b005b3480156104ab57600080fd5b506104b4610c88565b6040516104c19190612d50565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612931565b610cb2565b005b3480156104ff57600080fd5b50610508610cd4565b6040516105159190612ea1565b60405180910390f35b6105386004803603810190610533919061297a565b610d0d565b005b34801561054657600080fd5b50610561600480360381019061055c91906127b2565b610edd565b005b34801561056f57600080fd5b5061058a600480360381019061058591906128aa565b610ef3565b005b34801561059857600080fd5b506105a1610f4f565b6040516105ae9190612ea1565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d9919061260c565b610fdd565b6040516105eb9190612e86565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061271b565b611071565b005b34801561062957600080fd5b50610644600480360381019061063f91906125df565b611112565b005b34801561065257600080fd5b5061065b611196565b60405161066891906130c3565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d990612f63565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081557506108148261119b565b5b9050919050565b6040518060400160405280601a81526020017f446f6d61696e506c7567204d656d62657273686970205061737300000000000081525081565b606061086082611205565b61086983611299565b60405160200161087a929190612d2c565b6040516020818303038152906040529050919050565b60045481565b6000600754905090565b6108a86113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108ee57506108ed856108e86113fa565b610fdd565b5b61092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490612ee3565b60405180910390fd5b61093a8585858585611402565b5050505050565b6103e881565b61094f611724565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61099b611724565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610a03573d6000803e3d6000fd5b50565b610a0e611724565b8060048190555050565b60608151835114610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590613063565b60405180910390fd5b6000835167ffffffffffffffff811115610a7b57610a7a6135c6565b5b604051908082528060200260200182016040528015610aa95781602001602082028036833780820191505090505b50905060005b8451811015610b2657610af6858281518110610ace57610acd613597565b5b6020026020010151858381518110610ae957610ae8613597565b5b6020026020010151610671565b828281518110610b0957610b08613597565b5b60200260200101818152505080610b1f90613490565b9050610aaf565b508091505092915050565b610b39611724565b610b42816117a2565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff1681565b610b86611724565b610b9060006117bc565b565b610b9a611724565b6103e881600754610bab9190613262565b1115610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612f83565b60405180910390fd5b8060076000828254610bfe9190613262565b92505081905550610c47336000836040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611882565b7fc8b17f75f53401f272e9ee7fa431e81ba33779363238896180425a422420c8f7610c70610896565b604051610c7d91906130c3565b60405180910390a150565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610cba611724565b8060059080519060200190610cd09291906122b7565b5050565b6040518060400160405280600381526020017f444d50000000000000000000000000000000000000000000000000000000000081525081565b600860009054906101000a900460ff16610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613003565b60405180910390fd5b6004811115610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613023565b60405180910390fd5b6103e881600754610db19190613262565b1115610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990612f83565b60405180910390fd5b3481600454610e0191906132e9565b14610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890612f23565b60405180910390fd5b8060076000828254610e539190613262565b92505081905550610e9c336000836040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611882565b7fc8b17f75f53401f272e9ee7fa431e81ba33779363238896180425a422420c8f7610ec5610896565b604051610ed291906130c3565b60405180910390a150565b610eef610ee86113fa565b8383611a33565b5050565b610efb611724565b80600860006101000a81548160ff0219169083151502179055507fe333f8a36ee86e754548af2d6f50c73ff0d501e22e6c784662123dbbe493c60281604051610f449190612e86565b60405180910390a150565b60058054610f5c9061342d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f889061342d565b8015610fd55780601f10610faa57610100808354040283529160200191610fd5565b820191906000526020600020905b815481529060010190602001808311610fb857829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110796113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110bf57506110be856110b96113fa565b610fdd565b5b6110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612ee3565b60405180910390fd5b61110b8585858585611ba0565b5050505050565b61111a611724565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190612f43565b60405180910390fd5b611193816117bc565b50565b600481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600280546112149061342d565b80601f01602080910402602001604051908101604052809291908181526020018280546112409061342d565b801561128d5780601f106112625761010080835404028352916020019161128d565b820191906000526020600020905b81548152906001019060200180831161127057829003601f168201915b50505050509050919050565b606060008214156112e1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506113f5565b600082905060005b600082146113135780806112fc90613490565b915050600a8261130c91906132b8565b91506112e9565b60008167ffffffffffffffff81111561132f5761132e6135c6565b5b6040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b5090505b600085146113ee5760018261137a9190613343565b9150600a8561138991906134d9565b60306113959190613262565b60f81b8183815181106113ab576113aa613597565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856113e791906132b8565b9450611365565b8093505050505b919050565b600033905090565b8151835114611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90613083565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612fa3565b60405180910390fd5b60006114c06113fa565b90506114d0818787878787611e3c565b60005b84518110156116815760008582815181106114f1576114f0613597565b5b6020026020010151905060008583815181106115105761150f613597565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612fc3565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116669190613262565b925050819055505050508061167a90613490565b90506114d3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116f8929190612e4f565b60405180910390a461170e818787878787611e44565b61171c818787878787611e4c565b505050505050565b61172c6113fa565b73ffffffffffffffffffffffffffffffffffffffff1661174a610c88565b73ffffffffffffffffffffffffffffffffffffffff16146117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790612fe3565b60405180910390fd5b565b80600290805190602001906117b89291906122b7565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e9906130a3565b60405180910390fd5b60006118fc6113fa565b9050600061190985612033565b9050600061191685612033565b905061192783600089858589611e3c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119869190613262565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611a049291906130de565b60405180910390a4611a1b83600089858589611e44565b611a2a836000898989896120ad565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990613043565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b939190612e86565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790612fa3565b60405180910390fd5b6000611c1a6113fa565b90506000611c2785612033565b90506000611c3485612033565b9050611c44838989858589611e3c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290612fc3565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d909190613262565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e0d9291906130de565b60405180910390a4611e23848a8a86868a611e44565b611e31848a8a8a8a8a6120ad565b505050505050505050565b505050505050565b505050505050565b611e6b8473ffffffffffffffffffffffffffffffffffffffff16612294565b1561202b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611eb1959493929190612d6b565b602060405180830381600087803b158015611ecb57600080fd5b505af1925050508015611efc57506040513d601f19601f82011682018060405250810190611ef99190612904565b60015b611fa257611f086135f5565b806308c379a01415611f655750611f1d613aa6565b80611f285750611f67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c9190612ea1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990612ec3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090612f03565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612052576120516135c6565b5b6040519080825280602002602001820160405280156120805781602001602082028036833780820191505090505b509050828160008151811061209857612097613597565b5b60200260200101818152505080915050919050565b6120cc8473ffffffffffffffffffffffffffffffffffffffff16612294565b1561228c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612112959493929190612dd3565b602060405180830381600087803b15801561212c57600080fd5b505af192505050801561215d57506040513d601f19601f8201168201806040525081019061215a9190612904565b60015b612203576121696135f5565b806308c379a014156121c6575061217e613aa6565b8061218957506121c8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bd9190612ea1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90612ec3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190612f03565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122c39061342d565b90600052602060002090601f0160209004810192826122e5576000855561232c565b82601f106122fe57805160ff191683800117855561232c565b8280016001018555821561232c579182015b8281111561232b578251825591602001919060010190612310565b5b509050612339919061233d565b5090565b5b8082111561235657600081600090555060010161233e565b5090565b600061236d6123688461312c565b613107565b905080838252602082019050828560208602820111156123905761238f61361c565b5b60005b858110156123c057816123a688826124be565b845260208401935060208301925050600181019050612393565b5050509392505050565b60006123dd6123d884613158565b613107565b90508083825260208201905082856020860282011115612400576123ff61361c565b5b60005b85811015612430578161241688826125ca565b845260208401935060208301925050600181019050612403565b5050509392505050565b600061244d61244884613184565b613107565b90508281526020810184848401111561246957612468613621565b5b6124748482856133eb565b509392505050565b600061248f61248a846131b5565b613107565b9050828152602081018484840111156124ab576124aa613621565b5b6124b68482856133eb565b509392505050565b6000813590506124cd81613b3c565b92915050565b600082601f8301126124e8576124e7613617565b5b81356124f884826020860161235a565b91505092915050565b600082601f83011261251657612515613617565b5b81356125268482602086016123ca565b91505092915050565b60008135905061253e81613b53565b92915050565b60008135905061255381613b6a565b92915050565b60008151905061256881613b6a565b92915050565b600082601f83011261258357612582613617565b5b813561259384826020860161243a565b91505092915050565b600082601f8301126125b1576125b0613617565b5b81356125c184826020860161247c565b91505092915050565b6000813590506125d981613b81565b92915050565b6000602082840312156125f5576125f461362b565b5b6000612603848285016124be565b91505092915050565b600080604083850312156126235761262261362b565b5b6000612631858286016124be565b9250506020612642858286016124be565b9150509250929050565b600080600080600060a086880312156126685761266761362b565b5b6000612676888289016124be565b9550506020612687888289016124be565b945050604086013567ffffffffffffffff8111156126a8576126a7613626565b5b6126b488828901612501565b935050606086013567ffffffffffffffff8111156126d5576126d4613626565b5b6126e188828901612501565b925050608086013567ffffffffffffffff81111561270257612701613626565b5b61270e8882890161256e565b9150509295509295909350565b600080600080600060a086880312156127375761273661362b565b5b6000612745888289016124be565b9550506020612756888289016124be565b9450506040612767888289016125ca565b9350506060612778888289016125ca565b925050608086013567ffffffffffffffff81111561279957612798613626565b5b6127a58882890161256e565b9150509295509295909350565b600080604083850312156127c9576127c861362b565b5b60006127d7858286016124be565b92505060206127e88582860161252f565b9150509250929050565b600080604083850312156128095761280861362b565b5b6000612817858286016124be565b9250506020612828858286016125ca565b9150509250929050565b600080604083850312156128495761284861362b565b5b600083013567ffffffffffffffff81111561286757612866613626565b5b612873858286016124d3565b925050602083013567ffffffffffffffff81111561289457612893613626565b5b6128a085828601612501565b9150509250929050565b6000602082840312156128c0576128bf61362b565b5b60006128ce8482850161252f565b91505092915050565b6000602082840312156128ed576128ec61362b565b5b60006128fb84828501612544565b91505092915050565b60006020828403121561291a5761291961362b565b5b600061292884828501612559565b91505092915050565b6000602082840312156129475761294661362b565b5b600082013567ffffffffffffffff81111561296557612964613626565b5b6129718482850161259c565b91505092915050565b6000602082840312156129905761298f61362b565b5b600061299e848285016125ca565b91505092915050565b60006129b38383612d0e565b60208301905092915050565b6129c881613377565b82525050565b60006129d9826131f6565b6129e38185613224565b93506129ee836131e6565b8060005b83811015612a1f578151612a0688826129a7565b9750612a1183613217565b9250506001810190506129f2565b5085935050505092915050565b612a3581613389565b82525050565b6000612a4682613201565b612a508185613235565b9350612a608185602086016133fa565b612a6981613630565b840191505092915050565b6000612a7f8261320c565b612a898185613246565b9350612a998185602086016133fa565b612aa281613630565b840191505092915050565b6000612ab88261320c565b612ac28185613257565b9350612ad28185602086016133fa565b80840191505092915050565b6000612aeb603483613246565b9150612af68261364e565b604082019050919050565b6000612b0e602f83613246565b9150612b198261369d565b604082019050919050565b6000612b31602883613246565b9150612b3c826136ec565b604082019050919050565b6000612b54601b83613246565b9150612b5f8261373b565b602082019050919050565b6000612b77602683613246565b9150612b8282613764565b604082019050919050565b6000612b9a602a83613246565b9150612ba5826137b3565b604082019050919050565b6000612bbd601683613246565b9150612bc882613802565b602082019050919050565b6000612be0602583613246565b9150612beb8261382b565b604082019050919050565b6000612c03602a83613246565b9150612c0e8261387a565b604082019050919050565b6000612c26602083613246565b9150612c31826138c9565b602082019050919050565b6000612c49601783613246565b9150612c54826138f2565b602082019050919050565b6000612c6c602b83613246565b9150612c778261391b565b604082019050919050565b6000612c8f602983613246565b9150612c9a8261396a565b604082019050919050565b6000612cb2602983613246565b9150612cbd826139b9565b604082019050919050565b6000612cd5602883613246565b9150612ce082613a08565b604082019050919050565b6000612cf8602183613246565b9150612d0382613a57565b604082019050919050565b612d17816133e1565b82525050565b612d26816133e1565b82525050565b6000612d388285612aad565b9150612d448284612aad565b91508190509392505050565b6000602082019050612d6560008301846129bf565b92915050565b600060a082019050612d8060008301886129bf565b612d8d60208301876129bf565b8181036040830152612d9f81866129ce565b90508181036060830152612db381856129ce565b90508181036080830152612dc78184612a3b565b90509695505050505050565b600060a082019050612de860008301886129bf565b612df560208301876129bf565b612e026040830186612d1d565b612e0f6060830185612d1d565b8181036080830152612e218184612a3b565b90509695505050505050565b60006020820190508181036000830152612e4781846129ce565b905092915050565b60006040820190508181036000830152612e6981856129ce565b90508181036020830152612e7d81846129ce565b90509392505050565b6000602082019050612e9b6000830184612a2c565b92915050565b60006020820190508181036000830152612ebb8184612a74565b905092915050565b60006020820190508181036000830152612edc81612ade565b9050919050565b60006020820190508181036000830152612efc81612b01565b9050919050565b60006020820190508181036000830152612f1c81612b24565b9050919050565b60006020820190508181036000830152612f3c81612b47565b9050919050565b60006020820190508181036000830152612f5c81612b6a565b9050919050565b60006020820190508181036000830152612f7c81612b8d565b9050919050565b60006020820190508181036000830152612f9c81612bb0565b9050919050565b60006020820190508181036000830152612fbc81612bd3565b9050919050565b60006020820190508181036000830152612fdc81612bf6565b9050919050565b60006020820190508181036000830152612ffc81612c19565b9050919050565b6000602082019050818103600083015261301c81612c3c565b9050919050565b6000602082019050818103600083015261303c81612c5f565b9050919050565b6000602082019050818103600083015261305c81612c82565b9050919050565b6000602082019050818103600083015261307c81612ca5565b9050919050565b6000602082019050818103600083015261309c81612cc8565b9050919050565b600060208201905081810360008301526130bc81612ceb565b9050919050565b60006020820190506130d86000830184612d1d565b92915050565b60006040820190506130f36000830185612d1d565b6131006020830184612d1d565b9392505050565b6000613111613122565b905061311d828261345f565b919050565b6000604051905090565b600067ffffffffffffffff821115613147576131466135c6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613173576131726135c6565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561319f5761319e6135c6565b5b6131a882613630565b9050602081019050919050565b600067ffffffffffffffff8211156131d0576131cf6135c6565b5b6131d982613630565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061326d826133e1565b9150613278836133e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ad576132ac61350a565b5b828201905092915050565b60006132c3826133e1565b91506132ce836133e1565b9250826132de576132dd613539565b5b828204905092915050565b60006132f4826133e1565b91506132ff836133e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133385761333761350a565b5b828202905092915050565b600061334e826133e1565b9150613359836133e1565b92508282101561336c5761336b61350a565b5b828203905092915050565b6000613382826133c1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134185780820151818401526020810190506133fd565b83811115613427576000848401525b50505050565b6000600282049050600182168061344557607f821691505b6020821081141561345957613458613568565b5b50919050565b61346882613630565b810181811067ffffffffffffffff82111715613487576134866135c6565b5b80604052505050565b600061349b826133e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134ce576134cd61350a565b5b600182019050919050565b60006134e4826133e1565b91506134ef836133e1565b9250826134ff576134fe613539565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156136145760046000803e613611600051613641565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4554482073656e74206e6f7420657175616c20746f20636f73742e0000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206578636565647320737570706c792e00000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f7420796574206163746976652e000000000000000000600082015250565b7f416d6f756e74206f6620746f6b656e732065786365656473207472616e73616360008201527f74696f6e206c696d69742e000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613ab657613b39565b613abe613122565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ae6575050613b39565b808201805167ffffffffffffffff811115613b045750505050613b39565b80602083010160043d038501811115613b21575050505050613b39565b613b308260200185018661345f565b82955050505050505b90565b613b4581613377565b8114613b5057600080fd5b50565b613b5c81613389565b8114613b6757600080fd5b50565b613b7381613395565b8114613b7e57600080fd5b50565b613b8a816133e1565b8114613b9557600080fd5b5056fea2646970667358221220545587f62d70582f30b6f4e2854b38d2c02d400643e2f4b1605bbbc8e1a6230264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e584543346d644d3141356a355942375259354d7a4550373238426e63544e45533645636b5053513479656f2f00000000000000000000

Deployed Bytecode

0x6080604052600436106101b65760003560e01c806368428a1b116100ec578063a22cb4651161008a578063e985e9c511610064578063e985e9c5146105b7578063f242432a146105f4578063f2fde38b1461061d578063f3b2db3f14610646576101b6565b8063a22cb4651461053a578063c4e3709514610563578063e8a3d4851461058c576101b6565b80638da5cb5b116100c65780638da5cb5b1461049f578063938e3d7b146104ca57806395d89b41146104f3578063a0712d681461051e576101b6565b806368428a1b14610434578063715018a61461045f578063819b25ba14610476576101b6565b806332cb6b0c1161015957806344a0d68a1161013357806344a0d68a1461037a5780634e1273f4146103a357806355f804b3146103e057806366d003ac14610409576101b6565b806332cb6b0c1461031c5780633bbed4a0146103475780633ccfd60b14610370576101b6565b80630e89341c116101955780630e89341c1461026057806313faede61461029d57806318160ddd146102c85780632eb2c2d6146102f3576101b6565b8062fdd58e146101bb57806301ffc9a7146101f857806306fdde0314610235575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd91906127f2565b610671565b6040516101ef91906130c3565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a91906128d7565b61073a565b60405161022c9190612e86565b60405180910390f35b34801561024157600080fd5b5061024a61081c565b6040516102579190612ea1565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061297a565b610855565b6040516102949190612ea1565b60405180910390f35b3480156102a957600080fd5b506102b2610890565b6040516102bf91906130c3565b60405180910390f35b3480156102d457600080fd5b506102dd610896565b6040516102ea91906130c3565b60405180910390f35b3480156102ff57600080fd5b5061031a6004803603810190610315919061264c565b6108a0565b005b34801561032857600080fd5b50610331610941565b60405161033e91906130c3565b60405180910390f35b34801561035357600080fd5b5061036e600480360381019061036991906125df565b610947565b005b610378610993565b005b34801561038657600080fd5b506103a1600480360381019061039c919061297a565b610a06565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190612832565b610a18565b6040516103d79190612e2d565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190612931565b610b31565b005b34801561041557600080fd5b5061041e610b45565b60405161042b9190612d50565b60405180910390f35b34801561044057600080fd5b50610449610b6b565b6040516104569190612e86565b60405180910390f35b34801561046b57600080fd5b50610474610b7e565b005b34801561048257600080fd5b5061049d6004803603810190610498919061297a565b610b92565b005b3480156104ab57600080fd5b506104b4610c88565b6040516104c19190612d50565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612931565b610cb2565b005b3480156104ff57600080fd5b50610508610cd4565b6040516105159190612ea1565b60405180910390f35b6105386004803603810190610533919061297a565b610d0d565b005b34801561054657600080fd5b50610561600480360381019061055c91906127b2565b610edd565b005b34801561056f57600080fd5b5061058a600480360381019061058591906128aa565b610ef3565b005b34801561059857600080fd5b506105a1610f4f565b6040516105ae9190612ea1565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d9919061260c565b610fdd565b6040516105eb9190612e86565b60405180910390f35b34801561060057600080fd5b5061061b6004803603810190610616919061271b565b611071565b005b34801561062957600080fd5b50610644600480360381019061063f91906125df565b611112565b005b34801561065257600080fd5b5061065b611196565b60405161066891906130c3565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d990612f63565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061081557506108148261119b565b5b9050919050565b6040518060400160405280601a81526020017f446f6d61696e506c7567204d656d62657273686970205061737300000000000081525081565b606061086082611205565b61086983611299565b60405160200161087a929190612d2c565b6040516020818303038152906040529050919050565b60045481565b6000600754905090565b6108a86113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108ee57506108ed856108e86113fa565b610fdd565b5b61092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092490612ee3565b60405180910390fd5b61093a8585858585611402565b5050505050565b6103e881565b61094f611724565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61099b611724565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610a03573d6000803e3d6000fd5b50565b610a0e611724565b8060048190555050565b60608151835114610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5590613063565b60405180910390fd5b6000835167ffffffffffffffff811115610a7b57610a7a6135c6565b5b604051908082528060200260200182016040528015610aa95781602001602082028036833780820191505090505b50905060005b8451811015610b2657610af6858281518110610ace57610acd613597565b5b6020026020010151858381518110610ae957610ae8613597565b5b6020026020010151610671565b828281518110610b0957610b08613597565b5b60200260200101818152505080610b1f90613490565b9050610aaf565b508091505092915050565b610b39611724565b610b42816117a2565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900460ff1681565b610b86611724565b610b9060006117bc565b565b610b9a611724565b6103e881600754610bab9190613262565b1115610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612f83565b60405180910390fd5b8060076000828254610bfe9190613262565b92505081905550610c47336000836040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611882565b7fc8b17f75f53401f272e9ee7fa431e81ba33779363238896180425a422420c8f7610c70610896565b604051610c7d91906130c3565b60405180910390a150565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610cba611724565b8060059080519060200190610cd09291906122b7565b5050565b6040518060400160405280600381526020017f444d50000000000000000000000000000000000000000000000000000000000081525081565b600860009054906101000a900460ff16610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613003565b60405180910390fd5b6004811115610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613023565b60405180910390fd5b6103e881600754610db19190613262565b1115610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990612f83565b60405180910390fd5b3481600454610e0191906132e9565b14610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890612f23565b60405180910390fd5b8060076000828254610e539190613262565b92505081905550610e9c336000836040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611882565b7fc8b17f75f53401f272e9ee7fa431e81ba33779363238896180425a422420c8f7610ec5610896565b604051610ed291906130c3565b60405180910390a150565b610eef610ee86113fa565b8383611a33565b5050565b610efb611724565b80600860006101000a81548160ff0219169083151502179055507fe333f8a36ee86e754548af2d6f50c73ff0d501e22e6c784662123dbbe493c60281604051610f449190612e86565b60405180910390a150565b60058054610f5c9061342d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f889061342d565b8015610fd55780601f10610faa57610100808354040283529160200191610fd5565b820191906000526020600020905b815481529060010190602001808311610fb857829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110796113fa565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110bf57506110be856110b96113fa565b610fdd565b5b6110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590612ee3565b60405180910390fd5b61110b8585858585611ba0565b5050505050565b61111a611724565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190612f43565b60405180910390fd5b611193816117bc565b50565b600481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600280546112149061342d565b80601f01602080910402602001604051908101604052809291908181526020018280546112409061342d565b801561128d5780601f106112625761010080835404028352916020019161128d565b820191906000526020600020905b81548152906001019060200180831161127057829003601f168201915b50505050509050919050565b606060008214156112e1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506113f5565b600082905060005b600082146113135780806112fc90613490565b915050600a8261130c91906132b8565b91506112e9565b60008167ffffffffffffffff81111561132f5761132e6135c6565b5b6040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b5090505b600085146113ee5760018261137a9190613343565b9150600a8561138991906134d9565b60306113959190613262565b60f81b8183815181106113ab576113aa613597565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856113e791906132b8565b9450611365565b8093505050505b919050565b600033905090565b8151835114611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d90613083565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90612fa3565b60405180910390fd5b60006114c06113fa565b90506114d0818787878787611e3c565b60005b84518110156116815760008582815181106114f1576114f0613597565b5b6020026020010151905060008583815181106115105761150f613597565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612fc3565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116669190613262565b925050819055505050508061167a90613490565b90506114d3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116f8929190612e4f565b60405180910390a461170e818787878787611e44565b61171c818787878787611e4c565b505050505050565b61172c6113fa565b73ffffffffffffffffffffffffffffffffffffffff1661174a610c88565b73ffffffffffffffffffffffffffffffffffffffff16146117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790612fe3565b60405180910390fd5b565b80600290805190602001906117b89291906122b7565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e9906130a3565b60405180910390fd5b60006118fc6113fa565b9050600061190985612033565b9050600061191685612033565b905061192783600089858589611e3c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119869190613262565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611a049291906130de565b60405180910390a4611a1b83600089858589611e44565b611a2a836000898989896120ad565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990613043565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b939190612e86565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790612fa3565b60405180910390fd5b6000611c1a6113fa565b90506000611c2785612033565b90506000611c3485612033565b9050611c44838989858589611e3c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290612fc3565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d909190613262565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611e0d9291906130de565b60405180910390a4611e23848a8a86868a611e44565b611e31848a8a8a8a8a6120ad565b505050505050505050565b505050505050565b505050505050565b611e6b8473ffffffffffffffffffffffffffffffffffffffff16612294565b1561202b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611eb1959493929190612d6b565b602060405180830381600087803b158015611ecb57600080fd5b505af1925050508015611efc57506040513d601f19601f82011682018060405250810190611ef99190612904565b60015b611fa257611f086135f5565b806308c379a01415611f655750611f1d613aa6565b80611f285750611f67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c9190612ea1565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990612ec3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202090612f03565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612052576120516135c6565b5b6040519080825280602002602001820160405280156120805781602001602082028036833780820191505090505b509050828160008151811061209857612097613597565b5b60200260200101818152505080915050919050565b6120cc8473ffffffffffffffffffffffffffffffffffffffff16612294565b1561228c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612112959493929190612dd3565b602060405180830381600087803b15801561212c57600080fd5b505af192505050801561215d57506040513d601f19601f8201168201806040525081019061215a9190612904565b60015b612203576121696135f5565b806308c379a014156121c6575061217e613aa6565b8061218957506121c8565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bd9190612ea1565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90612ec3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190612f03565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122c39061342d565b90600052602060002090601f0160209004810192826122e5576000855561232c565b82601f106122fe57805160ff191683800117855561232c565b8280016001018555821561232c579182015b8281111561232b578251825591602001919060010190612310565b5b509050612339919061233d565b5090565b5b8082111561235657600081600090555060010161233e565b5090565b600061236d6123688461312c565b613107565b905080838252602082019050828560208602820111156123905761238f61361c565b5b60005b858110156123c057816123a688826124be565b845260208401935060208301925050600181019050612393565b5050509392505050565b60006123dd6123d884613158565b613107565b90508083825260208201905082856020860282011115612400576123ff61361c565b5b60005b85811015612430578161241688826125ca565b845260208401935060208301925050600181019050612403565b5050509392505050565b600061244d61244884613184565b613107565b90508281526020810184848401111561246957612468613621565b5b6124748482856133eb565b509392505050565b600061248f61248a846131b5565b613107565b9050828152602081018484840111156124ab576124aa613621565b5b6124b68482856133eb565b509392505050565b6000813590506124cd81613b3c565b92915050565b600082601f8301126124e8576124e7613617565b5b81356124f884826020860161235a565b91505092915050565b600082601f83011261251657612515613617565b5b81356125268482602086016123ca565b91505092915050565b60008135905061253e81613b53565b92915050565b60008135905061255381613b6a565b92915050565b60008151905061256881613b6a565b92915050565b600082601f83011261258357612582613617565b5b813561259384826020860161243a565b91505092915050565b600082601f8301126125b1576125b0613617565b5b81356125c184826020860161247c565b91505092915050565b6000813590506125d981613b81565b92915050565b6000602082840312156125f5576125f461362b565b5b6000612603848285016124be565b91505092915050565b600080604083850312156126235761262261362b565b5b6000612631858286016124be565b9250506020612642858286016124be565b9150509250929050565b600080600080600060a086880312156126685761266761362b565b5b6000612676888289016124be565b9550506020612687888289016124be565b945050604086013567ffffffffffffffff8111156126a8576126a7613626565b5b6126b488828901612501565b935050606086013567ffffffffffffffff8111156126d5576126d4613626565b5b6126e188828901612501565b925050608086013567ffffffffffffffff81111561270257612701613626565b5b61270e8882890161256e565b9150509295509295909350565b600080600080600060a086880312156127375761273661362b565b5b6000612745888289016124be565b9550506020612756888289016124be565b9450506040612767888289016125ca565b9350506060612778888289016125ca565b925050608086013567ffffffffffffffff81111561279957612798613626565b5b6127a58882890161256e565b9150509295509295909350565b600080604083850312156127c9576127c861362b565b5b60006127d7858286016124be565b92505060206127e88582860161252f565b9150509250929050565b600080604083850312156128095761280861362b565b5b6000612817858286016124be565b9250506020612828858286016125ca565b9150509250929050565b600080604083850312156128495761284861362b565b5b600083013567ffffffffffffffff81111561286757612866613626565b5b612873858286016124d3565b925050602083013567ffffffffffffffff81111561289457612893613626565b5b6128a085828601612501565b9150509250929050565b6000602082840312156128c0576128bf61362b565b5b60006128ce8482850161252f565b91505092915050565b6000602082840312156128ed576128ec61362b565b5b60006128fb84828501612544565b91505092915050565b60006020828403121561291a5761291961362b565b5b600061292884828501612559565b91505092915050565b6000602082840312156129475761294661362b565b5b600082013567ffffffffffffffff81111561296557612964613626565b5b6129718482850161259c565b91505092915050565b6000602082840312156129905761298f61362b565b5b600061299e848285016125ca565b91505092915050565b60006129b38383612d0e565b60208301905092915050565b6129c881613377565b82525050565b60006129d9826131f6565b6129e38185613224565b93506129ee836131e6565b8060005b83811015612a1f578151612a0688826129a7565b9750612a1183613217565b9250506001810190506129f2565b5085935050505092915050565b612a3581613389565b82525050565b6000612a4682613201565b612a508185613235565b9350612a608185602086016133fa565b612a6981613630565b840191505092915050565b6000612a7f8261320c565b612a898185613246565b9350612a998185602086016133fa565b612aa281613630565b840191505092915050565b6000612ab88261320c565b612ac28185613257565b9350612ad28185602086016133fa565b80840191505092915050565b6000612aeb603483613246565b9150612af68261364e565b604082019050919050565b6000612b0e602f83613246565b9150612b198261369d565b604082019050919050565b6000612b31602883613246565b9150612b3c826136ec565b604082019050919050565b6000612b54601b83613246565b9150612b5f8261373b565b602082019050919050565b6000612b77602683613246565b9150612b8282613764565b604082019050919050565b6000612b9a602a83613246565b9150612ba5826137b3565b604082019050919050565b6000612bbd601683613246565b9150612bc882613802565b602082019050919050565b6000612be0602583613246565b9150612beb8261382b565b604082019050919050565b6000612c03602a83613246565b9150612c0e8261387a565b604082019050919050565b6000612c26602083613246565b9150612c31826138c9565b602082019050919050565b6000612c49601783613246565b9150612c54826138f2565b602082019050919050565b6000612c6c602b83613246565b9150612c778261391b565b604082019050919050565b6000612c8f602983613246565b9150612c9a8261396a565b604082019050919050565b6000612cb2602983613246565b9150612cbd826139b9565b604082019050919050565b6000612cd5602883613246565b9150612ce082613a08565b604082019050919050565b6000612cf8602183613246565b9150612d0382613a57565b604082019050919050565b612d17816133e1565b82525050565b612d26816133e1565b82525050565b6000612d388285612aad565b9150612d448284612aad565b91508190509392505050565b6000602082019050612d6560008301846129bf565b92915050565b600060a082019050612d8060008301886129bf565b612d8d60208301876129bf565b8181036040830152612d9f81866129ce565b90508181036060830152612db381856129ce565b90508181036080830152612dc78184612a3b565b90509695505050505050565b600060a082019050612de860008301886129bf565b612df560208301876129bf565b612e026040830186612d1d565b612e0f6060830185612d1d565b8181036080830152612e218184612a3b565b90509695505050505050565b60006020820190508181036000830152612e4781846129ce565b905092915050565b60006040820190508181036000830152612e6981856129ce565b90508181036020830152612e7d81846129ce565b90509392505050565b6000602082019050612e9b6000830184612a2c565b92915050565b60006020820190508181036000830152612ebb8184612a74565b905092915050565b60006020820190508181036000830152612edc81612ade565b9050919050565b60006020820190508181036000830152612efc81612b01565b9050919050565b60006020820190508181036000830152612f1c81612b24565b9050919050565b60006020820190508181036000830152612f3c81612b47565b9050919050565b60006020820190508181036000830152612f5c81612b6a565b9050919050565b60006020820190508181036000830152612f7c81612b8d565b9050919050565b60006020820190508181036000830152612f9c81612bb0565b9050919050565b60006020820190508181036000830152612fbc81612bd3565b9050919050565b60006020820190508181036000830152612fdc81612bf6565b9050919050565b60006020820190508181036000830152612ffc81612c19565b9050919050565b6000602082019050818103600083015261301c81612c3c565b9050919050565b6000602082019050818103600083015261303c81612c5f565b9050919050565b6000602082019050818103600083015261305c81612c82565b9050919050565b6000602082019050818103600083015261307c81612ca5565b9050919050565b6000602082019050818103600083015261309c81612cc8565b9050919050565b600060208201905081810360008301526130bc81612ceb565b9050919050565b60006020820190506130d86000830184612d1d565b92915050565b60006040820190506130f36000830185612d1d565b6131006020830184612d1d565b9392505050565b6000613111613122565b905061311d828261345f565b919050565b6000604051905090565b600067ffffffffffffffff821115613147576131466135c6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613173576131726135c6565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561319f5761319e6135c6565b5b6131a882613630565b9050602081019050919050565b600067ffffffffffffffff8211156131d0576131cf6135c6565b5b6131d982613630565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061326d826133e1565b9150613278836133e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132ad576132ac61350a565b5b828201905092915050565b60006132c3826133e1565b91506132ce836133e1565b9250826132de576132dd613539565b5b828204905092915050565b60006132f4826133e1565b91506132ff836133e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133385761333761350a565b5b828202905092915050565b600061334e826133e1565b9150613359836133e1565b92508282101561336c5761336b61350a565b5b828203905092915050565b6000613382826133c1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134185780820151818401526020810190506133fd565b83811115613427576000848401525b50505050565b6000600282049050600182168061344557607f821691505b6020821081141561345957613458613568565b5b50919050565b61346882613630565b810181811067ffffffffffffffff82111715613487576134866135c6565b5b80604052505050565b600061349b826133e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134ce576134cd61350a565b5b600182019050919050565b60006134e4826133e1565b91506134ef836133e1565b9250826134ff576134fe613539565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156136145760046000803e613611600051613641565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4554482073656e74206e6f7420657175616c20746f20636f73742e0000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206578636565647320737570706c792e00000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f7420796574206163746976652e000000000000000000600082015250565b7f416d6f756e74206f6620746f6b656e732065786365656473207472616e73616360008201527f74696f6e206c696d69742e000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613ab657613b39565b613abe613122565b60043d036004823e80513d602482011167ffffffffffffffff82111715613ae6575050613b39565b808201805167ffffffffffffffff811115613b045750505050613b39565b80602083010160043d038501811115613b21575050505050613b39565b613b308260200185018661345f565b82955050505050505b90565b613b4581613377565b8114613b5057600080fd5b50565b613b5c81613389565b8114613b6757600080fd5b50565b613b7381613395565b8114613b7e57600080fd5b50565b613b8a816133e1565b8114613b9557600080fd5b5056fea2646970667358221220545587f62d70582f30b6f4e2854b38d2c02d400643e2f4b1605bbbc8e1a6230264736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e584543346d644d3141356a355942375259354d7a4550373238426e63544e45533645636b5053513479656f2f00000000000000000000

-----Decoded View---------------
Arg [0] : _uri (string): ipfs://QmNXEC4mdM1A5j5YB7RY5MzEP728BncTNES6EckPSQ4yeo/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d4e584543346d644d3141356a355942375259354d7a4550
Arg [3] : 373238426e63544e45533645636b5053513479656f2f00000000000000000000


Deployed Bytecode Sourcemap

304:3310:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:227:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;380:58:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2377:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;717:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2178:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4065:427:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;561:41:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2565:106;;;:::i;:::-;;1521:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2569:508:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1825:83:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;846:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;949:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:1;;;;;;;;;;;;;:::i;:::-;;2790:233:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:85:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1987:92:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;472:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3156:456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3145:153:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1320:113:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;792:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3365:166:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3598:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2081:198:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;656:34:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2185:227:2;2271:7;2317:1;2298:21;;:7;:21;;;;2290:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2383:9;:13;2393:2;2383:13;;;;;;;;;;;:22;2397:7;2383:22;;;;;;;;;;;;;;;;2376:29;;2185:227;;;;:::o;1236:305::-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;380:58:0:-;;;;;;;;;;;;;;;;;;;:::o;2377:145::-;2433:13;2485:14;2495:3;2485:9;:14::i;:::-;2501;:3;:12;:14::i;:::-;2468:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2454:63;;2377:145;;;:::o;717:32::-;;;;:::o;2178:78::-;2222:7;2244;;2237:14;;2178:78;:::o;4065:427:2:-;4298:12;:10;:12::i;:::-;4290:20;;:4;:20;;;:60;;;;4314:36;4331:4;4337:12;:10;:12::i;:::-;4314:16;:36::i;:::-;4290:60;4269:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;4433:52;4456:4;4462:2;4466:3;4471:7;4480:4;4433:22;:52::i;:::-;4065:427;;;;;:::o;561:41:0:-;598:4;561:41;:::o;1668:82::-;1094:13:1;:11;:13::i;:::-;1741:4:0::1;1729:9;;:16;;;;;;;;;;;;;;;;;;1668:82:::0;:::o;2565:106::-;1094:13:1;:11;:13::i;:::-;2624:9:0::1;;;;;;;;;;;2616:27;;:50;2644:21;2616:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2565:106::o:0;1521:72::-;1094:13:1;:11;:13::i;:::-;1584:4:0::1;1577;:11;;;;1521:72:::0;:::o;2569:508:2:-;2720:16;2779:3;:10;2760:8;:15;:29;2752:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:30;2893:8;:15;2879:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2846:63;;2925:9;2920:120;2944:8;:15;2940:1;:19;2920:120;;;2999:30;3009:8;3018:1;3009:11;;;;;;;;:::i;:::-;;;;;;;;3022:3;3026:1;3022:6;;;;;;;;:::i;:::-;;;;;;;;2999:9;:30::i;:::-;2980:13;2994:1;2980:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2961:3;;;;:::i;:::-;;;2920:120;;;;3057:13;3050:20;;;2569:508;;;;:::o;1825:83:0:-;1094:13:1;:11;:13::i;:::-;1890::0::1;1898:4;1890:7;:13::i;:::-;1825:83:::0;:::o;846:24::-;;;;;;;;;;;;;:::o;949:30::-;;;;;;;;;;;;;:::o;1831:101:1:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;2790:233:0:-;1094:13:1;:11;:13::i;:::-;598:4:0::1;2864;2854:7;;:14;;;;:::i;:::-;:28;;2846:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2927:4;2916:7;;:15;;;;;;;:::i;:::-;;;;;;;;2937:36;2943:10;2955:1;2958:4;2937:36;;;;;;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;2985:33;3004:13;:11;:13::i;:::-;2985:33;;;;;;:::i;:::-;;;;;;;;2790:233:::0;:::o;1201:85:1:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;1987:92:0:-;1094:13:1;:11;:13::i;:::-;2070:4:0::1;2056:11;:18;;;;;;;;;;;;:::i;:::-;;1987:92:::0;:::o;472:37::-;;;;;;;;;;;;;;;;;;;:::o;3156:456::-;3220:10;;;;;;;;;;;3212:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;689:1;3272:9;:19;;3264:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;598:4;3363:9;3353:7;;:19;;;;:::i;:::-;:33;;3345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3447:9;3434;3427:4;;:16;;;;:::i;:::-;:29;3419:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3506:9;3495:7;;:20;;;;;;;:::i;:::-;;;;;;;;3521:41;3527:10;3539:1;3542:9;3521:41;;;;;;;;;;;;;;;;;:5;:41::i;:::-;3574:33;3593:13;:11;:13::i;:::-;3574:33;;;;;;:::i;:::-;;;;;;;;3156:456;:::o;3145:153:2:-;3239:52;3258:12;:10;:12::i;:::-;3272:8;3282;3239:18;:52::i;:::-;3145:153;;:::o;1320:113:0:-;1094:13:1;:11;:13::i;:::-;1391:4:0::1;1378:10;;:17;;;;;;;;;;;;;;;;;;1406:22;1423:4;1406:22;;;;;;:::i;:::-;;;;;;;;1320:113:::0;:::o;792:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3365:166:2:-;3464:4;3487:18;:27;3506:7;3487:27;;;;;;;;;;;;;;;:37;3515:8;3487:37;;;;;;;;;;;;;;;;;;;;;;;;;3480:44;;3365:166;;;;:::o;3598:395::-;3806:12;:10;:12::i;:::-;3798:20;;:4;:20;;;:60;;;;3822:36;3839:4;3845:12;:10;:12::i;:::-;3822:16;:36::i;:::-;3798:60;3777:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;3941:45;3959:4;3965:2;3969;3973:6;3981:4;3941:17;:45::i;:::-;3598:395;;;;;:::o;2081:198:1:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;656:34:0:-;689:1;656:34;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;1940:103:2:-;2000:13;2032:4;2025:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1940:103;;;:::o;392:703:8:-;448:13;674:1;665:5;:10;661:51;;;691:10;;;;;;;;;;;;;;;;;;;;;661:51;721:12;736:5;721:20;;751:14;775:75;790:1;782:4;:9;775:75;;807:8;;;;;:::i;:::-;;;;837:2;829:10;;;;;:::i;:::-;;;775:75;;;859:19;891:6;881:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;859:39;;908:150;924:1;915:5;:10;908:150;;951:1;941:11;;;;;:::i;:::-;;;1017:2;1009:5;:10;;;;:::i;:::-;996:2;:24;;;;:::i;:::-;983:39;;966:6;973;966:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1045:2;1036:11;;;;;:::i;:::-;;;908:150;;;1081:6;1067:21;;;;;392:703;;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;6235:1115:2:-;6455:7;:14;6441:3;:10;:28;6433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6546:1;6532:16;;:2;:16;;;;6524:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6601:16;6620:12;:10;:12::i;:::-;6601:31;;6643:60;6664:8;6674:4;6680:2;6684:3;6689:7;6698:4;6643:20;:60::i;:::-;6719:9;6714:411;6738:3;:10;6734:1;:14;6714:411;;;6769:10;6782:3;6786:1;6782:6;;;;;;;;:::i;:::-;;;;;;;;6769:19;;6802:14;6819:7;6827:1;6819:10;;;;;;;;:::i;:::-;;;;;;;;6802:27;;6844:19;6866:9;:13;6876:2;6866:13;;;;;;;;;;;:19;6880:4;6866:19;;;;;;;;;;;;;;;;6844:41;;6922:6;6907:11;:21;;6899:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7053:6;7039:11;:20;7017:9;:13;7027:2;7017:13;;;;;;;;;;;:19;7031:4;7017:19;;;;;;;;;;;;;;;:42;;;;7108:6;7087:9;:13;7097:2;7087:13;;;;;;;;;;;:17;7101:2;7087:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6755:370;;;6750:3;;;;:::i;:::-;;;6714:411;;;;7170:2;7140:47;;7164:4;7140:47;;7154:8;7140:47;;;7174:3;7179:7;7140:47;;;;;;;:::i;:::-;;;;;;;;7198:59;7218:8;7228:4;7234:2;7238:3;7243:7;7252:4;7198:19;:59::i;:::-;7268:75;7304:8;7314:4;7320:2;7324:3;7329:7;7338:4;7268:35;:75::i;:::-;6423:927;6235:1115;;;;;:::o;1359:130:1:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;8173:86:2:-;8246:6;8239:4;:13;;;;;;;;;;;;:::i;:::-;;8173:86;:::o;2433:187:1:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;8632:709:2:-;8793:1;8779:16;;:2;:16;;;;8771:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8844:16;8863:12;:10;:12::i;:::-;8844:31;;8885:20;8908:21;8926:2;8908:17;:21::i;:::-;8885:44;;8939:24;8966:25;8984:6;8966:17;:25::i;:::-;8939:52;;9002:66;9023:8;9041:1;9045:2;9049:3;9054:7;9063:4;9002:20;:66::i;:::-;9100:6;9079:9;:13;9089:2;9079:13;;;;;;;;;;;:17;9093:2;9079:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9158:2;9121:52;;9154:1;9121:52;;9136:8;9121:52;;;9162:2;9166:6;9121:52;;;;;;;:::i;:::-;;;;;;;;9184:65;9204:8;9222:1;9226:2;9230:3;9235:7;9244:4;9184:19;:65::i;:::-;9260:74;9291:8;9309:1;9313:2;9317;9321:6;9329:4;9260:30;:74::i;:::-;8761:580;;;8632:709;;;;:::o;12912:323::-;13062:8;13053:17;;:5;:17;;;;13045:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13164:8;13126:18;:25;13145:5;13126:25;;;;;;;;;;;;;;;:35;13152:8;13126:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13209:8;13187:41;;13202:5;13187:41;;;13219:8;13187:41;;;;;;:::i;:::-;;;;;;;;12912:323;;;:::o;4942:947::-;5137:1;5123:16;;:2;:16;;;;5115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5192:16;5211:12;:10;:12::i;:::-;5192:31;;5233:20;5256:21;5274:2;5256:17;:21::i;:::-;5233:44;;5287:24;5314:25;5332:6;5314:17;:25::i;:::-;5287:52;;5350:60;5371:8;5381:4;5387:2;5391:3;5396:7;5405:4;5350:20;:60::i;:::-;5421:19;5443:9;:13;5453:2;5443:13;;;;;;;;;;;:19;5457:4;5443:19;;;;;;;;;;;;;;;;5421:41;;5495:6;5480:11;:21;;5472:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5618:6;5604:11;:20;5582:9;:13;5592:2;5582:13;;;;;;;;;;;:19;5596:4;5582:19;;;;;;;;;;;;;;;:42;;;;5665:6;5644:9;:13;5654:2;5644:13;;;;;;;;;;;:17;5658:2;5644:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5718:2;5687:46;;5712:4;5687:46;;5702:8;5687:46;;;5722:2;5726:6;5687:46;;;;;;;:::i;:::-;;;;;;;;5744:59;5764:8;5774:4;5780:2;5784:3;5789:7;5798:4;5744:19;:59::i;:::-;5814:68;5845:8;5855:4;5861:2;5865;5869:6;5877:4;5814:30;:68::i;:::-;5105:784;;;;4942:947;;;;;:::o;14171:214::-;;;;;;;:::o;15318:213::-;;;;;;;:::o;16268:792::-;16500:15;:2;:13;;;:15::i;:::-;16496:558;;;16552:2;16535:43;;;16579:8;16589:4;16595:3;16600:7;16609:4;16535:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16531:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16920:6;16913:14;;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;;;16967:62;;;;;;;;;;:::i;:::-;;;;;;;;16531:513;16705:48;;;16693:60;;;:8;:60;;;;16689:157;;16777:50;;;;;;;;;;:::i;:::-;;;;;;;;16689:157;16615:245;16496:558;16268:792;;;;;;:::o;17066:193::-;17132:16;17160:22;17199:1;17185:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17160:41;;17222:7;17211:5;17217:1;17211:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17247:5;17240:12;;;17066:193;;;:::o;15537:725::-;15744:15;:2;:13;;;:15::i;:::-;15740:516;;;15796:2;15779:38;;;15818:8;15828:4;15834:2;15838:6;15846:4;15779:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15775:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;16122:6;16115:14;;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;;;16169:62;;;;;;;;;;:::i;:::-;;;;;;;;15775:471;15912:43;;;15900:55;;;:8;:55;;;;15896:152;;15979:50;;;;;;;;;;:::i;:::-;;;;;;;;15896:152;15852:210;15740:516;15537:725;;;;;;:::o;1175:320:6:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:323::-;9888:6;9937:2;9925:9;9916:7;9912:23;9908:32;9905:119;;;9943:79;;:::i;:::-;9905:119;10063:1;10088:50;10130:7;10121:6;10110:9;10106:22;10088:50;:::i;:::-;10078:60;;10034:114;9832:323;;;;:::o;10161:327::-;10219:6;10268:2;10256:9;10247:7;10243:23;10239:32;10236:119;;;10274:79;;:::i;:::-;10236:119;10394:1;10419:52;10463:7;10454:6;10443:9;10439:22;10419:52;:::i;:::-;10409:62;;10365:116;10161:327;;;;:::o;10494:349::-;10563:6;10612:2;10600:9;10591:7;10587:23;10583:32;10580:119;;;10618:79;;:::i;:::-;10580:119;10738:1;10763:63;10818:7;10809:6;10798:9;10794:22;10763:63;:::i;:::-;10753:73;;10709:127;10494:349;;;;:::o;10849:509::-;10918:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:119;;;10973:79;;:::i;:::-;10935:119;11121:1;11110:9;11106:17;11093:31;11151:18;11143:6;11140:30;11137:117;;;11173:79;;:::i;:::-;11137:117;11278:63;11333:7;11324:6;11313:9;11309:22;11278:63;:::i;:::-;11268:73;;11064:287;10849:509;;;;:::o;11364:329::-;11423:6;11472:2;11460:9;11451:7;11447:23;11443:32;11440:119;;;11478:79;;:::i;:::-;11440:119;11598:1;11623:53;11668:7;11659:6;11648:9;11644:22;11623:53;:::i;:::-;11613:63;;11569:117;11364:329;;;;:::o;11699:179::-;11768:10;11789:46;11831:3;11823:6;11789:46;:::i;:::-;11867:4;11862:3;11858:14;11844:28;;11699:179;;;;:::o;11884:118::-;11971:24;11989:5;11971:24;:::i;:::-;11966:3;11959:37;11884:118;;:::o;12038:732::-;12157:3;12186:54;12234:5;12186:54;:::i;:::-;12256:86;12335:6;12330:3;12256:86;:::i;:::-;12249:93;;12366:56;12416:5;12366:56;:::i;:::-;12445:7;12476:1;12461:284;12486:6;12483:1;12480:13;12461:284;;;12562:6;12556:13;12589:63;12648:3;12633:13;12589:63;:::i;:::-;12582:70;;12675:60;12728:6;12675:60;:::i;:::-;12665:70;;12521:224;12508:1;12505;12501:9;12496:14;;12461:284;;;12465:14;12761:3;12754:10;;12162:608;;;12038:732;;;;:::o;12776:109::-;12857:21;12872:5;12857:21;:::i;:::-;12852:3;12845:34;12776:109;;:::o;12891:360::-;12977:3;13005:38;13037:5;13005:38;:::i;:::-;13059:70;13122:6;13117:3;13059:70;:::i;:::-;13052:77;;13138:52;13183:6;13178:3;13171:4;13164:5;13160:16;13138:52;:::i;:::-;13215:29;13237:6;13215:29;:::i;:::-;13210:3;13206:39;13199:46;;12981:270;12891:360;;;;:::o;13257:364::-;13345:3;13373:39;13406:5;13373:39;:::i;:::-;13428:71;13492:6;13487:3;13428:71;:::i;:::-;13421:78;;13508:52;13553:6;13548:3;13541:4;13534:5;13530:16;13508:52;:::i;:::-;13585:29;13607:6;13585:29;:::i;:::-;13580:3;13576:39;13569:46;;13349:272;13257:364;;;;:::o;13627:377::-;13733:3;13761:39;13794:5;13761:39;:::i;:::-;13816:89;13898:6;13893:3;13816:89;:::i;:::-;13809:96;;13914:52;13959:6;13954:3;13947:4;13940:5;13936:16;13914:52;:::i;:::-;13991:6;13986:3;13982:16;13975:23;;13737:267;13627:377;;;;:::o;14010:366::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14010:366;;;:::o;14382:::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;15870:366;;;:::o;16242:::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16242:366;;;:::o;16614:::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:108::-;20039:24;20057:5;20039:24;:::i;:::-;20034:3;20027:37;19962:108;;:::o;20076:118::-;20163:24;20181:5;20163:24;:::i;:::-;20158:3;20151:37;20076:118;;:::o;20200:435::-;20380:3;20402:95;20493:3;20484:6;20402:95;:::i;:::-;20395:102;;20514:95;20605:3;20596:6;20514:95;:::i;:::-;20507:102;;20626:3;20619:10;;20200:435;;;;;:::o;20641:222::-;20734:4;20772:2;20761:9;20757:18;20749:26;;20785:71;20853:1;20842:9;20838:17;20829:6;20785:71;:::i;:::-;20641:222;;;;:::o;20869:1053::-;21192:4;21230:3;21219:9;21215:19;21207:27;;21244:71;21312:1;21301:9;21297:17;21288:6;21244:71;:::i;:::-;21325:72;21393:2;21382:9;21378:18;21369:6;21325:72;:::i;:::-;21444:9;21438:4;21434:20;21429:2;21418:9;21414:18;21407:48;21472:108;21575:4;21566:6;21472:108;:::i;:::-;21464:116;;21627:9;21621:4;21617:20;21612:2;21601:9;21597:18;21590:48;21655:108;21758:4;21749:6;21655:108;:::i;:::-;21647:116;;21811:9;21805:4;21801:20;21795:3;21784:9;21780:19;21773:49;21839:76;21910:4;21901:6;21839:76;:::i;:::-;21831:84;;20869:1053;;;;;;;;:::o;21928:751::-;22151:4;22189:3;22178:9;22174:19;22166:27;;22203:71;22271:1;22260:9;22256:17;22247:6;22203:71;:::i;:::-;22284:72;22352:2;22341:9;22337:18;22328:6;22284:72;:::i;:::-;22366;22434:2;22423:9;22419:18;22410:6;22366:72;:::i;:::-;22448;22516:2;22505:9;22501:18;22492:6;22448:72;:::i;:::-;22568:9;22562:4;22558:20;22552:3;22541:9;22537:19;22530:49;22596:76;22667:4;22658:6;22596:76;:::i;:::-;22588:84;;21928:751;;;;;;;;:::o;22685:373::-;22828:4;22866:2;22855:9;22851:18;22843:26;;22915:9;22909:4;22905:20;22901:1;22890:9;22886:17;22879:47;22943:108;23046:4;23037:6;22943:108;:::i;:::-;22935:116;;22685:373;;;;:::o;23064:634::-;23285:4;23323:2;23312:9;23308:18;23300:26;;23372:9;23366:4;23362:20;23358:1;23347:9;23343:17;23336:47;23400:108;23503:4;23494:6;23400:108;:::i;:::-;23392:116;;23555:9;23549:4;23545:20;23540:2;23529:9;23525:18;23518:48;23583:108;23686:4;23677:6;23583:108;:::i;:::-;23575:116;;23064:634;;;;;:::o;23704:210::-;23791:4;23829:2;23818:9;23814:18;23806:26;;23842:65;23904:1;23893:9;23889:17;23880:6;23842:65;:::i;:::-;23704:210;;;;:::o;23920:313::-;24033:4;24071:2;24060:9;24056:18;24048:26;;24120:9;24114:4;24110:20;24106:1;24095:9;24091:17;24084:47;24148:78;24221:4;24212:6;24148:78;:::i;:::-;24140:86;;23920:313;;;;:::o;24239:419::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:131;24646:4;24520:131;:::i;:::-;24512:139;;24239:419;;;:::o;24664:::-;24830:4;24868:2;24857:9;24853:18;24845:26;;24917:9;24911:4;24907:20;24903:1;24892:9;24888:17;24881:47;24945:131;25071:4;24945:131;:::i;:::-;24937:139;;24664:419;;;:::o;25089:::-;25255:4;25293:2;25282:9;25278:18;25270:26;;25342:9;25336:4;25332:20;25328:1;25317:9;25313:17;25306:47;25370:131;25496:4;25370:131;:::i;:::-;25362:139;;25089:419;;;:::o;25514:::-;25680:4;25718:2;25707:9;25703:18;25695:26;;25767:9;25761:4;25757:20;25753:1;25742:9;25738:17;25731:47;25795:131;25921:4;25795:131;:::i;:::-;25787:139;;25514:419;;;:::o;25939:::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;25939:419;;;:::o;26364:::-;26530:4;26568:2;26557:9;26553:18;26545:26;;26617:9;26611:4;26607:20;26603:1;26592:9;26588:17;26581:47;26645:131;26771:4;26645:131;:::i;:::-;26637:139;;26364:419;;;:::o;26789:::-;26955:4;26993:2;26982:9;26978:18;26970:26;;27042:9;27036:4;27032:20;27028:1;27017:9;27013:17;27006:47;27070:131;27196:4;27070:131;:::i;:::-;27062:139;;26789:419;;;:::o;27214:::-;27380:4;27418:2;27407:9;27403:18;27395:26;;27467:9;27461:4;27457:20;27453:1;27442:9;27438:17;27431:47;27495:131;27621:4;27495:131;:::i;:::-;27487:139;;27214:419;;;:::o;27639:::-;27805:4;27843:2;27832:9;27828:18;27820:26;;27892:9;27886:4;27882:20;27878:1;27867:9;27863:17;27856:47;27920:131;28046:4;27920:131;:::i;:::-;27912:139;;27639:419;;;:::o;28064:::-;28230:4;28268:2;28257:9;28253:18;28245:26;;28317:9;28311:4;28307:20;28303:1;28292:9;28288:17;28281:47;28345:131;28471:4;28345:131;:::i;:::-;28337:139;;28064:419;;;:::o;28489:::-;28655:4;28693:2;28682:9;28678:18;28670:26;;28742:9;28736:4;28732:20;28728:1;28717:9;28713:17;28706:47;28770:131;28896:4;28770:131;:::i;:::-;28762:139;;28489:419;;;:::o;28914:::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;28914:419;;;:::o;29339:::-;29505:4;29543:2;29532:9;29528:18;29520:26;;29592:9;29586:4;29582:20;29578:1;29567:9;29563:17;29556:47;29620:131;29746:4;29620:131;:::i;:::-;29612:139;;29339:419;;;:::o;29764:::-;29930:4;29968:2;29957:9;29953:18;29945:26;;30017:9;30011:4;30007:20;30003:1;29992:9;29988:17;29981:47;30045:131;30171:4;30045:131;:::i;:::-;30037:139;;29764:419;;;:::o;30189:::-;30355:4;30393:2;30382:9;30378:18;30370:26;;30442:9;30436:4;30432:20;30428:1;30417:9;30413:17;30406:47;30470:131;30596:4;30470:131;:::i;:::-;30462:139;;30189:419;;;:::o;30614:::-;30780:4;30818:2;30807:9;30803:18;30795:26;;30867:9;30861:4;30857:20;30853:1;30842:9;30838:17;30831:47;30895:131;31021:4;30895:131;:::i;:::-;30887:139;;30614:419;;;:::o;31039:222::-;31132:4;31170:2;31159:9;31155:18;31147:26;;31183:71;31251:1;31240:9;31236:17;31227:6;31183:71;:::i;:::-;31039:222;;;;:::o;31267:332::-;31388:4;31426:2;31415:9;31411:18;31403:26;;31439:71;31507:1;31496:9;31492:17;31483:6;31439:71;:::i;:::-;31520:72;31588:2;31577:9;31573:18;31564:6;31520:72;:::i;:::-;31267:332;;;;;:::o;31605:129::-;31639:6;31666:20;;:::i;:::-;31656:30;;31695:33;31723:4;31715:6;31695:33;:::i;:::-;31605:129;;;:::o;31740:75::-;31773:6;31806:2;31800:9;31790:19;;31740:75;:::o;31821:311::-;31898:4;31988:18;31980:6;31977:30;31974:56;;;32010:18;;:::i;:::-;31974:56;32060:4;32052:6;32048:17;32040:25;;32120:4;32114;32110:15;32102:23;;31821:311;;;:::o;32138:::-;32215:4;32305:18;32297:6;32294:30;32291:56;;;32327:18;;:::i;:::-;32291:56;32377:4;32369:6;32365:17;32357:25;;32437:4;32431;32427:15;32419:23;;32138:311;;;:::o;32455:307::-;32516:4;32606:18;32598:6;32595:30;32592:56;;;32628:18;;:::i;:::-;32592:56;32666:29;32688:6;32666:29;:::i;:::-;32658:37;;32750:4;32744;32740:15;32732:23;;32455:307;;;:::o;32768:308::-;32830:4;32920:18;32912:6;32909:30;32906:56;;;32942:18;;:::i;:::-;32906:56;32980:29;33002:6;32980:29;:::i;:::-;32972:37;;33064:4;33058;33054:15;33046:23;;32768:308;;;:::o;33082:132::-;33149:4;33172:3;33164:11;;33202:4;33197:3;33193:14;33185:22;;33082:132;;;:::o;33220:114::-;33287:6;33321:5;33315:12;33305:22;;33220:114;;;:::o;33340:98::-;33391:6;33425:5;33419:12;33409:22;;33340:98;;;:::o;33444:99::-;33496:6;33530:5;33524:12;33514:22;;33444:99;;;:::o;33549:113::-;33619:4;33651;33646:3;33642:14;33634:22;;33549:113;;;:::o;33668:184::-;33767:11;33801:6;33796:3;33789:19;33841:4;33836:3;33832:14;33817:29;;33668:184;;;;:::o;33858:168::-;33941:11;33975:6;33970:3;33963:19;34015:4;34010:3;34006:14;33991:29;;33858:168;;;;:::o;34032:169::-;34116:11;34150:6;34145:3;34138:19;34190:4;34185:3;34181:14;34166:29;;34032:169;;;;:::o;34207:148::-;34309:11;34346:3;34331:18;;34207:148;;;;:::o;34361:305::-;34401:3;34420:20;34438:1;34420:20;:::i;:::-;34415:25;;34454:20;34472:1;34454:20;:::i;:::-;34449:25;;34608:1;34540:66;34536:74;34533:1;34530:81;34527:107;;;34614:18;;:::i;:::-;34527:107;34658:1;34655;34651:9;34644:16;;34361:305;;;;:::o;34672:185::-;34712:1;34729:20;34747:1;34729:20;:::i;:::-;34724:25;;34763:20;34781:1;34763:20;:::i;:::-;34758:25;;34802:1;34792:35;;34807:18;;:::i;:::-;34792:35;34849:1;34846;34842:9;34837:14;;34672:185;;;;:::o;34863:348::-;34903:7;34926:20;34944:1;34926:20;:::i;:::-;34921:25;;34960:20;34978:1;34960:20;:::i;:::-;34955:25;;35148:1;35080:66;35076:74;35073:1;35070:81;35065:1;35058:9;35051:17;35047:105;35044:131;;;35155:18;;:::i;:::-;35044:131;35203:1;35200;35196:9;35185:20;;34863:348;;;;:::o;35217:191::-;35257:4;35277:20;35295:1;35277:20;:::i;:::-;35272:25;;35311:20;35329:1;35311:20;:::i;:::-;35306:25;;35350:1;35347;35344:8;35341:34;;;35355:18;;:::i;:::-;35341:34;35400:1;35397;35393:9;35385:17;;35217:191;;;;:::o;35414:96::-;35451:7;35480:24;35498:5;35480:24;:::i;:::-;35469:35;;35414:96;;;:::o;35516:90::-;35550:7;35593:5;35586:13;35579:21;35568:32;;35516:90;;;:::o;35612:149::-;35648:7;35688:66;35681:5;35677:78;35666:89;;35612:149;;;:::o;35767:126::-;35804:7;35844:42;35837:5;35833:54;35822:65;;35767:126;;;:::o;35899:77::-;35936:7;35965:5;35954:16;;35899:77;;;:::o;35982:154::-;36066:6;36061:3;36056;36043:30;36128:1;36119:6;36114:3;36110:16;36103:27;35982:154;;;:::o;36142:307::-;36210:1;36220:113;36234:6;36231:1;36228:13;36220:113;;;36319:1;36314:3;36310:11;36304:18;36300:1;36295:3;36291:11;36284:39;36256:2;36253:1;36249:10;36244:15;;36220:113;;;36351:6;36348:1;36345:13;36342:101;;;36431:1;36422:6;36417:3;36413:16;36406:27;36342:101;36191:258;36142:307;;;:::o;36455:320::-;36499:6;36536:1;36530:4;36526:12;36516:22;;36583:1;36577:4;36573:12;36604:18;36594:81;;36660:4;36652:6;36648:17;36638:27;;36594:81;36722:2;36714:6;36711:14;36691:18;36688:38;36685:84;;;36741:18;;:::i;:::-;36685:84;36506:269;36455:320;;;:::o;36781:281::-;36864:27;36886:4;36864:27;:::i;:::-;36856:6;36852:40;36994:6;36982:10;36979:22;36958:18;36946:10;36943:34;36940:62;36937:88;;;37005:18;;:::i;:::-;36937:88;37045:10;37041:2;37034:22;36824:238;36781:281;;:::o;37068:233::-;37107:3;37130:24;37148:5;37130:24;:::i;:::-;37121:33;;37176:66;37169:5;37166:77;37163:103;;;37246:18;;:::i;:::-;37163:103;37293:1;37286:5;37282:13;37275:20;;37068:233;;;:::o;37307:176::-;37339:1;37356:20;37374:1;37356:20;:::i;:::-;37351:25;;37390:20;37408:1;37390:20;:::i;:::-;37385:25;;37429:1;37419:35;;37434:18;;:::i;:::-;37419:35;37475:1;37472;37468:9;37463:14;;37307:176;;;;:::o;37489:180::-;37537:77;37534:1;37527:88;37634:4;37631:1;37624:15;37658:4;37655:1;37648:15;37675:180;37723:77;37720:1;37713:88;37820:4;37817:1;37810:15;37844:4;37841:1;37834:15;37861:180;37909:77;37906:1;37899:88;38006:4;38003:1;37996:15;38030:4;38027:1;38020:15;38047:180;38095:77;38092:1;38085:88;38192:4;38189:1;38182:15;38216:4;38213:1;38206:15;38233:180;38281:77;38278:1;38271:88;38378:4;38375:1;38368:15;38402:4;38399:1;38392:15;38419:183;38454:3;38492:1;38474:16;38471:23;38468:128;;;38530:1;38527;38524;38509:23;38552:34;38583:1;38577:8;38552:34;:::i;:::-;38545:41;;38468:128;38419:183;:::o;38608:117::-;38717:1;38714;38707:12;38731:117;38840:1;38837;38830:12;38854:117;38963:1;38960;38953:12;38977:117;39086:1;39083;39076:12;39100:117;39209:1;39206;39199:12;39223:102;39264:6;39315:2;39311:7;39306:2;39299:5;39295:14;39291:28;39281:38;;39223:102;;;:::o;39331:106::-;39375:8;39424:5;39419:3;39415:15;39394:36;;39331:106;;;:::o;39443:239::-;39583:34;39579:1;39571:6;39567:14;39560:58;39652:22;39647:2;39639:6;39635:15;39628:47;39443:239;:::o;39688:234::-;39828:34;39824:1;39816:6;39812:14;39805:58;39897:17;39892:2;39884:6;39880:15;39873:42;39688:234;:::o;39928:227::-;40068:34;40064:1;40056:6;40052:14;40045:58;40137:10;40132:2;40124:6;40120:15;40113:35;39928:227;:::o;40161:177::-;40301:29;40297:1;40289:6;40285:14;40278:53;40161:177;:::o;40344:225::-;40484:34;40480:1;40472:6;40468:14;40461:58;40553:8;40548:2;40540:6;40536:15;40529:33;40344:225;:::o;40575:229::-;40715:34;40711:1;40703:6;40699:14;40692:58;40784:12;40779:2;40771:6;40767:15;40760:37;40575:229;:::o;40810:172::-;40950:24;40946:1;40938:6;40934:14;40927:48;40810:172;:::o;40988:224::-;41128:34;41124:1;41116:6;41112:14;41105:58;41197:7;41192:2;41184:6;41180:15;41173:32;40988:224;:::o;41218:229::-;41358:34;41354:1;41346:6;41342:14;41335:58;41427:12;41422:2;41414:6;41410:15;41403:37;41218:229;:::o;41453:182::-;41593:34;41589:1;41581:6;41577:14;41570:58;41453:182;:::o;41641:173::-;41781:25;41777:1;41769:6;41765:14;41758:49;41641:173;:::o;41820:230::-;41960:34;41956:1;41948:6;41944:14;41937:58;42029:13;42024:2;42016:6;42012:15;42005:38;41820:230;:::o;42056:228::-;42196:34;42192:1;42184:6;42180:14;42173:58;42265:11;42260:2;42252:6;42248:15;42241:36;42056:228;:::o;42290:::-;42430:34;42426:1;42418:6;42414:14;42407:58;42499:11;42494:2;42486:6;42482:15;42475:36;42290:228;:::o;42524:227::-;42664:34;42660:1;42652:6;42648:14;42641:58;42733:10;42728:2;42720:6;42716:15;42709:35;42524:227;:::o;42757:220::-;42897:34;42893:1;42885:6;42881:14;42874:58;42966:3;42961:2;42953:6;42949:15;42942:28;42757:220;:::o;42983:711::-;43022:3;43060:4;43042:16;43039:26;43036:39;;;43068:5;;43036:39;43097:20;;:::i;:::-;43172:1;43154:16;43150:24;43147:1;43141:4;43126:49;43205:4;43199:11;43304:16;43297:4;43289:6;43285:17;43282:39;43249:18;43241:6;43238:30;43222:113;43219:146;;;43350:5;;;;43219:146;43396:6;43390:4;43386:17;43432:3;43426:10;43459:18;43451:6;43448:30;43445:43;;;43481:5;;;;;;43445:43;43529:6;43522:4;43517:3;43513:14;43509:27;43588:1;43570:16;43566:24;43560:4;43556:35;43551:3;43548:44;43545:57;;;43595:5;;;;;;;43545:57;43612;43660:6;43654:4;43650:17;43642:6;43638:30;43632:4;43612:57;:::i;:::-;43685:3;43678:10;;43026:668;;;;;42983:711;;:::o;43700:122::-;43773:24;43791:5;43773:24;:::i;:::-;43766:5;43763:35;43753:63;;43812:1;43809;43802:12;43753:63;43700:122;:::o;43828:116::-;43898:21;43913:5;43898:21;:::i;:::-;43891:5;43888:32;43878:60;;43934:1;43931;43924:12;43878:60;43828:116;:::o;43950:120::-;44022:23;44039:5;44022:23;:::i;:::-;44015:5;44012:34;44002:62;;44060:1;44057;44050:12;44002:62;43950:120;:::o;44076:122::-;44149:24;44167:5;44149:24;:::i;:::-;44142:5;44139:35;44129:63;;44188:1;44185;44178:12;44129:63;44076:122;:::o

Swarm Source

ipfs://545587f62d70582f30b6f4e2854b38d2c02d400643e2f4b1605bbbc8e1a62302
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.