ETH Price: $3,604.41 (+1.08%)

Token

ERC-20: ()
 

Overview

Max Total Supply

0

Holders

190

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x7beaa6a31455FfCE6424524696346FF6677EbC84
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:
MintPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-13
*/

// hevm: flattened sources of src/MintPass.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;

////// lib/openzeppelin-contracts/contracts/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;
    }
}

////// lib/openzeppelin-contracts/contracts/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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol

/* pragma solidity ^0.8.0; */

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

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

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

////// lib/openzeppelin-contracts/contracts/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);
}

////// lib/openzeppelin-contracts/contracts/utils/Address.sol

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/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;
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC1155/ERC1155.sol

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        return array;
    }
}

////// lib/openzeppelin-contracts/contracts/utils/Strings.sol

/* pragma solidity ^0.8.0; */

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

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

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

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

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

////// src/MintPass.sol
/* pragma solidity ^0.8.0; */

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

contract MintPass is ERC1155, Ownable {
    using Strings for uint256;

    string private baseURI;
    mapping(address => bool) public minters;
    mapping(uint256 => uint256) private _totalSupply;

    uint256 public count = 0;

    constructor() ERC1155("") {}

    modifier onlyMinter() {
        require(minters[msg.sender], "not minter");
        _;
    }

    /// Owner Functions ///

    function addMinter(address minter) external onlyOwner {
        minters[minter] = true;
    }

    function removeMinter(address minter) external onlyOwner {
        minters[minter] = false;
    }

    function updateBaseUri(string calldata base) external onlyOwner {
        baseURI = base;
    }

    /// Minter Function ///

    function mint(
        address to,
        uint256 id,
        uint256 amount
    ) external onlyMinter {
        _mint(to, id, amount, "0");
        _totalSupply[id] += amount;
    }

    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _burn(account, id, value);
        _totalSupply[id] -= value;
    }

    /// Public Functions ///

    function totalSupply(uint256 id) public view returns (uint256) {
        return _totalSupply[id];
    }

    function uri(uint256 id) public view override returns (string memory) {
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, id.toString(), ".json"))
                : baseURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"count","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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"base","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260006007553480156200001657600080fd5b506040518060200160405280600081525062000038816200005f60201b60201c565b50620000596200004d6200007b60201b60201c565b6200008360201b60201c565b6200025e565b80600290805190602001906200007792919062000149565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015790620001f9565b90600052602060002090601f0160209004810192826200017b5760008555620001c7565b82601f106200019657805160ff1916838001178555620001c7565b82800160010185558215620001c7579182015b82811115620001c6578251825591602001919060010190620001a9565b5b509050620001d69190620001da565b5090565b5b80821115620001f5576000816000905550600101620001db565b5090565b600060028204905060018216806200021257607f821691505b602082108114156200022957620002286200022f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613aba806200026e6000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063e985e9c511610071578063e985e9c514610303578063f242432a14610333578063f2fde38b1461034f578063f46eccc41461036b578063f5298aca1461039b57610120565b8063715018a6146102735780638da5cb5b1461027d578063983b2d561461029b578063a22cb465146102b7578063bd85b039146102d357610120565b8063156e29f6116100f4578063156e29f6146101d35780632eb2c2d6146101ef5780633092afd51461020b57806339f7e37f146102275780634e1273f41461024357610120565b8062fdd58e1461012557806301ffc9a71461015557806306661abd146101855780630e89341c146101a3575b600080fd5b61013f600480360381019061013a9190612603565b6103b7565b60405161014c9190612fab565b60405180910390f35b61016f600480360381019061016a919061270e565b610480565b60405161017c9190612d6e565b60405180910390f35b61018d610562565b60405161019a9190612fab565b60405180910390f35b6101bd60048036038101906101b891906127b5565b610568565b6040516101ca9190612d89565b60405180910390f35b6101ed60048036038101906101e89190612643565b610643565b005b6102096004803603810190610204919061245d565b61073f565b005b610225600480360381019061022091906123f0565b6107e0565b005b610241600480360381019061023c9190612768565b6108b7565b005b61025d60048036038101906102589190612696565b610949565b60405161026a9190612d15565b60405180910390f35b61027b610a62565b005b610285610aea565b6040516102929190612c38565b60405180910390f35b6102b560048036038101906102b091906123f0565b610b14565b005b6102d160048036038101906102cc91906125c3565b610beb565b005b6102ed60048036038101906102e891906127b5565b610d6c565b6040516102fa9190612fab565b60405180910390f35b61031d6004803603810190610318919061241d565b610d89565b60405161032a9190612d6e565b60405180910390f35b61034d6004803603810190610348919061252c565b610e1d565b005b610369600480360381019061036491906123f0565b610ebe565b005b610385600480360381019061038091906123f0565b610fb6565b6040516103929190612d6e565b60405180910390f35b6103b560048036038101906103b09190612643565b610fd6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041f90612deb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061055b575061055a8261109d565b5b9050919050565b60075481565b60606000600480546105799061329f565b905011610610576004805461058d9061329f565b80601f01602080910402602001604051908101604052809291908181526020018280546105b99061329f565b80156106065780601f106105db57610100808354040283529160200191610606565b820191906000526020600020905b8154815290600101906020018083116105e957829003601f168201915b505050505061063c565b600461061b83611107565b60405160200161062c929190612c09565b6040516020818303038152906040525b9050919050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690612f0b565b60405180910390fd5b6107108383836040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250611268565b80600660008481526020019081526020016000206000828254610733919061312e565b92505081905550505050565b6107476113fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061078d575061078c856107876113fe565b610d89565b5b6107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390612e8b565b60405180910390fd5b6107d98585858585611406565b5050505050565b6107e86113fe565b73ffffffffffffffffffffffffffffffffffffffff16610806610aea565b73ffffffffffffffffffffffffffffffffffffffff161461085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085390612eeb565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108bf6113fe565b73ffffffffffffffffffffffffffffffffffffffff166108dd610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612eeb565b60405180910390fd5b8181600491906109449291906120e2565b505050565b6060815183511461098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690612f4b565b60405180910390fd5b6000835167ffffffffffffffff8111156109ac576109ab613438565b5b6040519080825280602002602001820160405280156109da5781602001602082028036833780820191505090505b50905060005b8451811015610a5757610a278582815181106109ff576109fe613409565b5b6020026020010151858381518110610a1a57610a19613409565b5b60200260200101516103b7565b828281518110610a3a57610a39613409565b5b60200260200101818152505080610a5090613302565b90506109e0565b508091505092915050565b610a6a6113fe565b73ffffffffffffffffffffffffffffffffffffffff16610a88610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590612eeb565b60405180910390fd5b610ae8600061171a565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b1c6113fe565b73ffffffffffffffffffffffffffffffffffffffff16610b3a610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790612eeb565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff16610c0a6113fe565b73ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890612f2b565b60405180910390fd5b8060016000610c6e6113fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d1b6113fe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d609190612d6e565b60405180910390a35050565b600060066000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e256113fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e6b5750610e6a85610e656113fe565b610d89565b5b610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190612e4b565b60405180910390fd5b610eb785858585856117e0565b5050505050565b610ec66113fe565b73ffffffffffffffffffffffffffffffffffffffff16610ee4610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190612eeb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190612e0b565b60405180910390fd5b610fb38161171a565b50565b60056020528060005260406000206000915054906101000a900460ff1681565b610fde6113fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061102457506110238361101e6113fe565b610d89565b5b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90612e4b565b60405180910390fd5b61106e838383611a62565b8060066000848152602001908152602001600020600082825461109191906131b5565b92505081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600082141561114f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611263565b600082905060005b6000821461118157808061116a90613302565b915050600a8261117a9190613184565b9150611157565b60008167ffffffffffffffff81111561119d5761119c613438565b5b6040519080825280601f01601f1916602001820160405280156111cf5781602001600182028036833780820191505090505b5090505b6000851461125c576001826111e891906131b5565b9150600a856111f7919061334b565b6030611203919061312e565b60f81b81838151811061121957611218613409565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856112559190613184565b94506111d3565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90612f8b565b60405180910390fd5b60006112e26113fe565b9050611303816000876112f488611c7f565b6112fd88611c7f565b87611cf9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611362919061312e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516113e0929190612fc6565b60405180910390a46113f781600087878787611d01565b5050505050565b600033905090565b815183511461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190612f6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190612e6b565b60405180910390fd5b60006114c46113fe565b90506114d4818787878787611cf9565b60005b84518110156116855760008582815181106114f5576114f4613409565b5b60200260200101519050600085838151811061151457611513613409565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90612ecb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166a919061312e565b925050819055505050508061167e90613302565b90506114d7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116fc929190612d37565b60405180910390a4611712818787878787611ee8565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790612e6b565b60405180910390fd5b600061185a6113fe565b905061187a81878761186b88611c7f565b61187488611c7f565b87611cf9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612ecb565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c6919061312e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611a43929190612fc6565b60405180910390a4611a59828888888888611d01565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990612eab565b60405180910390fd5b6000611adc6113fe565b9050611b0c81856000611aee87611c7f565b611af787611c7f565b60405180602001604052806000815250611cf9565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90612e2b565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c70929190612fc6565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115611c9e57611c9d613438565b5b604051908082528060200260200182016040528015611ccc5781602001602082028036833780820191505090505b5090508281600081518110611ce457611ce3613409565b5b60200260200101818152505080915050919050565b505050505050565b611d208473ffffffffffffffffffffffffffffffffffffffff166120cf565b15611ee0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d66959493929190612cbb565b602060405180830381600087803b158015611d8057600080fd5b505af1925050508015611db157506040513d601f19601f82011682018060405250810190611dae919061273b565b60015b611e5757611dbd613467565b806308c379a01415611e1a5750611dd2613992565b80611ddd5750611e1c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e119190612d89565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90612dab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590612dcb565b60405180910390fd5b505b505050505050565b611f078473ffffffffffffffffffffffffffffffffffffffff166120cf565b156120c7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f4d959493929190612c53565b602060405180830381600087803b158015611f6757600080fd5b505af1925050508015611f9857506040513d601f19601f82011682018060405250810190611f95919061273b565b60015b61203e57611fa4613467565b806308c379a014156120015750611fb9613992565b80611fc45750612003565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff89190612d89565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590612dab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90612dcb565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546120ee9061329f565b90600052602060002090601f0160209004810192826121105760008555612157565b82601f1061212957803560ff1916838001178555612157565b82800160010185558215612157579182015b8281111561215657823582559160200191906001019061213b565b5b5090506121649190612168565b5090565b5b80821115612181576000816000905550600101612169565b5090565b600061219861219384613014565b612fef565b905080838252602082019050828560208602820111156121bb576121ba613493565b5b60005b858110156121eb57816121d188826122a7565b8452602084019350602083019250506001810190506121be565b5050509392505050565b600061220861220384613040565b612fef565b9050808382526020820190508285602086028201111561222b5761222a613493565b5b60005b8581101561225b578161224188826123db565b84526020840193506020830192505060018101905061222e565b5050509392505050565b60006122786122738461306c565b612fef565b90508281526020810184848401111561229457612293613498565b5b61229f84828561325d565b509392505050565b6000813590506122b681613a28565b92915050565b600082601f8301126122d1576122d061348e565b5b81356122e1848260208601612185565b91505092915050565b600082601f8301126122ff576122fe61348e565b5b813561230f8482602086016121f5565b91505092915050565b60008135905061232781613a3f565b92915050565b60008135905061233c81613a56565b92915050565b60008151905061235181613a56565b92915050565b600082601f83011261236c5761236b61348e565b5b813561237c848260208601612265565b91505092915050565b60008083601f84011261239b5761239a61348e565b5b8235905067ffffffffffffffff8111156123b8576123b7613489565b5b6020830191508360018202830111156123d4576123d3613493565b5b9250929050565b6000813590506123ea81613a6d565b92915050565b600060208284031215612406576124056134a2565b5b6000612414848285016122a7565b91505092915050565b60008060408385031215612434576124336134a2565b5b6000612442858286016122a7565b9250506020612453858286016122a7565b9150509250929050565b600080600080600060a08688031215612479576124786134a2565b5b6000612487888289016122a7565b9550506020612498888289016122a7565b945050604086013567ffffffffffffffff8111156124b9576124b861349d565b5b6124c5888289016122ea565b935050606086013567ffffffffffffffff8111156124e6576124e561349d565b5b6124f2888289016122ea565b925050608086013567ffffffffffffffff8111156125135761251261349d565b5b61251f88828901612357565b9150509295509295909350565b600080600080600060a08688031215612548576125476134a2565b5b6000612556888289016122a7565b9550506020612567888289016122a7565b9450506040612578888289016123db565b9350506060612589888289016123db565b925050608086013567ffffffffffffffff8111156125aa576125a961349d565b5b6125b688828901612357565b9150509295509295909350565b600080604083850312156125da576125d96134a2565b5b60006125e8858286016122a7565b92505060206125f985828601612318565b9150509250929050565b6000806040838503121561261a576126196134a2565b5b6000612628858286016122a7565b9250506020612639858286016123db565b9150509250929050565b60008060006060848603121561265c5761265b6134a2565b5b600061266a868287016122a7565b935050602061267b868287016123db565b925050604061268c868287016123db565b9150509250925092565b600080604083850312156126ad576126ac6134a2565b5b600083013567ffffffffffffffff8111156126cb576126ca61349d565b5b6126d7858286016122bc565b925050602083013567ffffffffffffffff8111156126f8576126f761349d565b5b612704858286016122ea565b9150509250929050565b600060208284031215612724576127236134a2565b5b60006127328482850161232d565b91505092915050565b600060208284031215612751576127506134a2565b5b600061275f84828501612342565b91505092915050565b6000806020838503121561277f5761277e6134a2565b5b600083013567ffffffffffffffff81111561279d5761279c61349d565b5b6127a985828601612385565b92509250509250929050565b6000602082840312156127cb576127ca6134a2565b5b60006127d9848285016123db565b91505092915050565b60006127ee8383612beb565b60208301905092915050565b612803816131e9565b82525050565b6000612814826130c2565b61281e81856130f0565b93506128298361309d565b8060005b8381101561285a57815161284188826127e2565b975061284c836130e3565b92505060018101905061282d565b5085935050505092915050565b612870816131fb565b82525050565b6000612881826130cd565b61288b8185613101565b935061289b81856020860161326c565b6128a4816134a7565b840191505092915050565b60006128ba826130d8565b6128c48185613112565b93506128d481856020860161326c565b6128dd816134a7565b840191505092915050565b60006128f3826130d8565b6128fd8185613123565b935061290d81856020860161326c565b80840191505092915050565b600081546129268161329f565b6129308186613123565b9450600182166000811461294b576001811461295c5761298f565b60ff1983168652818601935061298f565b612965856130ad565b60005b8381101561298757815481890152600182019150602081019050612968565b838801955050505b50505092915050565b60006129a5603483613112565b91506129b0826134c5565b604082019050919050565b60006129c8602883613112565b91506129d382613514565b604082019050919050565b60006129eb602b83613112565b91506129f682613563565b604082019050919050565b6000612a0e602683613112565b9150612a19826135b2565b604082019050919050565b6000612a31602483613112565b9150612a3c82613601565b604082019050919050565b6000612a54602983613112565b9150612a5f82613650565b604082019050919050565b6000612a77602583613112565b9150612a828261369f565b604082019050919050565b6000612a9a603283613112565b9150612aa5826136ee565b604082019050919050565b6000612abd602383613112565b9150612ac88261373d565b604082019050919050565b6000612ae0602a83613112565b9150612aeb8261378c565b604082019050919050565b6000612b03600583613123565b9150612b0e826137db565b600582019050919050565b6000612b26602083613112565b9150612b3182613804565b602082019050919050565b6000612b49600a83613112565b9150612b548261382d565b602082019050919050565b6000612b6c602983613112565b9150612b7782613856565b604082019050919050565b6000612b8f602983613112565b9150612b9a826138a5565b604082019050919050565b6000612bb2602883613112565b9150612bbd826138f4565b604082019050919050565b6000612bd5602183613112565b9150612be082613943565b604082019050919050565b612bf481613253565b82525050565b612c0381613253565b82525050565b6000612c158285612919565b9150612c2182846128e8565b9150612c2c82612af6565b91508190509392505050565b6000602082019050612c4d60008301846127fa565b92915050565b600060a082019050612c6860008301886127fa565b612c7560208301876127fa565b8181036040830152612c878186612809565b90508181036060830152612c9b8185612809565b90508181036080830152612caf8184612876565b90509695505050505050565b600060a082019050612cd060008301886127fa565b612cdd60208301876127fa565b612cea6040830186612bfa565b612cf76060830185612bfa565b8181036080830152612d098184612876565b90509695505050505050565b60006020820190508181036000830152612d2f8184612809565b905092915050565b60006040820190508181036000830152612d518185612809565b90508181036020830152612d658184612809565b90509392505050565b6000602082019050612d836000830184612867565b92915050565b60006020820190508181036000830152612da381846128af565b905092915050565b60006020820190508181036000830152612dc481612998565b9050919050565b60006020820190508181036000830152612de4816129bb565b9050919050565b60006020820190508181036000830152612e04816129de565b9050919050565b60006020820190508181036000830152612e2481612a01565b9050919050565b60006020820190508181036000830152612e4481612a24565b9050919050565b60006020820190508181036000830152612e6481612a47565b9050919050565b60006020820190508181036000830152612e8481612a6a565b9050919050565b60006020820190508181036000830152612ea481612a8d565b9050919050565b60006020820190508181036000830152612ec481612ab0565b9050919050565b60006020820190508181036000830152612ee481612ad3565b9050919050565b60006020820190508181036000830152612f0481612b19565b9050919050565b60006020820190508181036000830152612f2481612b3c565b9050919050565b60006020820190508181036000830152612f4481612b5f565b9050919050565b60006020820190508181036000830152612f6481612b82565b9050919050565b60006020820190508181036000830152612f8481612ba5565b9050919050565b60006020820190508181036000830152612fa481612bc8565b9050919050565b6000602082019050612fc06000830184612bfa565b92915050565b6000604082019050612fdb6000830185612bfa565b612fe86020830184612bfa565b9392505050565b6000612ff961300a565b905061300582826132d1565b919050565b6000604051905090565b600067ffffffffffffffff82111561302f5761302e613438565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561305b5761305a613438565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561308757613086613438565b5b613090826134a7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061313982613253565b915061314483613253565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131795761317861337c565b5b828201905092915050565b600061318f82613253565b915061319a83613253565b9250826131aa576131a96133ab565b5b828204905092915050565b60006131c082613253565b91506131cb83613253565b9250828210156131de576131dd61337c565b5b828203905092915050565b60006131f482613233565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561328a57808201518184015260208101905061326f565b83811115613299576000848401525b50505050565b600060028204905060018216806132b757607f821691505b602082108114156132cb576132ca6133da565b5b50919050565b6132da826134a7565b810181811067ffffffffffffffff821117156132f9576132f8613438565b5b80604052505050565b600061330d82613253565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133405761333f61337c565b5b600182019050919050565b600061335682613253565b915061336183613253565b925082613371576133706133ab565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156134865760046000803e6134836000516134b8565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f74206d696e74657200000000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156139a257613a25565b6139aa61300a565b60043d036004823e80513d602482011167ffffffffffffffff821117156139d2575050613a25565b808201805167ffffffffffffffff8111156139f05750505050613a25565b80602083010160043d038501811115613a0d575050505050613a25565b613a1c826020018501866132d1565b82955050505050505b90565b613a31816131e9565b8114613a3c57600080fd5b50565b613a48816131fb565b8114613a5357600080fd5b50565b613a5f81613207565b8114613a6a57600080fd5b50565b613a7681613253565b8114613a8157600080fd5b5056fea2646970667358221220154c9503005403242640ab465af3961ccc0be6ae56fc212a1b2e8ffcad3b349864736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063e985e9c511610071578063e985e9c514610303578063f242432a14610333578063f2fde38b1461034f578063f46eccc41461036b578063f5298aca1461039b57610120565b8063715018a6146102735780638da5cb5b1461027d578063983b2d561461029b578063a22cb465146102b7578063bd85b039146102d357610120565b8063156e29f6116100f4578063156e29f6146101d35780632eb2c2d6146101ef5780633092afd51461020b57806339f7e37f146102275780634e1273f41461024357610120565b8062fdd58e1461012557806301ffc9a71461015557806306661abd146101855780630e89341c146101a3575b600080fd5b61013f600480360381019061013a9190612603565b6103b7565b60405161014c9190612fab565b60405180910390f35b61016f600480360381019061016a919061270e565b610480565b60405161017c9190612d6e565b60405180910390f35b61018d610562565b60405161019a9190612fab565b60405180910390f35b6101bd60048036038101906101b891906127b5565b610568565b6040516101ca9190612d89565b60405180910390f35b6101ed60048036038101906101e89190612643565b610643565b005b6102096004803603810190610204919061245d565b61073f565b005b610225600480360381019061022091906123f0565b6107e0565b005b610241600480360381019061023c9190612768565b6108b7565b005b61025d60048036038101906102589190612696565b610949565b60405161026a9190612d15565b60405180910390f35b61027b610a62565b005b610285610aea565b6040516102929190612c38565b60405180910390f35b6102b560048036038101906102b091906123f0565b610b14565b005b6102d160048036038101906102cc91906125c3565b610beb565b005b6102ed60048036038101906102e891906127b5565b610d6c565b6040516102fa9190612fab565b60405180910390f35b61031d6004803603810190610318919061241d565b610d89565b60405161032a9190612d6e565b60405180910390f35b61034d6004803603810190610348919061252c565b610e1d565b005b610369600480360381019061036491906123f0565b610ebe565b005b610385600480360381019061038091906123f0565b610fb6565b6040516103929190612d6e565b60405180910390f35b6103b560048036038101906103b09190612643565b610fd6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041f90612deb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054b57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061055b575061055a8261109d565b5b9050919050565b60075481565b60606000600480546105799061329f565b905011610610576004805461058d9061329f565b80601f01602080910402602001604051908101604052809291908181526020018280546105b99061329f565b80156106065780601f106105db57610100808354040283529160200191610606565b820191906000526020600020905b8154815290600101906020018083116105e957829003601f168201915b505050505061063c565b600461061b83611107565b60405160200161062c929190612c09565b6040516020818303038152906040525b9050919050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690612f0b565b60405180910390fd5b6107108383836040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250611268565b80600660008481526020019081526020016000206000828254610733919061312e565b92505081905550505050565b6107476113fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061078d575061078c856107876113fe565b610d89565b5b6107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390612e8b565b60405180910390fd5b6107d98585858585611406565b5050505050565b6107e86113fe565b73ffffffffffffffffffffffffffffffffffffffff16610806610aea565b73ffffffffffffffffffffffffffffffffffffffff161461085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085390612eeb565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108bf6113fe565b73ffffffffffffffffffffffffffffffffffffffff166108dd610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90612eeb565b60405180910390fd5b8181600491906109449291906120e2565b505050565b6060815183511461098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690612f4b565b60405180910390fd5b6000835167ffffffffffffffff8111156109ac576109ab613438565b5b6040519080825280602002602001820160405280156109da5781602001602082028036833780820191505090505b50905060005b8451811015610a5757610a278582815181106109ff576109fe613409565b5b6020026020010151858381518110610a1a57610a19613409565b5b60200260200101516103b7565b828281518110610a3a57610a39613409565b5b60200260200101818152505080610a5090613302565b90506109e0565b508091505092915050565b610a6a6113fe565b73ffffffffffffffffffffffffffffffffffffffff16610a88610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590612eeb565b60405180910390fd5b610ae8600061171a565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b1c6113fe565b73ffffffffffffffffffffffffffffffffffffffff16610b3a610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790612eeb565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff16610c0a6113fe565b73ffffffffffffffffffffffffffffffffffffffff161415610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890612f2b565b60405180910390fd5b8060016000610c6e6113fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d1b6113fe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d609190612d6e565b60405180910390a35050565b600060066000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e256113fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e6b5750610e6a85610e656113fe565b610d89565b5b610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190612e4b565b60405180910390fd5b610eb785858585856117e0565b5050505050565b610ec66113fe565b73ffffffffffffffffffffffffffffffffffffffff16610ee4610aea565b73ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190612eeb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190612e0b565b60405180910390fd5b610fb38161171a565b50565b60056020528060005260406000206000915054906101000a900460ff1681565b610fde6113fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061102457506110238361101e6113fe565b610d89565b5b611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90612e4b565b60405180910390fd5b61106e838383611a62565b8060066000848152602001908152602001600020600082825461109191906131b5565b92505081905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600082141561114f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611263565b600082905060005b6000821461118157808061116a90613302565b915050600a8261117a9190613184565b9150611157565b60008167ffffffffffffffff81111561119d5761119c613438565b5b6040519080825280601f01601f1916602001820160405280156111cf5781602001600182028036833780820191505090505b5090505b6000851461125c576001826111e891906131b5565b9150600a856111f7919061334b565b6030611203919061312e565b60f81b81838151811061121957611218613409565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856112559190613184565b94506111d3565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90612f8b565b60405180910390fd5b60006112e26113fe565b9050611303816000876112f488611c7f565b6112fd88611c7f565b87611cf9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611362919061312e565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516113e0929190612fc6565b60405180910390a46113f781600087878787611d01565b5050505050565b600033905090565b815183511461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144190612f6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190612e6b565b60405180910390fd5b60006114c46113fe565b90506114d4818787878787611cf9565b60005b84518110156116855760008582815181106114f5576114f4613409565b5b60200260200101519050600085838151811061151457611513613409565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90612ecb565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166a919061312e565b925050819055505050508061167e90613302565b90506114d7565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116fc929190612d37565b60405180910390a4611712818787878787611ee8565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184790612e6b565b60405180910390fd5b600061185a6113fe565b905061187a81878761186b88611c7f565b61187488611c7f565b87611cf9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890612ecb565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c6919061312e565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611a43929190612fc6565b60405180910390a4611a59828888888888611d01565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac990612eab565b60405180910390fd5b6000611adc6113fe565b9050611b0c81856000611aee87611c7f565b611af787611c7f565b60405180602001604052806000815250611cf9565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90612e2b565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611c70929190612fc6565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115611c9e57611c9d613438565b5b604051908082528060200260200182016040528015611ccc5781602001602082028036833780820191505090505b5090508281600081518110611ce457611ce3613409565b5b60200260200101818152505080915050919050565b505050505050565b611d208473ffffffffffffffffffffffffffffffffffffffff166120cf565b15611ee0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611d66959493929190612cbb565b602060405180830381600087803b158015611d8057600080fd5b505af1925050508015611db157506040513d601f19601f82011682018060405250810190611dae919061273b565b60015b611e5757611dbd613467565b806308c379a01415611e1a5750611dd2613992565b80611ddd5750611e1c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e119190612d89565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90612dab565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590612dcb565b60405180910390fd5b505b505050505050565b611f078473ffffffffffffffffffffffffffffffffffffffff166120cf565b156120c7578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f4d959493929190612c53565b602060405180830381600087803b158015611f6757600080fd5b505af1925050508015611f9857506040513d601f19601f82011682018060405250810190611f95919061273b565b60015b61203e57611fa4613467565b806308c379a014156120015750611fb9613992565b80611fc45750612003565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff89190612d89565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203590612dab565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90612dcb565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546120ee9061329f565b90600052602060002090601f0160209004810192826121105760008555612157565b82601f1061212957803560ff1916838001178555612157565b82800160010185558215612157579182015b8281111561215657823582559160200191906001019061213b565b5b5090506121649190612168565b5090565b5b80821115612181576000816000905550600101612169565b5090565b600061219861219384613014565b612fef565b905080838252602082019050828560208602820111156121bb576121ba613493565b5b60005b858110156121eb57816121d188826122a7565b8452602084019350602083019250506001810190506121be565b5050509392505050565b600061220861220384613040565b612fef565b9050808382526020820190508285602086028201111561222b5761222a613493565b5b60005b8581101561225b578161224188826123db565b84526020840193506020830192505060018101905061222e565b5050509392505050565b60006122786122738461306c565b612fef565b90508281526020810184848401111561229457612293613498565b5b61229f84828561325d565b509392505050565b6000813590506122b681613a28565b92915050565b600082601f8301126122d1576122d061348e565b5b81356122e1848260208601612185565b91505092915050565b600082601f8301126122ff576122fe61348e565b5b813561230f8482602086016121f5565b91505092915050565b60008135905061232781613a3f565b92915050565b60008135905061233c81613a56565b92915050565b60008151905061235181613a56565b92915050565b600082601f83011261236c5761236b61348e565b5b813561237c848260208601612265565b91505092915050565b60008083601f84011261239b5761239a61348e565b5b8235905067ffffffffffffffff8111156123b8576123b7613489565b5b6020830191508360018202830111156123d4576123d3613493565b5b9250929050565b6000813590506123ea81613a6d565b92915050565b600060208284031215612406576124056134a2565b5b6000612414848285016122a7565b91505092915050565b60008060408385031215612434576124336134a2565b5b6000612442858286016122a7565b9250506020612453858286016122a7565b9150509250929050565b600080600080600060a08688031215612479576124786134a2565b5b6000612487888289016122a7565b9550506020612498888289016122a7565b945050604086013567ffffffffffffffff8111156124b9576124b861349d565b5b6124c5888289016122ea565b935050606086013567ffffffffffffffff8111156124e6576124e561349d565b5b6124f2888289016122ea565b925050608086013567ffffffffffffffff8111156125135761251261349d565b5b61251f88828901612357565b9150509295509295909350565b600080600080600060a08688031215612548576125476134a2565b5b6000612556888289016122a7565b9550506020612567888289016122a7565b9450506040612578888289016123db565b9350506060612589888289016123db565b925050608086013567ffffffffffffffff8111156125aa576125a961349d565b5b6125b688828901612357565b9150509295509295909350565b600080604083850312156125da576125d96134a2565b5b60006125e8858286016122a7565b92505060206125f985828601612318565b9150509250929050565b6000806040838503121561261a576126196134a2565b5b6000612628858286016122a7565b9250506020612639858286016123db565b9150509250929050565b60008060006060848603121561265c5761265b6134a2565b5b600061266a868287016122a7565b935050602061267b868287016123db565b925050604061268c868287016123db565b9150509250925092565b600080604083850312156126ad576126ac6134a2565b5b600083013567ffffffffffffffff8111156126cb576126ca61349d565b5b6126d7858286016122bc565b925050602083013567ffffffffffffffff8111156126f8576126f761349d565b5b612704858286016122ea565b9150509250929050565b600060208284031215612724576127236134a2565b5b60006127328482850161232d565b91505092915050565b600060208284031215612751576127506134a2565b5b600061275f84828501612342565b91505092915050565b6000806020838503121561277f5761277e6134a2565b5b600083013567ffffffffffffffff81111561279d5761279c61349d565b5b6127a985828601612385565b92509250509250929050565b6000602082840312156127cb576127ca6134a2565b5b60006127d9848285016123db565b91505092915050565b60006127ee8383612beb565b60208301905092915050565b612803816131e9565b82525050565b6000612814826130c2565b61281e81856130f0565b93506128298361309d565b8060005b8381101561285a57815161284188826127e2565b975061284c836130e3565b92505060018101905061282d565b5085935050505092915050565b612870816131fb565b82525050565b6000612881826130cd565b61288b8185613101565b935061289b81856020860161326c565b6128a4816134a7565b840191505092915050565b60006128ba826130d8565b6128c48185613112565b93506128d481856020860161326c565b6128dd816134a7565b840191505092915050565b60006128f3826130d8565b6128fd8185613123565b935061290d81856020860161326c565b80840191505092915050565b600081546129268161329f565b6129308186613123565b9450600182166000811461294b576001811461295c5761298f565b60ff1983168652818601935061298f565b612965856130ad565b60005b8381101561298757815481890152600182019150602081019050612968565b838801955050505b50505092915050565b60006129a5603483613112565b91506129b0826134c5565b604082019050919050565b60006129c8602883613112565b91506129d382613514565b604082019050919050565b60006129eb602b83613112565b91506129f682613563565b604082019050919050565b6000612a0e602683613112565b9150612a19826135b2565b604082019050919050565b6000612a31602483613112565b9150612a3c82613601565b604082019050919050565b6000612a54602983613112565b9150612a5f82613650565b604082019050919050565b6000612a77602583613112565b9150612a828261369f565b604082019050919050565b6000612a9a603283613112565b9150612aa5826136ee565b604082019050919050565b6000612abd602383613112565b9150612ac88261373d565b604082019050919050565b6000612ae0602a83613112565b9150612aeb8261378c565b604082019050919050565b6000612b03600583613123565b9150612b0e826137db565b600582019050919050565b6000612b26602083613112565b9150612b3182613804565b602082019050919050565b6000612b49600a83613112565b9150612b548261382d565b602082019050919050565b6000612b6c602983613112565b9150612b7782613856565b604082019050919050565b6000612b8f602983613112565b9150612b9a826138a5565b604082019050919050565b6000612bb2602883613112565b9150612bbd826138f4565b604082019050919050565b6000612bd5602183613112565b9150612be082613943565b604082019050919050565b612bf481613253565b82525050565b612c0381613253565b82525050565b6000612c158285612919565b9150612c2182846128e8565b9150612c2c82612af6565b91508190509392505050565b6000602082019050612c4d60008301846127fa565b92915050565b600060a082019050612c6860008301886127fa565b612c7560208301876127fa565b8181036040830152612c878186612809565b90508181036060830152612c9b8185612809565b90508181036080830152612caf8184612876565b90509695505050505050565b600060a082019050612cd060008301886127fa565b612cdd60208301876127fa565b612cea6040830186612bfa565b612cf76060830185612bfa565b8181036080830152612d098184612876565b90509695505050505050565b60006020820190508181036000830152612d2f8184612809565b905092915050565b60006040820190508181036000830152612d518185612809565b90508181036020830152612d658184612809565b90509392505050565b6000602082019050612d836000830184612867565b92915050565b60006020820190508181036000830152612da381846128af565b905092915050565b60006020820190508181036000830152612dc481612998565b9050919050565b60006020820190508181036000830152612de4816129bb565b9050919050565b60006020820190508181036000830152612e04816129de565b9050919050565b60006020820190508181036000830152612e2481612a01565b9050919050565b60006020820190508181036000830152612e4481612a24565b9050919050565b60006020820190508181036000830152612e6481612a47565b9050919050565b60006020820190508181036000830152612e8481612a6a565b9050919050565b60006020820190508181036000830152612ea481612a8d565b9050919050565b60006020820190508181036000830152612ec481612ab0565b9050919050565b60006020820190508181036000830152612ee481612ad3565b9050919050565b60006020820190508181036000830152612f0481612b19565b9050919050565b60006020820190508181036000830152612f2481612b3c565b9050919050565b60006020820190508181036000830152612f4481612b5f565b9050919050565b60006020820190508181036000830152612f6481612b82565b9050919050565b60006020820190508181036000830152612f8481612ba5565b9050919050565b60006020820190508181036000830152612fa481612bc8565b9050919050565b6000602082019050612fc06000830184612bfa565b92915050565b6000604082019050612fdb6000830185612bfa565b612fe86020830184612bfa565b9392505050565b6000612ff961300a565b905061300582826132d1565b919050565b6000604051905090565b600067ffffffffffffffff82111561302f5761302e613438565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561305b5761305a613438565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561308757613086613438565b5b613090826134a7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061313982613253565b915061314483613253565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131795761317861337c565b5b828201905092915050565b600061318f82613253565b915061319a83613253565b9250826131aa576131a96133ab565b5b828204905092915050565b60006131c082613253565b91506131cb83613253565b9250828210156131de576131dd61337c565b5b828203905092915050565b60006131f482613233565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561328a57808201518184015260208101905061326f565b83811115613299576000848401525b50505050565b600060028204905060018216806132b757607f821691505b602082108114156132cb576132ca6133da565b5b50919050565b6132da826134a7565b810181811067ffffffffffffffff821117156132f9576132f8613438565b5b80604052505050565b600061330d82613253565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133405761333f61337c565b5b600182019050919050565b600061335682613253565b915061336183613253565b925082613371576133706133ab565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156134865760046000803e6134836000516134b8565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e6f74206d696e74657200000000000000000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d10156139a257613a25565b6139aa61300a565b60043d036004823e80513d602482011167ffffffffffffffff821117156139d2575050613a25565b808201805167ffffffffffffffff8111156139f05750505050613a25565b80602083010160043d038501811115613a0d575050505050613a25565b613a1c826020018501866132d1565b82955050505050505b90565b613a31816131e9565b8114613a3c57600080fd5b50565b613a48816131fb565b8114613a5357600080fd5b50565b613a5f81613207565b8114613a6a57600080fd5b50565b613a7681613253565b8114613a8157600080fd5b5056fea2646970667358221220154c9503005403242640ab465af3961ccc0be6ae56fc212a1b2e8ffcad3b349864736f6c63430008070033

Deployed Bytecode Sourcemap

38522:1699:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22899:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21922:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38733:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39980:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39282:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24994:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39039:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39146:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23296:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2668:94;;;:::i;:::-;;2017:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38936:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23893:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39867:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24276:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2917:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38630:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39480:347;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22899:231;22985:7;23032:1;23013:21;;:7;:21;;;;23005:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23100:9;:13;23110:2;23100:13;;;;;;;;;;;:22;23114:7;23100:22;;;;;;;;;;;;;;;;23093:29;;22899:231;;;;:::o;21922:310::-;22024:4;22076:26;22061:41;;;:11;:41;;;;:110;;;;22134:37;22119:52;;;:11;:52;;;;22061:110;:163;;;;22188:36;22212:11;22188:23;:36::i;:::-;22061:163;22041:183;;21922:310;;;:::o;38733:24::-;;;;:::o;39980:238::-;40035:13;40105:1;40087:7;40081:21;;;;;:::i;:::-;;;:25;:129;;40203:7;40081:129;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40150:7;40159:13;:2;:11;:13::i;:::-;40133:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40081:129;40061:149;;39980:238;;;:::o;39282:190::-;38843:7;:19;38851:10;38843:19;;;;;;;;;;;;;;;;;;;;;;;;;38835:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;39401:26:::1;39407:2;39411;39415:6;39401:26;;;;;;;;;;;;;;;;::::0;:5:::1;:26::i;:::-;39458:6;39438:12;:16;39451:2;39438:16;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;39282:190:::0;;;:::o;24994:442::-;25235:12;:10;:12::i;:::-;25227:20;;:4;:20;;;:60;;;;25251:36;25268:4;25274:12;:10;:12::i;:::-;25251:16;:36::i;:::-;25227:60;25205:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25376:52;25399:4;25405:2;25409:3;25414:7;25423:4;25376:22;:52::i;:::-;24994:442;;;;;:::o;39039:99::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39125:5:::1;39107:7;:15;39115:6;39107:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;39039:99:::0;:::o;39146:97::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39231:4:::1;;39221:7;:14;;;;;;;:::i;:::-;;39146:97:::0;;:::o;23296:524::-;23452:16;23513:3;:10;23494:8;:15;:29;23486:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23582:30;23629:8;:15;23615:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23582:63;;23663:9;23658:122;23682:8;:15;23678:1;:19;23658:122;;;23738:30;23748:8;23757:1;23748:11;;;;;;;;:::i;:::-;;;;;;;;23761:3;23765:1;23761:6;;;;;;;;:::i;:::-;;;;;;;;23738:9;:30::i;:::-;23719:13;23733:1;23719:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23699:3;;;;:::i;:::-;;;23658:122;;;;23799:13;23792:20;;;23296:524;;;;:::o;2668:94::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2733:21:::1;2751:1;2733:9;:21::i;:::-;2668:94::o:0;2017:87::-;2063:7;2090:6;;;;;;;;;;;2083:13;;2017:87;:::o;38936:95::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39019:4:::1;39001:7;:15;39009:6;39001:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;38936:95:::0;:::o;23893:311::-;24012:8;23996:24;;:12;:10;:12::i;:::-;:24;;;;23988:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24124:8;24079:18;:32;24098:12;:10;:12::i;:::-;24079:32;;;;;;;;;;;;;;;:42;24112:8;24079:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24177:8;24148:48;;24163:12;:10;:12::i;:::-;24148:48;;;24187:8;24148:48;;;;;;:::i;:::-;;;;;;;;23893:311;;:::o;39867:105::-;39921:7;39948:12;:16;39961:2;39948:16;;;;;;;;;;;;39941:23;;39867:105;;;:::o;24276:168::-;24375:4;24399:18;:27;24418:7;24399:27;;;;;;;;;;;;;;;:37;24427:8;24399:37;;;;;;;;;;;;;;;;;;;;;;;;;24392:44;;24276:168;;;;:::o;24516:401::-;24732:12;:10;:12::i;:::-;24724:20;;:4;:20;;;:60;;;;24748:36;24765:4;24771:12;:10;:12::i;:::-;24748:16;:36::i;:::-;24724:60;24702:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24864:45;24882:4;24888:2;24892;24896:6;24904:4;24864:17;:45::i;:::-;24516:401;;;;;:::o;2917:192::-;2248:12;:10;:12::i;:::-;2237:23;;:7;:5;:7::i;:::-;:23;;;2229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3026:1:::1;3006:22;;:8;:22;;;;2998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3082:19;3092:8;3082:9;:19::i;:::-;2917:192:::0;:::o;38630:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;39480:347::-;39623:12;:10;:12::i;:::-;39612:23;;:7;:23;;;:66;;;;39639:39;39656:7;39665:12;:10;:12::i;:::-;39639:16;:39::i;:::-;39612:66;39590:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;39758:25;39764:7;39773:2;39777:5;39758;:25::i;:::-;39814:5;39794:12;:16;39807:2;39794:16;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;39480:347;;;:::o;20478:157::-;20563:4;20602:25;20587:40;;;:11;:40;;;;20580:47;;20478:157;;;:::o;36517:723::-;36573:13;36803:1;36794:5;:10;36790:53;;;36821:10;;;;;;;;;;;;;;;;;;;;;36790:53;36853:12;36868:5;36853:20;;36884:14;36909:78;36924:1;36916:4;:9;36909:78;;36942:8;;;;;:::i;:::-;;;;36973:2;36965:10;;;;;:::i;:::-;;;36909:78;;;36997:19;37029:6;37019:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36997:39;;37047:154;37063:1;37054:5;:10;37047:154;;37091:1;37081:11;;;;;:::i;:::-;;;37158:2;37150:5;:10;;;;:::i;:::-;37137:2;:24;;;;:::i;:::-;37124:39;;37107:6;37114;37107:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;37187:2;37178:11;;;;;:::i;:::-;;;37047:154;;;37225:6;37211:21;;;;;36517:723;;;;:::o;29485:599::-;29662:1;29643:21;;:7;:21;;;;29635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29715:16;29734:12;:10;:12::i;:::-;29715:31;;29759:107;29780:8;29798:1;29802:7;29811:21;29829:2;29811:17;:21::i;:::-;29834:25;29852:6;29834:17;:25::i;:::-;29861:4;29759:20;:107::i;:::-;29905:6;29879:9;:13;29889:2;29879:13;;;;;;;;;;;:22;29893:7;29879:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;29964:7;29927:57;;29960:1;29927:57;;29942:8;29927:57;;;29973:2;29977:6;29927:57;;;;;;;:::i;:::-;;;;;;;;29997:79;30028:8;30046:1;30050:7;30059:2;30063:6;30071:4;29997:30;:79::i;:::-;29624:460;29485:599;;;;:::o;754:98::-;807:7;834:10;827:17;;754:98;:::o;27078:1074::-;27305:7;:14;27291:3;:10;:28;27283:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27397:1;27383:16;;:2;:16;;;;27375:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27454:16;27473:12;:10;:12::i;:::-;27454:31;;27498:60;27519:8;27529:4;27535:2;27539:3;27544:7;27553:4;27498:20;:60::i;:::-;27576:9;27571:421;27595:3;:10;27591:1;:14;27571:421;;;27627:10;27640:3;27644:1;27640:6;;;;;;;;:::i;:::-;;;;;;;;27627:19;;27661:14;27678:7;27686:1;27678:10;;;;;;;;:::i;:::-;;;;;;;;27661:27;;27705:19;27727:9;:13;27737:2;27727:13;;;;;;;;;;;:19;27741:4;27727:19;;;;;;;;;;;;;;;;27705:41;;27784:6;27769:11;:21;;27761:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27917:6;27903:11;:20;27881:9;:13;27891:2;27881:13;;;;;;;;;;;:19;27895:4;27881:19;;;;;;;;;;;;;;;:42;;;;27974:6;27953:9;:13;27963:2;27953:13;;;;;;;;;;;:17;27967:2;27953:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27612:380;;;27607:3;;;;:::i;:::-;;;27571:421;;;;28039:2;28009:47;;28033:4;28009:47;;28023:8;28009:47;;;28043:3;28048:7;28009:47;;;;;;;:::i;:::-;;;;;;;;28069:75;28105:8;28115:4;28121:2;28125:3;28130:7;28139:4;28069:35;:75::i;:::-;27272:880;27078:1074;;;;;:::o;3117:173::-;3173:16;3192:6;;;;;;;;;;;3173:25;;3218:8;3209:6;;:17;;;;;;;;;;;;;;;;;;3273:8;3242:40;;3263:8;3242:40;;;;;;;;;;;;3162:128;3117:173;:::o;25900:820::-;26102:1;26088:16;;:2;:16;;;;26080:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26159:16;26178:12;:10;:12::i;:::-;26159:31;;26203:96;26224:8;26234:4;26240:2;26244:21;26262:2;26244:17;:21::i;:::-;26267:25;26285:6;26267:17;:25::i;:::-;26294:4;26203:20;:96::i;:::-;26312:19;26334:9;:13;26344:2;26334:13;;;;;;;;;;;:19;26348:4;26334:19;;;;;;;;;;;;;;;;26312:41;;26387:6;26372:11;:21;;26364:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26512:6;26498:11;:20;26476:9;:13;26486:2;26476:13;;;;;;;;;;;:19;26490:4;26476:19;;;;;;;;;;;;;;;:42;;;;26561:6;26540:9;:13;26550:2;26540:13;;;;;;;;;;;:17;26554:2;26540:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26616:2;26585:46;;26610:4;26585:46;;26600:8;26585:46;;;26620:2;26624:6;26585:46;;;;;;;:::i;:::-;;;;;;;;26644:68;26675:8;26685:4;26691:2;26695;26699:6;26707:4;26644:30;:68::i;:::-;26069:651;;25900:820;;;;;:::o;31434:675::-;31583:1;31564:21;;:7;:21;;;;31556:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31638:16;31657:12;:10;:12::i;:::-;31638:31;;31682:105;31703:8;31713:7;31730:1;31734:21;31752:2;31734:17;:21::i;:::-;31757:25;31775:6;31757:17;:25::i;:::-;31682:105;;;;;;;;;;;;:20;:105::i;:::-;31800:22;31825:9;:13;31835:2;31825:13;;;;;;;;;;;:22;31839:7;31825:22;;;;;;;;;;;;;;;;31800:47;;31884:6;31866:14;:24;;31858:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32009:6;31992:14;:23;31967:9;:13;31977:2;31967:13;;;;;;;;;;;:22;31981:7;31967:22;;;;;;;;;;;;;;;:48;;;;32086:1;32044:57;;32069:7;32044:57;;32059:8;32044:57;;;32090:2;32094:6;32044:57;;;;;;;:::i;:::-;;;;;;;;31545:564;;31434:675;;;:::o;35988:198::-;36054:16;36083:22;36122:1;36108:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36083:41;;36146:7;36135:5;36141:1;36135:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36173:5;36166:12;;;35988:198;;;:::o;34186:221::-;;;;;;;:::o;34415:744::-;34630:15;:2;:13;;;:15::i;:::-;34626:526;;;34683:2;34666:38;;;34705:8;34715:4;34721:2;34725:6;34733:4;34666:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34662:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35014:6;35007:14;;;;;;;;;;;:::i;:::-;;;;;;;;34662:479;;;35063:62;;;;;;;;;;:::i;:::-;;;;;;;;34662:479;34800:43;;;34788:55;;;:8;:55;;;;34784:154;;34868:50;;;;;;;;;;:::i;:::-;;;;;;;;34784:154;34739:214;34626:526;34415:744;;;;;;:::o;35167:813::-;35407:15;:2;:13;;;:15::i;:::-;35403:570;;;35460:2;35443:43;;;35487:8;35497:4;35503:3;35508:7;35517:4;35443:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35439:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35835:6;35828:14;;;;;;;;;;;:::i;:::-;;;;;;;;35439:523;;;35884:62;;;;;;;;;;:::i;:::-;;;;;;;;35439:523;35616:48;;;35604:60;;;:8;:60;;;;35600:159;;35689:50;;;;;;;;;;:::i;:::-;;;;;;;;35600:159;35523:251;35403:570;35167:813;;;;;;:::o;12305:387::-;12365:4;12573:12;12640:7;12628:20;12620:28;;12683:1;12676:4;:8;12669:15;;;12305:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;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:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:329::-;4407:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:119;;;4462:79;;:::i;:::-;4424:119;4582:1;4607:53;4652:7;4643:6;4632:9;4628:22;4607:53;:::i;:::-;4597:63;;4553:117;4348:329;;;;:::o;4683:474::-;4751:6;4759;4808:2;4796:9;4787:7;4783:23;4779:32;4776:119;;;4814:79;;:::i;:::-;4776:119;4934:1;4959:53;5004:7;4995:6;4984:9;4980:22;4959:53;:::i;:::-;4949:63;;4905:117;5061:2;5087:53;5132:7;5123:6;5112:9;5108:22;5087:53;:::i;:::-;5077:63;;5032:118;4683:474;;;;;:::o;5163:1509::-;5317:6;5325;5333;5341;5349;5398:3;5386:9;5377:7;5373:23;5369:33;5366:120;;;5405:79;;:::i;:::-;5366:120;5525:1;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5496:117;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5808:2;5797:9;5793:18;5780:32;5839:18;5831:6;5828:30;5825:117;;;5861:79;;:::i;:::-;5825:117;5966:78;6036:7;6027:6;6016:9;6012:22;5966:78;:::i;:::-;5956:88;;5751:303;6121:2;6110:9;6106:18;6093:32;6152:18;6144:6;6141:30;6138:117;;;6174:79;;:::i;:::-;6138:117;6279:78;6349:7;6340:6;6329:9;6325:22;6279:78;:::i;:::-;6269:88;;6064:303;6434:3;6423:9;6419:19;6406:33;6466:18;6458:6;6455:30;6452:117;;;6488:79;;:::i;:::-;6452:117;6593:62;6647:7;6638:6;6627:9;6623:22;6593:62;:::i;:::-;6583:72;;6377:288;5163:1509;;;;;;;;:::o;6678:1089::-;6782:6;6790;6798;6806;6814;6863:3;6851:9;6842:7;6838:23;6834:33;6831:120;;;6870:79;;:::i;:::-;6831:120;6990:1;7015:53;7060:7;7051:6;7040:9;7036:22;7015:53;:::i;:::-;7005:63;;6961:117;7117:2;7143:53;7188:7;7179:6;7168:9;7164:22;7143:53;:::i;:::-;7133:63;;7088:118;7245:2;7271:53;7316:7;7307:6;7296:9;7292:22;7271:53;:::i;:::-;7261:63;;7216:118;7373:2;7399:53;7444:7;7435:6;7424:9;7420:22;7399:53;:::i;:::-;7389:63;;7344:118;7529:3;7518:9;7514:19;7501:33;7561:18;7553:6;7550:30;7547:117;;;7583:79;;:::i;:::-;7547:117;7688:62;7742:7;7733:6;7722:9;7718:22;7688:62;:::i;:::-;7678:72;;7472:288;6678:1089;;;;;;;;:::o;7773:468::-;7838:6;7846;7895:2;7883:9;7874:7;7870:23;7866:32;7863:119;;;7901:79;;:::i;:::-;7863:119;8021:1;8046:53;8091:7;8082:6;8071:9;8067:22;8046:53;:::i;:::-;8036:63;;7992:117;8148:2;8174:50;8216:7;8207:6;8196:9;8192:22;8174:50;:::i;:::-;8164:60;;8119:115;7773:468;;;;;:::o;8247:474::-;8315:6;8323;8372:2;8360:9;8351:7;8347:23;8343:32;8340:119;;;8378:79;;:::i;:::-;8340:119;8498:1;8523:53;8568:7;8559:6;8548:9;8544:22;8523:53;:::i;:::-;8513:63;;8469:117;8625:2;8651:53;8696:7;8687:6;8676:9;8672:22;8651:53;:::i;:::-;8641:63;;8596:118;8247:474;;;;;:::o;8727:619::-;8804:6;8812;8820;8869:2;8857:9;8848:7;8844:23;8840:32;8837:119;;;8875:79;;:::i;:::-;8837:119;8995:1;9020:53;9065:7;9056:6;9045:9;9041:22;9020:53;:::i;:::-;9010:63;;8966:117;9122:2;9148:53;9193:7;9184:6;9173:9;9169:22;9148:53;:::i;:::-;9138:63;;9093:118;9250:2;9276:53;9321:7;9312:6;9301:9;9297:22;9276:53;:::i;:::-;9266:63;;9221:118;8727:619;;;;;:::o;9352:894::-;9470:6;9478;9527:2;9515:9;9506:7;9502:23;9498:32;9495:119;;;9533:79;;:::i;:::-;9495:119;9681:1;9670:9;9666:17;9653:31;9711:18;9703:6;9700:30;9697:117;;;9733:79;;:::i;:::-;9697:117;9838:78;9908:7;9899:6;9888:9;9884:22;9838:78;:::i;:::-;9828:88;;9624:302;9993:2;9982:9;9978:18;9965:32;10024:18;10016:6;10013:30;10010:117;;;10046:79;;:::i;:::-;10010:117;10151:78;10221:7;10212:6;10201:9;10197:22;10151:78;:::i;:::-;10141:88;;9936:303;9352:894;;;;;:::o;10252:327::-;10310:6;10359:2;10347:9;10338:7;10334:23;10330:32;10327:119;;;10365:79;;:::i;:::-;10327:119;10485:1;10510:52;10554:7;10545:6;10534:9;10530:22;10510:52;:::i;:::-;10500:62;;10456:116;10252:327;;;;:::o;10585:349::-;10654:6;10703:2;10691:9;10682:7;10678:23;10674:32;10671:119;;;10709:79;;:::i;:::-;10671:119;10829:1;10854:63;10909:7;10900:6;10889:9;10885:22;10854:63;:::i;:::-;10844:73;;10800:127;10585:349;;;;:::o;10940:529::-;11011:6;11019;11068:2;11056:9;11047:7;11043:23;11039:32;11036:119;;;11074:79;;:::i;:::-;11036:119;11222:1;11211:9;11207:17;11194:31;11252:18;11244:6;11241:30;11238:117;;;11274:79;;:::i;:::-;11238:117;11387:65;11444:7;11435:6;11424:9;11420:22;11387:65;:::i;:::-;11369:83;;;;11165:297;10940:529;;;;;:::o;11475:329::-;11534:6;11583:2;11571:9;11562:7;11558:23;11554:32;11551:119;;;11589:79;;:::i;:::-;11551:119;11709:1;11734:53;11779:7;11770:6;11759:9;11755:22;11734:53;:::i;:::-;11724:63;;11680:117;11475:329;;;;:::o;11810:179::-;11879:10;11900:46;11942:3;11934:6;11900:46;:::i;:::-;11978:4;11973:3;11969:14;11955:28;;11810:179;;;;:::o;11995:118::-;12082:24;12100:5;12082:24;:::i;:::-;12077:3;12070:37;11995:118;;:::o;12149:732::-;12268:3;12297:54;12345:5;12297:54;:::i;:::-;12367:86;12446:6;12441:3;12367:86;:::i;:::-;12360:93;;12477:56;12527:5;12477:56;:::i;:::-;12556:7;12587:1;12572:284;12597:6;12594:1;12591:13;12572:284;;;12673:6;12667:13;12700:63;12759:3;12744:13;12700:63;:::i;:::-;12693:70;;12786:60;12839:6;12786:60;:::i;:::-;12776:70;;12632:224;12619:1;12616;12612:9;12607:14;;12572:284;;;12576:14;12872:3;12865:10;;12273:608;;;12149:732;;;;:::o;12887:109::-;12968:21;12983:5;12968:21;:::i;:::-;12963:3;12956:34;12887:109;;:::o;13002:360::-;13088:3;13116:38;13148:5;13116:38;:::i;:::-;13170:70;13233:6;13228:3;13170:70;:::i;:::-;13163:77;;13249:52;13294:6;13289:3;13282:4;13275:5;13271:16;13249:52;:::i;:::-;13326:29;13348:6;13326:29;:::i;:::-;13321:3;13317:39;13310:46;;13092:270;13002:360;;;;:::o;13368:364::-;13456:3;13484:39;13517:5;13484:39;:::i;:::-;13539:71;13603:6;13598:3;13539:71;:::i;:::-;13532:78;;13619:52;13664:6;13659:3;13652:4;13645:5;13641:16;13619:52;:::i;:::-;13696:29;13718:6;13696:29;:::i;:::-;13691:3;13687:39;13680:46;;13460:272;13368:364;;;;:::o;13738:377::-;13844:3;13872:39;13905:5;13872:39;:::i;:::-;13927:89;14009:6;14004:3;13927:89;:::i;:::-;13920:96;;14025:52;14070:6;14065:3;14058:4;14051:5;14047:16;14025:52;:::i;:::-;14102:6;14097:3;14093:16;14086:23;;13848:267;13738:377;;;;:::o;14145:845::-;14248:3;14285:5;14279:12;14314:36;14340:9;14314:36;:::i;:::-;14366:89;14448:6;14443:3;14366:89;:::i;:::-;14359:96;;14486:1;14475:9;14471:17;14502:1;14497:137;;;;14648:1;14643:341;;;;14464:520;;14497:137;14581:4;14577:9;14566;14562:25;14557:3;14550:38;14617:6;14612:3;14608:16;14601:23;;14497:137;;14643:341;14710:38;14742:5;14710:38;:::i;:::-;14770:1;14784:154;14798:6;14795:1;14792:13;14784:154;;;14872:7;14866:14;14862:1;14857:3;14853:11;14846:35;14922:1;14913:7;14909:15;14898:26;;14820:4;14817:1;14813:12;14808:17;;14784:154;;;14967:6;14962:3;14958:16;14951:23;;14650:334;;14464:520;;14252:738;;14145:845;;;;:::o;14996:366::-;15138:3;15159:67;15223:2;15218:3;15159:67;:::i;:::-;15152:74;;15235:93;15324:3;15235:93;:::i;:::-;15353:2;15348:3;15344:12;15337:19;;14996:366;;;:::o;15368:::-;15510:3;15531:67;15595:2;15590:3;15531:67;:::i;:::-;15524:74;;15607:93;15696:3;15607:93;:::i;:::-;15725:2;15720:3;15716:12;15709:19;;15368:366;;;:::o;15740:::-;15882:3;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;15979:93;16068:3;15979:93;:::i;:::-;16097:2;16092:3;16088:12;16081:19;;15740:366;;;:::o;16112:::-;16254:3;16275:67;16339:2;16334:3;16275:67;:::i;:::-;16268:74;;16351:93;16440:3;16351:93;:::i;:::-;16469:2;16464:3;16460:12;16453:19;;16112:366;;;:::o;16484:::-;16626:3;16647:67;16711:2;16706:3;16647:67;:::i;:::-;16640:74;;16723:93;16812:3;16723:93;:::i;:::-;16841:2;16836:3;16832:12;16825:19;;16484:366;;;:::o;16856:::-;16998:3;17019:67;17083:2;17078:3;17019:67;:::i;:::-;17012:74;;17095:93;17184:3;17095:93;:::i;:::-;17213:2;17208:3;17204:12;17197:19;;16856:366;;;:::o;17228:::-;17370:3;17391:67;17455:2;17450:3;17391:67;:::i;:::-;17384:74;;17467:93;17556:3;17467:93;:::i;:::-;17585:2;17580:3;17576:12;17569:19;;17228:366;;;:::o;17600:::-;17742:3;17763:67;17827:2;17822:3;17763:67;:::i;:::-;17756:74;;17839:93;17928:3;17839:93;:::i;:::-;17957:2;17952:3;17948:12;17941:19;;17600:366;;;:::o;17972:::-;18114:3;18135:67;18199:2;18194:3;18135:67;:::i;:::-;18128:74;;18211:93;18300:3;18211:93;:::i;:::-;18329:2;18324:3;18320:12;18313:19;;17972:366;;;:::o;18344:::-;18486:3;18507:67;18571:2;18566:3;18507:67;:::i;:::-;18500:74;;18583:93;18672:3;18583:93;:::i;:::-;18701:2;18696:3;18692:12;18685:19;;18344:366;;;:::o;18716:400::-;18876:3;18897:84;18979:1;18974:3;18897:84;:::i;:::-;18890:91;;18990:93;19079:3;18990:93;:::i;:::-;19108:1;19103:3;19099:11;19092:18;;18716:400;;;:::o;19122:366::-;19264:3;19285:67;19349:2;19344:3;19285:67;:::i;:::-;19278:74;;19361:93;19450:3;19361:93;:::i;:::-;19479:2;19474:3;19470:12;19463:19;;19122:366;;;:::o;19494:::-;19636:3;19657:67;19721:2;19716:3;19657:67;:::i;:::-;19650:74;;19733:93;19822:3;19733:93;:::i;:::-;19851:2;19846:3;19842:12;19835:19;;19494:366;;;:::o;19866:::-;20008:3;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20105:93;20194:3;20105:93;:::i;:::-;20223:2;20218:3;20214:12;20207:19;;19866:366;;;:::o;20238:::-;20380:3;20401:67;20465:2;20460:3;20401:67;:::i;:::-;20394:74;;20477:93;20566:3;20477:93;:::i;:::-;20595:2;20590:3;20586:12;20579:19;;20238:366;;;:::o;20610:::-;20752:3;20773:67;20837:2;20832:3;20773:67;:::i;:::-;20766:74;;20849:93;20938:3;20849:93;:::i;:::-;20967:2;20962:3;20958:12;20951:19;;20610:366;;;:::o;20982:::-;21124:3;21145:67;21209:2;21204:3;21145:67;:::i;:::-;21138:74;;21221:93;21310:3;21221:93;:::i;:::-;21339:2;21334:3;21330:12;21323:19;;20982:366;;;:::o;21354:108::-;21431:24;21449:5;21431:24;:::i;:::-;21426:3;21419:37;21354:108;;:::o;21468:118::-;21555:24;21573:5;21555:24;:::i;:::-;21550:3;21543:37;21468:118;;:::o;21592:695::-;21870:3;21892:92;21980:3;21971:6;21892:92;:::i;:::-;21885:99;;22001:95;22092:3;22083:6;22001:95;:::i;:::-;21994:102;;22113:148;22257:3;22113:148;:::i;:::-;22106:155;;22278:3;22271:10;;21592:695;;;;;:::o;22293:222::-;22386:4;22424:2;22413:9;22409:18;22401:26;;22437:71;22505:1;22494:9;22490:17;22481:6;22437:71;:::i;:::-;22293:222;;;;:::o;22521:1053::-;22844:4;22882:3;22871:9;22867:19;22859:27;;22896:71;22964:1;22953:9;22949:17;22940:6;22896:71;:::i;:::-;22977:72;23045:2;23034:9;23030:18;23021:6;22977:72;:::i;:::-;23096:9;23090:4;23086:20;23081:2;23070:9;23066:18;23059:48;23124:108;23227:4;23218:6;23124:108;:::i;:::-;23116:116;;23279:9;23273:4;23269:20;23264:2;23253:9;23249:18;23242:48;23307:108;23410:4;23401:6;23307:108;:::i;:::-;23299:116;;23463:9;23457:4;23453:20;23447:3;23436:9;23432:19;23425:49;23491:76;23562:4;23553:6;23491:76;:::i;:::-;23483:84;;22521:1053;;;;;;;;:::o;23580:751::-;23803:4;23841:3;23830:9;23826:19;23818:27;;23855:71;23923:1;23912:9;23908:17;23899:6;23855:71;:::i;:::-;23936:72;24004:2;23993:9;23989:18;23980:6;23936:72;:::i;:::-;24018;24086:2;24075:9;24071:18;24062:6;24018:72;:::i;:::-;24100;24168:2;24157:9;24153:18;24144:6;24100:72;:::i;:::-;24220:9;24214:4;24210:20;24204:3;24193:9;24189:19;24182:49;24248:76;24319:4;24310:6;24248:76;:::i;:::-;24240:84;;23580:751;;;;;;;;:::o;24337:373::-;24480:4;24518:2;24507:9;24503:18;24495:26;;24567:9;24561:4;24557:20;24553:1;24542:9;24538:17;24531:47;24595:108;24698:4;24689:6;24595:108;:::i;:::-;24587:116;;24337:373;;;;:::o;24716:634::-;24937:4;24975:2;24964:9;24960:18;24952:26;;25024:9;25018:4;25014:20;25010:1;24999:9;24995:17;24988:47;25052:108;25155:4;25146:6;25052:108;:::i;:::-;25044:116;;25207:9;25201:4;25197:20;25192:2;25181:9;25177:18;25170:48;25235:108;25338:4;25329:6;25235:108;:::i;:::-;25227:116;;24716:634;;;;;:::o;25356:210::-;25443:4;25481:2;25470:9;25466:18;25458:26;;25494:65;25556:1;25545:9;25541:17;25532:6;25494:65;:::i;:::-;25356:210;;;;:::o;25572:313::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:78;25873:4;25864:6;25800:78;:::i;:::-;25792:86;;25572:313;;;;:::o;25891:419::-;26057:4;26095:2;26084:9;26080:18;26072:26;;26144:9;26138:4;26134:20;26130:1;26119:9;26115:17;26108:47;26172:131;26298:4;26172:131;:::i;:::-;26164:139;;25891:419;;;:::o;26316:::-;26482:4;26520:2;26509:9;26505:18;26497:26;;26569:9;26563:4;26559:20;26555:1;26544:9;26540:17;26533:47;26597:131;26723:4;26597:131;:::i;:::-;26589:139;;26316:419;;;:::o;26741:::-;26907:4;26945:2;26934:9;26930:18;26922:26;;26994:9;26988:4;26984:20;26980:1;26969:9;26965:17;26958:47;27022:131;27148:4;27022:131;:::i;:::-;27014:139;;26741:419;;;:::o;27166:::-;27332:4;27370:2;27359:9;27355:18;27347:26;;27419:9;27413:4;27409:20;27405:1;27394:9;27390:17;27383:47;27447:131;27573:4;27447:131;:::i;:::-;27439:139;;27166:419;;;:::o;27591:::-;27757:4;27795:2;27784:9;27780:18;27772:26;;27844:9;27838:4;27834:20;27830:1;27819:9;27815:17;27808:47;27872:131;27998:4;27872:131;:::i;:::-;27864:139;;27591:419;;;:::o;28016:::-;28182:4;28220:2;28209:9;28205:18;28197:26;;28269:9;28263:4;28259:20;28255:1;28244:9;28240:17;28233:47;28297:131;28423:4;28297:131;:::i;:::-;28289:139;;28016:419;;;:::o;28441:::-;28607:4;28645:2;28634:9;28630:18;28622:26;;28694:9;28688:4;28684:20;28680:1;28669:9;28665:17;28658:47;28722:131;28848:4;28722:131;:::i;:::-;28714:139;;28441:419;;;:::o;28866:::-;29032:4;29070:2;29059:9;29055:18;29047:26;;29119:9;29113:4;29109:20;29105:1;29094:9;29090:17;29083:47;29147:131;29273:4;29147:131;:::i;:::-;29139:139;;28866:419;;;:::o;29291:::-;29457:4;29495:2;29484:9;29480:18;29472:26;;29544:9;29538:4;29534:20;29530:1;29519:9;29515:17;29508:47;29572:131;29698:4;29572:131;:::i;:::-;29564:139;;29291:419;;;:::o;29716:::-;29882:4;29920:2;29909:9;29905:18;29897:26;;29969:9;29963:4;29959:20;29955:1;29944:9;29940:17;29933:47;29997:131;30123:4;29997:131;:::i;:::-;29989:139;;29716:419;;;:::o;30141:::-;30307:4;30345:2;30334:9;30330:18;30322:26;;30394:9;30388:4;30384:20;30380:1;30369:9;30365:17;30358:47;30422:131;30548:4;30422:131;:::i;:::-;30414:139;;30141:419;;;:::o;30566:::-;30732:4;30770:2;30759:9;30755:18;30747:26;;30819:9;30813:4;30809:20;30805:1;30794:9;30790:17;30783:47;30847:131;30973:4;30847:131;:::i;:::-;30839:139;;30566:419;;;:::o;30991:::-;31157:4;31195:2;31184:9;31180:18;31172:26;;31244:9;31238:4;31234:20;31230:1;31219:9;31215:17;31208:47;31272:131;31398:4;31272:131;:::i;:::-;31264:139;;30991:419;;;:::o;31416:::-;31582:4;31620:2;31609:9;31605:18;31597:26;;31669:9;31663:4;31659:20;31655:1;31644:9;31640:17;31633:47;31697:131;31823:4;31697:131;:::i;:::-;31689:139;;31416:419;;;:::o;31841:::-;32007:4;32045:2;32034:9;32030:18;32022:26;;32094:9;32088:4;32084:20;32080:1;32069:9;32065:17;32058:47;32122:131;32248:4;32122:131;:::i;:::-;32114:139;;31841:419;;;:::o;32266:::-;32432:4;32470:2;32459:9;32455:18;32447:26;;32519:9;32513:4;32509:20;32505:1;32494:9;32490:17;32483:47;32547:131;32673:4;32547:131;:::i;:::-;32539:139;;32266:419;;;:::o;32691:222::-;32784:4;32822:2;32811:9;32807:18;32799:26;;32835:71;32903:1;32892:9;32888:17;32879:6;32835:71;:::i;:::-;32691:222;;;;:::o;32919:332::-;33040:4;33078:2;33067:9;33063:18;33055:26;;33091:71;33159:1;33148:9;33144:17;33135:6;33091:71;:::i;:::-;33172:72;33240:2;33229:9;33225:18;33216:6;33172:72;:::i;:::-;32919:332;;;;;:::o;33257:129::-;33291:6;33318:20;;:::i;:::-;33308:30;;33347:33;33375:4;33367:6;33347:33;:::i;:::-;33257:129;;;:::o;33392:75::-;33425:6;33458:2;33452:9;33442:19;;33392:75;:::o;33473:311::-;33550:4;33640:18;33632:6;33629:30;33626:56;;;33662:18;;:::i;:::-;33626:56;33712:4;33704:6;33700:17;33692:25;;33772:4;33766;33762:15;33754:23;;33473:311;;;:::o;33790:::-;33867:4;33957:18;33949:6;33946:30;33943:56;;;33979:18;;:::i;:::-;33943:56;34029:4;34021:6;34017:17;34009:25;;34089:4;34083;34079:15;34071:23;;33790:311;;;:::o;34107:307::-;34168:4;34258:18;34250:6;34247:30;34244:56;;;34280:18;;:::i;:::-;34244:56;34318:29;34340:6;34318:29;:::i;:::-;34310:37;;34402:4;34396;34392:15;34384:23;;34107:307;;;:::o;34420:132::-;34487:4;34510:3;34502:11;;34540:4;34535:3;34531:14;34523:22;;34420:132;;;:::o;34558:141::-;34607:4;34630:3;34622:11;;34653:3;34650:1;34643:14;34687:4;34684:1;34674:18;34666:26;;34558:141;;;:::o;34705:114::-;34772:6;34806:5;34800:12;34790:22;;34705:114;;;:::o;34825:98::-;34876:6;34910:5;34904:12;34894:22;;34825:98;;;:::o;34929:99::-;34981:6;35015:5;35009:12;34999:22;;34929:99;;;:::o;35034:113::-;35104:4;35136;35131:3;35127:14;35119:22;;35034:113;;;:::o;35153:184::-;35252:11;35286:6;35281:3;35274:19;35326:4;35321:3;35317:14;35302:29;;35153:184;;;;:::o;35343:168::-;35426:11;35460:6;35455:3;35448:19;35500:4;35495:3;35491:14;35476:29;;35343:168;;;;:::o;35517:169::-;35601:11;35635:6;35630:3;35623:19;35675:4;35670:3;35666:14;35651:29;;35517:169;;;;:::o;35692:148::-;35794:11;35831:3;35816:18;;35692:148;;;;:::o;35846:305::-;35886:3;35905:20;35923:1;35905:20;:::i;:::-;35900:25;;35939:20;35957:1;35939:20;:::i;:::-;35934:25;;36093:1;36025:66;36021:74;36018:1;36015:81;36012:107;;;36099:18;;:::i;:::-;36012:107;36143:1;36140;36136:9;36129:16;;35846:305;;;;:::o;36157:185::-;36197:1;36214:20;36232:1;36214:20;:::i;:::-;36209:25;;36248:20;36266:1;36248:20;:::i;:::-;36243:25;;36287:1;36277:35;;36292:18;;:::i;:::-;36277:35;36334:1;36331;36327:9;36322:14;;36157:185;;;;:::o;36348:191::-;36388:4;36408:20;36426:1;36408:20;:::i;:::-;36403:25;;36442:20;36460:1;36442:20;:::i;:::-;36437:25;;36481:1;36478;36475:8;36472:34;;;36486:18;;:::i;:::-;36472:34;36531:1;36528;36524:9;36516:17;;36348:191;;;;:::o;36545:96::-;36582:7;36611:24;36629:5;36611:24;:::i;:::-;36600:35;;36545:96;;;:::o;36647:90::-;36681:7;36724:5;36717:13;36710:21;36699:32;;36647:90;;;:::o;36743:149::-;36779:7;36819:66;36812:5;36808:78;36797:89;;36743:149;;;:::o;36898:126::-;36935:7;36975:42;36968:5;36964:54;36953:65;;36898:126;;;:::o;37030:77::-;37067:7;37096:5;37085:16;;37030:77;;;:::o;37113:154::-;37197:6;37192:3;37187;37174:30;37259:1;37250:6;37245:3;37241:16;37234:27;37113:154;;;:::o;37273:307::-;37341:1;37351:113;37365:6;37362:1;37359:13;37351:113;;;37450:1;37445:3;37441:11;37435:18;37431:1;37426:3;37422:11;37415:39;37387:2;37384:1;37380:10;37375:15;;37351:113;;;37482:6;37479:1;37476:13;37473:101;;;37562:1;37553:6;37548:3;37544:16;37537:27;37473:101;37322:258;37273:307;;;:::o;37586:320::-;37630:6;37667:1;37661:4;37657:12;37647:22;;37714:1;37708:4;37704:12;37735:18;37725:81;;37791:4;37783:6;37779:17;37769:27;;37725:81;37853:2;37845:6;37842:14;37822:18;37819:38;37816:84;;;37872:18;;:::i;:::-;37816:84;37637:269;37586:320;;;:::o;37912:281::-;37995:27;38017:4;37995:27;:::i;:::-;37987:6;37983:40;38125:6;38113:10;38110:22;38089:18;38077:10;38074:34;38071:62;38068:88;;;38136:18;;:::i;:::-;38068:88;38176:10;38172:2;38165:22;37955:238;37912:281;;:::o;38199:233::-;38238:3;38261:24;38279:5;38261:24;:::i;:::-;38252:33;;38307:66;38300:5;38297:77;38294:103;;;38377:18;;:::i;:::-;38294:103;38424:1;38417:5;38413:13;38406:20;;38199:233;;;:::o;38438:176::-;38470:1;38487:20;38505:1;38487:20;:::i;:::-;38482:25;;38521:20;38539:1;38521:20;:::i;:::-;38516:25;;38560:1;38550:35;;38565:18;;:::i;:::-;38550:35;38606:1;38603;38599:9;38594:14;;38438:176;;;;:::o;38620:180::-;38668:77;38665:1;38658:88;38765:4;38762:1;38755:15;38789:4;38786:1;38779:15;38806:180;38854:77;38851:1;38844:88;38951:4;38948:1;38941:15;38975:4;38972:1;38965:15;38992:180;39040:77;39037:1;39030:88;39137:4;39134:1;39127:15;39161:4;39158:1;39151:15;39178:180;39226:77;39223:1;39216:88;39323:4;39320:1;39313:15;39347:4;39344:1;39337:15;39364:180;39412:77;39409:1;39402:88;39509:4;39506:1;39499:15;39533:4;39530:1;39523:15;39550:183;39585:3;39623:1;39605:16;39602:23;39599:128;;;39661:1;39658;39655;39640:23;39683:34;39714:1;39708:8;39683:34;:::i;:::-;39676:41;;39599:128;39550:183;:::o;39739:117::-;39848:1;39845;39838:12;39862:117;39971:1;39968;39961:12;39985:117;40094:1;40091;40084:12;40108:117;40217:1;40214;40207:12;40231:117;40340:1;40337;40330:12;40354:117;40463:1;40460;40453:12;40477:102;40518:6;40569:2;40565:7;40560:2;40553:5;40549:14;40545:28;40535:38;;40477:102;;;:::o;40585:106::-;40629:8;40678:5;40673:3;40669:15;40648:36;;40585:106;;;:::o;40697:239::-;40837:34;40833:1;40825:6;40821:14;40814:58;40906:22;40901:2;40893:6;40889:15;40882:47;40697:239;:::o;40942:227::-;41082:34;41078:1;41070:6;41066:14;41059:58;41151:10;41146:2;41138:6;41134:15;41127:35;40942:227;:::o;41175:230::-;41315:34;41311:1;41303:6;41299:14;41292:58;41384:13;41379:2;41371:6;41367:15;41360:38;41175:230;:::o;41411:225::-;41551:34;41547:1;41539:6;41535:14;41528:58;41620:8;41615:2;41607:6;41603:15;41596:33;41411:225;:::o;41642:223::-;41782:34;41778:1;41770:6;41766:14;41759:58;41851:6;41846:2;41838:6;41834:15;41827:31;41642:223;:::o;41871:228::-;42011:34;42007:1;41999:6;41995:14;41988:58;42080:11;42075:2;42067:6;42063:15;42056:36;41871:228;:::o;42105:224::-;42245:34;42241:1;42233:6;42229:14;42222:58;42314:7;42309:2;42301:6;42297:15;42290:32;42105:224;:::o;42335:237::-;42475:34;42471:1;42463:6;42459:14;42452:58;42544:20;42539:2;42531:6;42527:15;42520:45;42335:237;:::o;42578:222::-;42718:34;42714:1;42706:6;42702:14;42695:58;42787:5;42782:2;42774:6;42770:15;42763:30;42578:222;:::o;42806:229::-;42946:34;42942:1;42934:6;42930:14;42923:58;43015:12;43010:2;43002:6;42998:15;42991:37;42806:229;:::o;43041:155::-;43181:7;43177:1;43169:6;43165:14;43158:31;43041:155;:::o;43202:182::-;43342:34;43338:1;43330:6;43326:14;43319:58;43202:182;:::o;43390:160::-;43530:12;43526:1;43518:6;43514:14;43507:36;43390:160;:::o;43556:228::-;43696:34;43692:1;43684:6;43680:14;43673:58;43765:11;43760:2;43752:6;43748:15;43741:36;43556:228;:::o;43790:::-;43930:34;43926:1;43918:6;43914:14;43907:58;43999:11;43994:2;43986:6;43982:15;43975:36;43790:228;:::o;44024:227::-;44164:34;44160:1;44152:6;44148:14;44141:58;44233:10;44228:2;44220:6;44216:15;44209:35;44024:227;:::o;44257:220::-;44397:34;44393:1;44385:6;44381:14;44374:58;44466:3;44461:2;44453:6;44449:15;44442:28;44257:220;:::o;44483:711::-;44522:3;44560:4;44542:16;44539:26;44536:39;;;44568:5;;44536:39;44597:20;;:::i;:::-;44672:1;44654:16;44650:24;44647:1;44641:4;44626:49;44705:4;44699:11;44804:16;44797:4;44789:6;44785:17;44782:39;44749:18;44741:6;44738:30;44722:113;44719:146;;;44850:5;;;;44719:146;44896:6;44890:4;44886:17;44932:3;44926:10;44959:18;44951:6;44948:30;44945:43;;;44981:5;;;;;;44945:43;45029:6;45022:4;45017:3;45013:14;45009:27;45088:1;45070:16;45066:24;45060:4;45056:35;45051:3;45048:44;45045:57;;;45095:5;;;;;;;45045:57;45112;45160:6;45154:4;45150:17;45142:6;45138:30;45132:4;45112:57;:::i;:::-;45185:3;45178:10;;44526:668;;;;;44483:711;;:::o;45200:122::-;45273:24;45291:5;45273:24;:::i;:::-;45266:5;45263:35;45253:63;;45312:1;45309;45302:12;45253:63;45200:122;:::o;45328:116::-;45398:21;45413:5;45398:21;:::i;:::-;45391:5;45388:32;45378:60;;45434:1;45431;45424:12;45378:60;45328:116;:::o;45450:120::-;45522:23;45539:5;45522:23;:::i;:::-;45515:5;45512:34;45502:62;;45560:1;45557;45550:12;45502:62;45450:120;:::o;45576:122::-;45649:24;45667:5;45649:24;:::i;:::-;45642:5;45639:35;45629:63;;45688:1;45685;45678:12;45629:63;45576:122;:::o

Swarm Source

ipfs://154c9503005403242640ab465af3961ccc0be6ae56fc212a1b2e8ffcad3b3498
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.