ETH Price: $3,705.61 (+1.30%)
Gas: 7.32 Gwei

Token

ERC-20: ()
 

Overview

Max Total Supply

605

Holders

330

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
jbe.eth
0x21639a426a07498c4e7157ba909f92da2d57ce87
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:
OCMEarth

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 11: OCMEarthFinal.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;

import "./ERC1155.sol";
import "./Ownable.sol";
import "./ReentrancyGuard.sol";

//   
//    ______     __   __     ______     __  __     ______     __     __   __    
//   /\  __ \   /\ "-.\ \   /\  ___\   /\ \_\ \   /\  __ \   /\ \   /\ "-.\ \   
//   \ \ \/\ \  \ \ \-.  \  \ \ \____  \ \  __ \  \ \  __ \  \ \ \  \ \ \-.  \  
//    \ \_____\  \ \_\\"\_\  \ \_____\  \ \_\ \_\  \ \_\ \_\  \ \_\  \ \_\\"\_\ 
//     \/_____/   \/_/ \/_/   \/_____/   \/_/\/_/   \/_/\/_/   \/_/   \/_/ \/_/ 
//                                                                              
//    __    __     ______     __   __     __  __     ______     __  __          
//   /\ "-./  \   /\  __ \   /\ "-.\ \   /\ \/ /    /\  ___\   /\ \_\ \         
//   \ \ \-./\ \  \ \ \/\ \  \ \ \-.  \  \ \  _"-.  \ \  __\   \ \____ \        
//    \ \_\ \ \_\  \ \_____\  \ \_\\"\_\  \ \_\ \_\  \ \_____\  \/\_____\       
//     \/_/  \/_/   \/_____/   \/_/ \/_/   \/_/\/_/   \/_____/   \/_____/       
//                                                                              
//   
// 
// OnChainMonkey (OCM) Genesis was the first 100% On-Chain PFP collection in 1 transaction 
// (contract: 0x960b7a6BCD451c9968473f7bbFd9Be826EFd549A)
// 
// created by Metagood
//
// OCMEarth is a charity NFT
//

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);
        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)
            for {
                let i := 0
            } lt(i, len) {
            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)
                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)
                mstore(resultPtr, out)
                resultPtr := add(resultPtr, 4)
            }
            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
            mstore(result, encodedLen)
        }
        return string(result);
    }
}

contract OCMEarth is ERC1155, Ownable, ReentrancyGuard {
    address public OnChainMonkeyContract = 0x960b7a6BCD451c9968473f7bbFd9Be826EFd549A;
    bool public isActive = true;
    uint256 public price = 0.1 ether;
    uint256 public minted = 1;
    uint256 public supply = 1001;

    string public uri0 = "https://arweave.net/7wZ26Lua4QUqAhBB6pYcaaDrp5BaFGII4T6Sxcp15-E";
    string public uri1 = uri0;

    constructor() ERC1155(uri0)
    {
        _mint(0x164E0D92eED7C397C675FEDE671b49cE2B289d1F, 0, 1, "");
    }

    function mint(uint256 _amount)
        public
        payable
        nonReentrant
    {   
        require(isActive, "Minting is over");
        require(_amount > 0 && _amount <= 10, "Amount must be > 0 and <= 10");
        require(msg.sender == tx.origin, "You cannot mint from a smart contract");
        require(msg.value >= price * _amount, "Not enough ETH");
        require(_amount + minted <= supply, "Not enough supply");
        minted += _amount;
        _mint(msg.sender, 1, _amount, "");
    }

    // closed forever
    function closeMint() external onlyOwner {
        isActive = false;
    }

    // Withdraw
    function withdraw(address payable withdrawAddress)
        external
        payable
        nonReentrant
        onlyOwner
    {
        require(withdrawAddress != address(0), "Withdraw address cannot be zero");
        require(address(this).balance >= 0, "Not enough eth");
        payable(withdrawAddress).transfer(address(this).balance);
    }

    // can update 1/1 high resolution uri if the buyer wants it updated
    function setURI(string memory newuri) public onlyOwner {
        uri0 = newuri;
    }

    function uri(uint256 typeId) public view override returns (string memory) {
        require(typeId>=0 && typeId<2, "type err");
        string memory num;
        string memory _uri;
        if (typeId == 0) {
            _uri = uri0;
            num = ' 1 of 1","attributes":[{"trait_type": "Resolution", "value": "14880 pixels';
        } else {
            _uri = uri1;
            num = '","attributes":[{"trait_type": "Resolution", "value": "1600 pixels';
        }
        return string(abi.encodePacked('data:application/json;base64,', Base64.encode(abi.encodePacked(
            '{"name": "OCM Earth', num, '"}],"image": "', _uri,'"}'))));
    }
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 3 of 11: ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

File 4 of 11: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 11: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC1155.sol";

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

File 7 of 11: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

File 8 of 11: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 11 of 11: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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":[],"name":"OnChainMonkeyContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uri0","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uri1","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405273960b7a6bcd451c9968473f7bbfd9be826efd549a600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560146101000a81548160ff02191690831515021790555067016345785d8a000060065560016007556103e96008556040518060600160405280603f8152602001620050fe603f913960099080519060200190620000bc9291906200074c565b506009600a908054620000cf90620008c3565b620000dc929190620007dd565b50348015620000ea57600080fd5b5060098054620000fa90620008c3565b80601f01602080910402602001604051908101604052809291908181526020018280546200012890620008c3565b8015620001795780601f106200014d5761010080835404028352916020019162000179565b820191906000526020600020905b8154815290600101906020018083116200015b57829003601f168201915b50505050506200018f81620001f760201b60201c565b50620001b0620001a46200021360201b60201c565b6200021b60201b60201c565b6001600481905550620001f173164e0d92eed7c397c675fede671b49ce2b289d1f6000600160405180602001604052806000815250620002e160201b60201c565b62000f69565b80600290805190602001906200020f9291906200074c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000354576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200034b9062000980565b60405180910390fd5b6000620003666200021360201b60201c565b90506200039f816000876200038188620004a660201b60201c565b6200039288620004a660201b60201c565b876200052760201b60201c565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004009190620009db565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516200048092919062000a49565b60405180910390a46200049f816000878787876200052f60201b60201c565b5050505050565b60606000600167ffffffffffffffff811115620004c857620004c762000a76565b5b604051908082528060200260200182016040528015620004f75781602001602082028036833780820191505090505b509050828160008151811062000512576200051162000aa5565b5b60200260200101818152505080915050919050565b505050505050565b6200055b8473ffffffffffffffffffffffffffffffffffffffff166200072960201b620013f81760201c565b1562000721578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401620005a495949392919062000bbd565b6020604051808303816000875af1925050508015620005e357506040513d601f19601f82011682018060405250810190620005e0919062000c8d565b60015b6200069557620005f262000ccc565b806308c379a014156200065657506200060a62000d27565b8062000617575062000658565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064d919062000e15565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068c9062000eaf565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146200071f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007169062000f47565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546200075a90620008c3565b90600052602060002090601f0160209004810192826200077e5760008555620007ca565b82601f106200079957805160ff1916838001178555620007ca565b82800160010185558215620007ca579182015b82811115620007c9578251825591602001919060010190620007ac565b5b509050620007d9919062000875565b5090565b828054620007eb90620008c3565b90600052602060002090601f0160209004810192826200080f576000855562000862565b82601f1062000822578054855562000862565b828001600101855582156200086257600052602060002091601f016020900482015b828111156200086157825482559160010191906001019062000844565b5b50905062000871919062000875565b5090565b5b808211156200089057600081600090555060010162000876565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008dc57607f821691505b60208210811415620008f357620008f262000894565b5b50919050565b600082825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600062000968602183620008f9565b915062000975826200090a565b604082019050919050565b600060208201905081810360008301526200099b8162000959565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009e882620009a2565b9150620009f583620009a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000a2d5762000a2c620009ac565b5b828201905092915050565b62000a4381620009a2565b82525050565b600060408201905062000a60600083018562000a38565b62000a6f602083018462000a38565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b018262000ad4565b9050919050565b62000b138162000af4565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000b5557808201518184015260208101905062000b38565b8381111562000b65576000848401525b50505050565b6000601f19601f8301169050919050565b600062000b898262000b19565b62000b95818562000b24565b935062000ba781856020860162000b35565b62000bb28162000b6b565b840191505092915050565b600060a08201905062000bd4600083018862000b08565b62000be3602083018762000b08565b62000bf2604083018662000a38565b62000c01606083018562000a38565b818103608083015262000c15818462000b7c565b90509695505050505050565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000c678162000c30565b811462000c7357600080fd5b50565b60008151905062000c878162000c5c565b92915050565b60006020828403121562000ca65762000ca562000c2b565b5b600062000cb68482850162000c76565b91505092915050565b60008160e01c9050919050565b600060033d111562000cee5760046000803e62000ceb60005162000cbf565b90505b90565b62000cfc8262000b6b565b810181811067ffffffffffffffff8211171562000d1e5762000d1d62000a76565b5b80604052505050565b600060443d101562000d395762000dc6565b62000d4362000c21565b60043d036004823e80513d602482011167ffffffffffffffff8211171562000d6d57505062000dc6565b808201805167ffffffffffffffff81111562000d8d575050505062000dc6565b80602083010160043d03850181111562000dac57505050505062000dc6565b62000dbd8260200185018662000cf1565b82955050505050505b90565b600081519050919050565b600062000de18262000dc9565b62000ded8185620008f9565b935062000dff81856020860162000b35565b62000e0a8162000b6b565b840191505092915050565b6000602082019050818103600083015262000e31818462000dd4565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600062000e97603483620008f9565b915062000ea48262000e39565b604082019050919050565b6000602082019050818103600083015262000eca8162000e88565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600062000f2f602883620008f9565b915062000f3c8262000ed1565b604082019050919050565b6000602082019050818103600083015262000f628162000f20565b9050919050565b6141858062000f796000396000f3fe6080604052600436106101345760003560e01c806364f101f0116100ab578063a22cb4651161006f578063a22cb465146103e7578063b7e22ac314610410578063d778e7dc1461043b578063e985e9c514610466578063f242432a146104a3578063f2fde38b146104cc57610134565b806364f101f014610347578063715018a61461035e5780638da5cb5b14610375578063a035b1fe146103a0578063a0712d68146103cb57610134565b806322f3e2d4116100fd57806322f3e2d4146102445780632eb2c2d61461026f5780634e1273f4146102985780634f02c420146102d557806351cff8d9146103005780635abec3091461031c57610134565b8062fdd58e1461013957806301ffc9a71461017657806302fe5305146101b3578063047fc9aa146101dc5780630e89341c14610207575b600080fd5b34801561014557600080fd5b50610160600480360381019061015b9190612501565b6104f5565b60405161016d9190612550565b60405180910390f35b34801561018257600080fd5b5061019d600480360381019061019891906125c3565b6105be565b6040516101aa919061260b565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d5919061276c565b6106a0565b005b3480156101e857600080fd5b506101f1610736565b6040516101fe9190612550565b60405180910390f35b34801561021357600080fd5b5061022e600480360381019061022991906127b5565b61073c565b60405161023b919061286a565b60405180910390f35b34801561025057600080fd5b50610259610942565b604051610266919061260b565b60405180910390f35b34801561027b57600080fd5b50610296600480360381019061029191906129f5565b610955565b005b3480156102a457600080fd5b506102bf60048036038101906102ba9190612b87565b6109f6565b6040516102cc9190612cbd565b60405180910390f35b3480156102e157600080fd5b506102ea610b0f565b6040516102f79190612550565b60405180910390f35b61031a60048036038101906103159190612d1d565b610b15565b005b34801561032857600080fd5b50610331610ce5565b60405161033e919061286a565b60405180910390f35b34801561035357600080fd5b5061035c610d73565b005b34801561036a57600080fd5b50610373610e0c565b005b34801561038157600080fd5b5061038a610e94565b6040516103979190612d59565b60405180910390f35b3480156103ac57600080fd5b506103b5610ebe565b6040516103c29190612550565b60405180910390f35b6103e560048036038101906103e091906127b5565b610ec4565b005b3480156103f357600080fd5b5061040e60048036038101906104099190612da0565b611101565b005b34801561041c57600080fd5b50610425611117565b6040516104329190612d59565b60405180910390f35b34801561044757600080fd5b5061045061113d565b60405161045d919061286a565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190612de0565b6111cb565b60405161049a919061260b565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190612e20565b61125f565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190612eb7565b611300565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055d90612f56565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061069957506106988261141b565b5b9050919050565b6106a8611485565b73ffffffffffffffffffffffffffffffffffffffff166106c6610e94565b73ffffffffffffffffffffffffffffffffffffffff161461071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071390612fc2565b60405180910390fd5b80600990805190602001906107329291906123b6565b5050565b60085481565b60606000821015801561074f5750600282105b61078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107859061302e565b60405180910390fd5b606080600084141561084757600980546107a79061307d565b80601f01602080910402602001604051908101604052809291908181526020018280546107d39061307d565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b505050505090506040518060800160405280604a8152602001614084604a913991506108f0565b600a80546108549061307d565b80601f01602080910402602001604051908101604052809291908181526020018280546108809061307d565b80156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b5050505050905060405180608001604052806042815260200161410e6042913991505b61091a82826040516020016109069291906131cf565b60405160208183030381529060405261148d565b60405160200161092a9190613260565b60405160208183030381529060405292505050919050565b600560149054906101000a900460ff1681565b61095d611485565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28561099d611485565b6111cb565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906132f4565b60405180910390fd5b6109ef8585858585611625565b5050505050565b60608151835114610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3390613386565b60405180910390fd5b6000835167ffffffffffffffff811115610a5957610a58612641565b5b604051908082528060200260200182016040528015610a875781602001602082028036833780820191505090505b50905060005b8451811015610b0457610ad4858281518110610aac57610aab6133a6565b5b6020026020010151858381518110610ac757610ac66133a6565b5b60200260200101516104f5565b828281518110610ae757610ae66133a6565b5b60200260200101818152505080610afd90613404565b9050610a8d565b508091505092915050565b60075481565b60026004541415610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613499565b60405180910390fd5b6002600481905550610b6b611485565b73ffffffffffffffffffffffffffffffffffffffff16610b89610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690612fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613505565b60405180910390fd5b6000471015610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90613571565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610cd9573d6000803e3d6000fd5b50600160048190555050565b60098054610cf29061307d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1e9061307d565b8015610d6b5780601f10610d4057610100808354040283529160200191610d6b565b820191906000526020600020905b815481529060010190602001808311610d4e57829003601f168201915b505050505081565b610d7b611485565b73ffffffffffffffffffffffffffffffffffffffff16610d99610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612fc2565b60405180910390fd5b6000600560146101000a81548160ff021916908315150217905550565b610e14611485565b73ffffffffffffffffffffffffffffffffffffffff16610e32610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90612fc2565b60405180910390fd5b610e926000611939565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b60026004541415610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613499565b60405180910390fd5b6002600481905550600560149054906101000a900460ff16610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f58906135dd565b60405180910390fd5b600081118015610f725750600a8111155b610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890613649565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906136db565b60405180910390fd5b8060065461102d91906136fb565b34101561106f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611066906137a1565b60405180910390fd5b6008546007548261108091906137c1565b11156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613863565b60405180910390fd5b80600760008282546110d391906137c1565b925050819055506110f633600183604051806020016040528060008152506119ff565b600160048190555050565b61111361110c611485565b8383611b95565b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a805461114a9061307d565b80601f01602080910402602001604051908101604052809291908181526020018280546111769061307d565b80156111c35780601f10611198576101008083540402835291602001916111c3565b820191906000526020600020905b8154815290600101906020018083116111a657829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611267611485565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112ad57506112ac856112a7611485565b6111cb565b5b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906138f5565b60405180910390fd5b6112f98585858585611d02565b5050505050565b611308611485565b73ffffffffffffffffffffffffffffffffffffffff16611326610e94565b73ffffffffffffffffffffffffffffffffffffffff161461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390612fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613987565b60405180910390fd5b6113f581611939565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b606060008251905060008114156114b65760405180602001604052806000815250915050611620565b600060036002836114c791906137c1565b6114d191906139d6565b60046114dd91906136fb565b905060006020826114ee91906137c1565b67ffffffffffffffff81111561150757611506612641565b5b6040519080825280601f01601f1916602001820160405280156115395781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016140ce604091399050600181016020830160005b868110156115dd5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050611564565b5060038606600181146115f7576002811461160757611612565b613d3d60f01b6002830352611612565b603d60f81b60018303525b508484525050819450505050505b919050565b8151835114611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613a79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090613b0b565b60405180910390fd5b60006116e3611485565b90506116f3818787878787611f84565b60005b84518110156118a4576000858281518110611714576117136133a6565b5b602002602001015190506000858381518110611733576117326133a6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90613b9d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188991906137c1565b925050819055505050508061189d90613404565b90506116f6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161191b929190613bbd565b60405180910390a4611931818787878787611f8c565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613c66565b60405180910390fd5b6000611a79611485565b9050611a9a81600087611a8b88612164565b611a9488612164565b87611f84565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af991906137c1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b77929190613c86565b60405180910390a4611b8e816000878787876121de565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613d21565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf5919061260b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990613b0b565b60405180910390fd5b6000611d7c611485565b9050611d9c818787611d8d88612164565b611d9688612164565b87611f84565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90613b9d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee891906137c1565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611f65929190613c86565b60405180910390a4611f7b8288888888886121de565b50505050505050565b505050505050565b611fab8473ffffffffffffffffffffffffffffffffffffffff166113f8565b1561215c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ff1959493929190613d96565b6020604051808303816000875af192505050801561202d57506040513d601f19601f8201168201806040525081019061202a9190613e13565b60015b6120d357612039613e4d565b806308c379a01415612096575061204e613e6f565b806120595750612098565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d919061286a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ca90613f77565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461215a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215190614009565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561218357612182612641565b5b6040519080825280602002602001820160405280156121b15781602001602082028036833780820191505090505b50905082816000815181106121c9576121c86133a6565b5b60200260200101818152505080915050919050565b6121fd8473ffffffffffffffffffffffffffffffffffffffff166113f8565b156123ae578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612243959493929190614029565b6020604051808303816000875af192505050801561227f57506040513d601f19601f8201168201806040525081019061227c9190613e13565b60015b6123255761228b613e4d565b806308c379a014156122e857506122a0613e6f565b806122ab57506122ea565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df919061286a565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613f77565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614009565b60405180910390fd5b505b505050505050565b8280546123c29061307d565b90600052602060002090601f0160209004810192826123e4576000855561242b565b82601f106123fd57805160ff191683800117855561242b565b8280016001018555821561242b579182015b8281111561242a57825182559160200191906001019061240f565b5b509050612438919061243c565b5090565b5b8082111561245557600081600090555060010161243d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124988261246d565b9050919050565b6124a88161248d565b81146124b357600080fd5b50565b6000813590506124c58161249f565b92915050565b6000819050919050565b6124de816124cb565b81146124e957600080fd5b50565b6000813590506124fb816124d5565b92915050565b6000806040838503121561251857612517612463565b5b6000612526858286016124b6565b9250506020612537858286016124ec565b9150509250929050565b61254a816124cb565b82525050565b60006020820190506125656000830184612541565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125a08161256b565b81146125ab57600080fd5b50565b6000813590506125bd81612597565b92915050565b6000602082840312156125d9576125d8612463565b5b60006125e7848285016125ae565b91505092915050565b60008115159050919050565b612605816125f0565b82525050565b600060208201905061262060008301846125fc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61267982612630565b810181811067ffffffffffffffff8211171561269857612697612641565b5b80604052505050565b60006126ab612459565b90506126b78282612670565b919050565b600067ffffffffffffffff8211156126d7576126d6612641565b5b6126e082612630565b9050602081019050919050565b82818337600083830152505050565b600061270f61270a846126bc565b6126a1565b90508281526020810184848401111561272b5761272a61262b565b5b6127368482856126ed565b509392505050565b600082601f83011261275357612752612626565b5b81356127638482602086016126fc565b91505092915050565b60006020828403121561278257612781612463565b5b600082013567ffffffffffffffff8111156127a05761279f612468565b5b6127ac8482850161273e565b91505092915050565b6000602082840312156127cb576127ca612463565b5b60006127d9848285016124ec565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561281c578082015181840152602081019050612801565b8381111561282b576000848401525b50505050565b600061283c826127e2565b61284681856127ed565b93506128568185602086016127fe565b61285f81612630565b840191505092915050565b600060208201905081810360008301526128848184612831565b905092915050565b600067ffffffffffffffff8211156128a7576128a6612641565b5b602082029050602081019050919050565b600080fd5b60006128d06128cb8461288c565b6126a1565b905080838252602082019050602084028301858111156128f3576128f26128b8565b5b835b8181101561291c578061290888826124ec565b8452602084019350506020810190506128f5565b5050509392505050565b600082601f83011261293b5761293a612626565b5b813561294b8482602086016128bd565b91505092915050565b600067ffffffffffffffff82111561296f5761296e612641565b5b61297882612630565b9050602081019050919050565b600061299861299384612954565b6126a1565b9050828152602081018484840111156129b4576129b361262b565b5b6129bf8482856126ed565b509392505050565b600082601f8301126129dc576129db612626565b5b81356129ec848260208601612985565b91505092915050565b600080600080600060a08688031215612a1157612a10612463565b5b6000612a1f888289016124b6565b9550506020612a30888289016124b6565b945050604086013567ffffffffffffffff811115612a5157612a50612468565b5b612a5d88828901612926565b935050606086013567ffffffffffffffff811115612a7e57612a7d612468565b5b612a8a88828901612926565b925050608086013567ffffffffffffffff811115612aab57612aaa612468565b5b612ab7888289016129c7565b9150509295509295909350565b600067ffffffffffffffff821115612adf57612ade612641565b5b602082029050602081019050919050565b6000612b03612afe84612ac4565b6126a1565b90508083825260208201905060208402830185811115612b2657612b256128b8565b5b835b81811015612b4f5780612b3b88826124b6565b845260208401935050602081019050612b28565b5050509392505050565b600082601f830112612b6e57612b6d612626565b5b8135612b7e848260208601612af0565b91505092915050565b60008060408385031215612b9e57612b9d612463565b5b600083013567ffffffffffffffff811115612bbc57612bbb612468565b5b612bc885828601612b59565b925050602083013567ffffffffffffffff811115612be957612be8612468565b5b612bf585828601612926565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c34816124cb565b82525050565b6000612c468383612c2b565b60208301905092915050565b6000602082019050919050565b6000612c6a82612bff565b612c748185612c0a565b9350612c7f83612c1b565b8060005b83811015612cb0578151612c978882612c3a565b9750612ca283612c52565b925050600181019050612c83565b5085935050505092915050565b60006020820190508181036000830152612cd78184612c5f565b905092915050565b6000612cea8261246d565b9050919050565b612cfa81612cdf565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612463565b5b6000612d4184828501612d08565b91505092915050565b612d538161248d565b82525050565b6000602082019050612d6e6000830184612d4a565b92915050565b612d7d816125f0565b8114612d8857600080fd5b50565b600081359050612d9a81612d74565b92915050565b60008060408385031215612db757612db6612463565b5b6000612dc5858286016124b6565b9250506020612dd685828601612d8b565b9150509250929050565b60008060408385031215612df757612df6612463565b5b6000612e05858286016124b6565b9250506020612e16858286016124b6565b9150509250929050565b600080600080600060a08688031215612e3c57612e3b612463565b5b6000612e4a888289016124b6565b9550506020612e5b888289016124b6565b9450506040612e6c888289016124ec565b9350506060612e7d888289016124ec565b925050608086013567ffffffffffffffff811115612e9e57612e9d612468565b5b612eaa888289016129c7565b9150509295509295909350565b600060208284031215612ecd57612ecc612463565b5b6000612edb848285016124b6565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f40602b836127ed565b9150612f4b82612ee4565b604082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fac6020836127ed565b9150612fb782612f76565b602082019050919050565b60006020820190508181036000830152612fdb81612f9f565b9050919050565b7f7479706520657272000000000000000000000000000000000000000000000000600082015250565b60006130186008836127ed565b915061302382612fe2565b602082019050919050565b600060208201905081810360008301526130478161300b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061309557607f821691505b602082108114156130a9576130a861304e565b5b50919050565b600081905092915050565b7f7b226e616d65223a20224f434d20456172746800000000000000000000000000600082015250565b60006130f06013836130af565b91506130fb826130ba565b601382019050919050565b6000613111826127e2565b61311b81856130af565b935061312b8185602086016127fe565b80840191505092915050565b7f227d5d2c22696d616765223a2022000000000000000000000000000000000000600082015250565b600061316d600e836130af565b915061317882613137565b600e82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b60006131b96002836130af565b91506131c482613183565b600282019050919050565b60006131da826130e3565b91506131e68285613106565b91506131f182613160565b91506131fd8284613106565b9150613208826131ac565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061324a601d836130af565b915061325582613214565b601d82019050919050565b600061326b8261323d565b91506132778284613106565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006132de6032836127ed565b91506132e982613282565b604082019050919050565b6000602082019050818103600083015261330d816132d1565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006133706029836127ed565b915061337b82613314565b604082019050919050565b6000602082019050818103600083015261339f81613363565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061340f826124cb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613442576134416133d5565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613483601f836127ed565b915061348e8261344d565b602082019050919050565b600060208201905081810360008301526134b281613476565b9050919050565b7f576974686472617720616464726573732063616e6e6f74206265207a65726f00600082015250565b60006134ef601f836127ed565b91506134fa826134b9565b602082019050919050565b6000602082019050818103600083015261351e816134e2565b9050919050565b7f4e6f7420656e6f75676820657468000000000000000000000000000000000000600082015250565b600061355b600e836127ed565b915061356682613525565b602082019050919050565b6000602082019050818103600083015261358a8161354e565b9050919050565b7f4d696e74696e67206973206f7665720000000000000000000000000000000000600082015250565b60006135c7600f836127ed565b91506135d282613591565b602082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f416d6f756e74206d757374206265203e203020616e64203c3d20313000000000600082015250565b6000613633601c836127ed565b915061363e826135fd565b602082019050919050565b6000602082019050818103600083015261366281613626565b9050919050565b7f596f752063616e6e6f74206d696e742066726f6d206120736d61727420636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006136c56025836127ed565b91506136d082613669565b604082019050919050565b600060208201905081810360008301526136f4816136b8565b9050919050565b6000613706826124cb565b9150613711836124cb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561374a576137496133d5565b5b828202905092915050565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b600061378b600e836127ed565b915061379682613755565b602082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b60006137cc826124cb565b91506137d7836124cb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561380c5761380b6133d5565b5b828201905092915050565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b600061384d6011836127ed565b915061385882613817565b602082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006138df6029836127ed565b91506138ea82613883565b604082019050919050565b6000602082019050818103600083015261390e816138d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139716026836127ed565b915061397c82613915565b604082019050919050565b600060208201905081810360008301526139a081613964565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139e1826124cb565b91506139ec836124cb565b9250826139fc576139fb6139a7565b5b828204905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613a636028836127ed565b9150613a6e82613a07565b604082019050919050565b60006020820190508181036000830152613a9281613a56565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613af56025836127ed565b9150613b0082613a99565b604082019050919050565b60006020820190508181036000830152613b2481613ae8565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613b87602a836127ed565b9150613b9282613b2b565b604082019050919050565b60006020820190508181036000830152613bb681613b7a565b9050919050565b60006040820190508181036000830152613bd78185612c5f565b90508181036020830152613beb8184612c5f565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c506021836127ed565b9150613c5b82613bf4565b604082019050919050565b60006020820190508181036000830152613c7f81613c43565b9050919050565b6000604082019050613c9b6000830185612541565b613ca86020830184612541565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613d0b6029836127ed565b9150613d1682613caf565b604082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d6882613d41565b613d728185613d4c565b9350613d828185602086016127fe565b613d8b81612630565b840191505092915050565b600060a082019050613dab6000830188612d4a565b613db86020830187612d4a565b8181036040830152613dca8186612c5f565b90508181036060830152613dde8185612c5f565b90508181036080830152613df28184613d5d565b90509695505050505050565b600081519050613e0d81612597565b92915050565b600060208284031215613e2957613e28612463565b5b6000613e3784828501613dfe565b91505092915050565b60008160e01c9050919050565b600060033d1115613e6c5760046000803e613e69600051613e40565b90505b90565b600060443d1015613e7f57613f02565b613e87612459565b60043d036004823e80513d602482011167ffffffffffffffff82111715613eaf575050613f02565b808201805167ffffffffffffffff811115613ecd5750505050613f02565b80602083010160043d038501811115613eea575050505050613f02565b613ef982602001850186612670565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613f616034836127ed565b9150613f6c82613f05565b604082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613ff36028836127ed565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b600060a08201905061403e6000830188612d4a565b61404b6020830187612d4a565b6140586040830186612541565b6140656060830185612541565b81810360808301526140778184613d5d565b9050969550505050505056fe2031206f662031222c2261747472696275746573223a5b7b2274726169745f74797065223a20225265736f6c7574696f6e222c202276616c7565223a2022313438383020706978656c734142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f222c2261747472696275746573223a5b7b2274726169745f74797065223a20225265736f6c7574696f6e222c202276616c7565223a20223136303020706978656c73a2646970667358221220769958ee3c38a4fbec9ed6d623099ee38d3dc5dd6fbf03dafab2cf008b60f9b164736f6c634300080b003368747470733a2f2f617277656176652e6e65742f37775a32364c75613451557141684242367059636161447270354261464749493454365378637031352d45

Deployed Bytecode

0x6080604052600436106101345760003560e01c806364f101f0116100ab578063a22cb4651161006f578063a22cb465146103e7578063b7e22ac314610410578063d778e7dc1461043b578063e985e9c514610466578063f242432a146104a3578063f2fde38b146104cc57610134565b806364f101f014610347578063715018a61461035e5780638da5cb5b14610375578063a035b1fe146103a0578063a0712d68146103cb57610134565b806322f3e2d4116100fd57806322f3e2d4146102445780632eb2c2d61461026f5780634e1273f4146102985780634f02c420146102d557806351cff8d9146103005780635abec3091461031c57610134565b8062fdd58e1461013957806301ffc9a71461017657806302fe5305146101b3578063047fc9aa146101dc5780630e89341c14610207575b600080fd5b34801561014557600080fd5b50610160600480360381019061015b9190612501565b6104f5565b60405161016d9190612550565b60405180910390f35b34801561018257600080fd5b5061019d600480360381019061019891906125c3565b6105be565b6040516101aa919061260b565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d5919061276c565b6106a0565b005b3480156101e857600080fd5b506101f1610736565b6040516101fe9190612550565b60405180910390f35b34801561021357600080fd5b5061022e600480360381019061022991906127b5565b61073c565b60405161023b919061286a565b60405180910390f35b34801561025057600080fd5b50610259610942565b604051610266919061260b565b60405180910390f35b34801561027b57600080fd5b50610296600480360381019061029191906129f5565b610955565b005b3480156102a457600080fd5b506102bf60048036038101906102ba9190612b87565b6109f6565b6040516102cc9190612cbd565b60405180910390f35b3480156102e157600080fd5b506102ea610b0f565b6040516102f79190612550565b60405180910390f35b61031a60048036038101906103159190612d1d565b610b15565b005b34801561032857600080fd5b50610331610ce5565b60405161033e919061286a565b60405180910390f35b34801561035357600080fd5b5061035c610d73565b005b34801561036a57600080fd5b50610373610e0c565b005b34801561038157600080fd5b5061038a610e94565b6040516103979190612d59565b60405180910390f35b3480156103ac57600080fd5b506103b5610ebe565b6040516103c29190612550565b60405180910390f35b6103e560048036038101906103e091906127b5565b610ec4565b005b3480156103f357600080fd5b5061040e60048036038101906104099190612da0565b611101565b005b34801561041c57600080fd5b50610425611117565b6040516104329190612d59565b60405180910390f35b34801561044757600080fd5b5061045061113d565b60405161045d919061286a565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190612de0565b6111cb565b60405161049a919061260b565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190612e20565b61125f565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190612eb7565b611300565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055d90612f56565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061069957506106988261141b565b5b9050919050565b6106a8611485565b73ffffffffffffffffffffffffffffffffffffffff166106c6610e94565b73ffffffffffffffffffffffffffffffffffffffff161461071c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071390612fc2565b60405180910390fd5b80600990805190602001906107329291906123b6565b5050565b60085481565b60606000821015801561074f5750600282105b61078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107859061302e565b60405180910390fd5b606080600084141561084757600980546107a79061307d565b80601f01602080910402602001604051908101604052809291908181526020018280546107d39061307d565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b505050505090506040518060800160405280604a8152602001614084604a913991506108f0565b600a80546108549061307d565b80601f01602080910402602001604051908101604052809291908181526020018280546108809061307d565b80156108cd5780601f106108a2576101008083540402835291602001916108cd565b820191906000526020600020905b8154815290600101906020018083116108b057829003601f168201915b5050505050905060405180608001604052806042815260200161410e6042913991505b61091a82826040516020016109069291906131cf565b60405160208183030381529060405261148d565b60405160200161092a9190613260565b60405160208183030381529060405292505050919050565b600560149054906101000a900460ff1681565b61095d611485565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28561099d611485565b6111cb565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d9906132f4565b60405180910390fd5b6109ef8585858585611625565b5050505050565b60608151835114610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3390613386565b60405180910390fd5b6000835167ffffffffffffffff811115610a5957610a58612641565b5b604051908082528060200260200182016040528015610a875781602001602082028036833780820191505090505b50905060005b8451811015610b0457610ad4858281518110610aac57610aab6133a6565b5b6020026020010151858381518110610ac757610ac66133a6565b5b60200260200101516104f5565b828281518110610ae757610ae66133a6565b5b60200260200101818152505080610afd90613404565b9050610a8d565b508091505092915050565b60075481565b60026004541415610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5290613499565b60405180910390fd5b6002600481905550610b6b611485565b73ffffffffffffffffffffffffffffffffffffffff16610b89610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690612fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613505565b60405180910390fd5b6000471015610c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8a90613571565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610cd9573d6000803e3d6000fd5b50600160048190555050565b60098054610cf29061307d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1e9061307d565b8015610d6b5780601f10610d4057610100808354040283529160200191610d6b565b820191906000526020600020905b815481529060010190602001808311610d4e57829003601f168201915b505050505081565b610d7b611485565b73ffffffffffffffffffffffffffffffffffffffff16610d99610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690612fc2565b60405180910390fd5b6000600560146101000a81548160ff021916908315150217905550565b610e14611485565b73ffffffffffffffffffffffffffffffffffffffff16610e32610e94565b73ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90612fc2565b60405180910390fd5b610e926000611939565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b60026004541415610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613499565b60405180910390fd5b6002600481905550600560149054906101000a900460ff16610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f58906135dd565b60405180910390fd5b600081118015610f725750600a8111155b610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890613649565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611016906136db565b60405180910390fd5b8060065461102d91906136fb565b34101561106f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611066906137a1565b60405180910390fd5b6008546007548261108091906137c1565b11156110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b890613863565b60405180910390fd5b80600760008282546110d391906137c1565b925050819055506110f633600183604051806020016040528060008152506119ff565b600160048190555050565b61111361110c611485565b8383611b95565b5050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a805461114a9061307d565b80601f01602080910402602001604051908101604052809291908181526020018280546111769061307d565b80156111c35780601f10611198576101008083540402835291602001916111c3565b820191906000526020600020905b8154815290600101906020018083116111a657829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611267611485565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112ad57506112ac856112a7611485565b6111cb565b5b6112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906138f5565b60405180910390fd5b6112f98585858585611d02565b5050505050565b611308611485565b73ffffffffffffffffffffffffffffffffffffffff16611326610e94565b73ffffffffffffffffffffffffffffffffffffffff161461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390612fc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613987565b60405180910390fd5b6113f581611939565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b606060008251905060008114156114b65760405180602001604052806000815250915050611620565b600060036002836114c791906137c1565b6114d191906139d6565b60046114dd91906136fb565b905060006020826114ee91906137c1565b67ffffffffffffffff81111561150757611506612641565b5b6040519080825280601f01601f1916602001820160405280156115395781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016140ce604091399050600181016020830160005b868110156115dd5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050611564565b5060038606600181146115f7576002811461160757611612565b613d3d60f01b6002830352611612565b603d60f81b60018303525b508484525050819450505050505b919050565b8151835114611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613a79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090613b0b565b60405180910390fd5b60006116e3611485565b90506116f3818787878787611f84565b60005b84518110156118a4576000858281518110611714576117136133a6565b5b602002602001015190506000858381518110611733576117326133a6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90613b9d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188991906137c1565b925050819055505050508061189d90613404565b90506116f6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161191b929190613bbd565b60405180910390a4611931818787878787611f8c565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690613c66565b60405180910390fd5b6000611a79611485565b9050611a9a81600087611a8b88612164565b611a9488612164565b87611f84565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611af991906137c1565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611b77929190613c86565b60405180910390a4611b8e816000878787876121de565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613d21565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cf5919061260b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6990613b0b565b60405180910390fd5b6000611d7c611485565b9050611d9c818787611d8d88612164565b611d9688612164565b87611f84565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90613b9d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ee891906137c1565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611f65929190613c86565b60405180910390a4611f7b8288888888886121de565b50505050505050565b505050505050565b611fab8473ffffffffffffffffffffffffffffffffffffffff166113f8565b1561215c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611ff1959493929190613d96565b6020604051808303816000875af192505050801561202d57506040513d601f19601f8201168201806040525081019061202a9190613e13565b60015b6120d357612039613e4d565b806308c379a01415612096575061204e613e6f565b806120595750612098565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d919061286a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ca90613f77565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461215a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215190614009565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561218357612182612641565b5b6040519080825280602002602001820160405280156121b15781602001602082028036833780820191505090505b50905082816000815181106121c9576121c86133a6565b5b60200260200101818152505080915050919050565b6121fd8473ffffffffffffffffffffffffffffffffffffffff166113f8565b156123ae578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612243959493929190614029565b6020604051808303816000875af192505050801561227f57506040513d601f19601f8201168201806040525081019061227c9190613e13565b60015b6123255761228b613e4d565b806308c379a014156122e857506122a0613e6f565b806122ab57506122ea565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df919061286a565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613f77565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614009565b60405180910390fd5b505b505050505050565b8280546123c29061307d565b90600052602060002090601f0160209004810192826123e4576000855561242b565b82601f106123fd57805160ff191683800117855561242b565b8280016001018555821561242b579182015b8281111561242a57825182559160200191906001019061240f565b5b509050612438919061243c565b5090565b5b8082111561245557600081600090555060010161243d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124988261246d565b9050919050565b6124a88161248d565b81146124b357600080fd5b50565b6000813590506124c58161249f565b92915050565b6000819050919050565b6124de816124cb565b81146124e957600080fd5b50565b6000813590506124fb816124d5565b92915050565b6000806040838503121561251857612517612463565b5b6000612526858286016124b6565b9250506020612537858286016124ec565b9150509250929050565b61254a816124cb565b82525050565b60006020820190506125656000830184612541565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125a08161256b565b81146125ab57600080fd5b50565b6000813590506125bd81612597565b92915050565b6000602082840312156125d9576125d8612463565b5b60006125e7848285016125ae565b91505092915050565b60008115159050919050565b612605816125f0565b82525050565b600060208201905061262060008301846125fc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61267982612630565b810181811067ffffffffffffffff8211171561269857612697612641565b5b80604052505050565b60006126ab612459565b90506126b78282612670565b919050565b600067ffffffffffffffff8211156126d7576126d6612641565b5b6126e082612630565b9050602081019050919050565b82818337600083830152505050565b600061270f61270a846126bc565b6126a1565b90508281526020810184848401111561272b5761272a61262b565b5b6127368482856126ed565b509392505050565b600082601f83011261275357612752612626565b5b81356127638482602086016126fc565b91505092915050565b60006020828403121561278257612781612463565b5b600082013567ffffffffffffffff8111156127a05761279f612468565b5b6127ac8482850161273e565b91505092915050565b6000602082840312156127cb576127ca612463565b5b60006127d9848285016124ec565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561281c578082015181840152602081019050612801565b8381111561282b576000848401525b50505050565b600061283c826127e2565b61284681856127ed565b93506128568185602086016127fe565b61285f81612630565b840191505092915050565b600060208201905081810360008301526128848184612831565b905092915050565b600067ffffffffffffffff8211156128a7576128a6612641565b5b602082029050602081019050919050565b600080fd5b60006128d06128cb8461288c565b6126a1565b905080838252602082019050602084028301858111156128f3576128f26128b8565b5b835b8181101561291c578061290888826124ec565b8452602084019350506020810190506128f5565b5050509392505050565b600082601f83011261293b5761293a612626565b5b813561294b8482602086016128bd565b91505092915050565b600067ffffffffffffffff82111561296f5761296e612641565b5b61297882612630565b9050602081019050919050565b600061299861299384612954565b6126a1565b9050828152602081018484840111156129b4576129b361262b565b5b6129bf8482856126ed565b509392505050565b600082601f8301126129dc576129db612626565b5b81356129ec848260208601612985565b91505092915050565b600080600080600060a08688031215612a1157612a10612463565b5b6000612a1f888289016124b6565b9550506020612a30888289016124b6565b945050604086013567ffffffffffffffff811115612a5157612a50612468565b5b612a5d88828901612926565b935050606086013567ffffffffffffffff811115612a7e57612a7d612468565b5b612a8a88828901612926565b925050608086013567ffffffffffffffff811115612aab57612aaa612468565b5b612ab7888289016129c7565b9150509295509295909350565b600067ffffffffffffffff821115612adf57612ade612641565b5b602082029050602081019050919050565b6000612b03612afe84612ac4565b6126a1565b90508083825260208201905060208402830185811115612b2657612b256128b8565b5b835b81811015612b4f5780612b3b88826124b6565b845260208401935050602081019050612b28565b5050509392505050565b600082601f830112612b6e57612b6d612626565b5b8135612b7e848260208601612af0565b91505092915050565b60008060408385031215612b9e57612b9d612463565b5b600083013567ffffffffffffffff811115612bbc57612bbb612468565b5b612bc885828601612b59565b925050602083013567ffffffffffffffff811115612be957612be8612468565b5b612bf585828601612926565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c34816124cb565b82525050565b6000612c468383612c2b565b60208301905092915050565b6000602082019050919050565b6000612c6a82612bff565b612c748185612c0a565b9350612c7f83612c1b565b8060005b83811015612cb0578151612c978882612c3a565b9750612ca283612c52565b925050600181019050612c83565b5085935050505092915050565b60006020820190508181036000830152612cd78184612c5f565b905092915050565b6000612cea8261246d565b9050919050565b612cfa81612cdf565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612463565b5b6000612d4184828501612d08565b91505092915050565b612d538161248d565b82525050565b6000602082019050612d6e6000830184612d4a565b92915050565b612d7d816125f0565b8114612d8857600080fd5b50565b600081359050612d9a81612d74565b92915050565b60008060408385031215612db757612db6612463565b5b6000612dc5858286016124b6565b9250506020612dd685828601612d8b565b9150509250929050565b60008060408385031215612df757612df6612463565b5b6000612e05858286016124b6565b9250506020612e16858286016124b6565b9150509250929050565b600080600080600060a08688031215612e3c57612e3b612463565b5b6000612e4a888289016124b6565b9550506020612e5b888289016124b6565b9450506040612e6c888289016124ec565b9350506060612e7d888289016124ec565b925050608086013567ffffffffffffffff811115612e9e57612e9d612468565b5b612eaa888289016129c7565b9150509295509295909350565b600060208284031215612ecd57612ecc612463565b5b6000612edb848285016124b6565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612f40602b836127ed565b9150612f4b82612ee4565b604082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fac6020836127ed565b9150612fb782612f76565b602082019050919050565b60006020820190508181036000830152612fdb81612f9f565b9050919050565b7f7479706520657272000000000000000000000000000000000000000000000000600082015250565b60006130186008836127ed565b915061302382612fe2565b602082019050919050565b600060208201905081810360008301526130478161300b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061309557607f821691505b602082108114156130a9576130a861304e565b5b50919050565b600081905092915050565b7f7b226e616d65223a20224f434d20456172746800000000000000000000000000600082015250565b60006130f06013836130af565b91506130fb826130ba565b601382019050919050565b6000613111826127e2565b61311b81856130af565b935061312b8185602086016127fe565b80840191505092915050565b7f227d5d2c22696d616765223a2022000000000000000000000000000000000000600082015250565b600061316d600e836130af565b915061317882613137565b600e82019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b60006131b96002836130af565b91506131c482613183565b600282019050919050565b60006131da826130e3565b91506131e68285613106565b91506131f182613160565b91506131fd8284613106565b9150613208826131ac565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061324a601d836130af565b915061325582613214565b601d82019050919050565b600061326b8261323d565b91506132778284613106565b915081905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006132de6032836127ed565b91506132e982613282565b604082019050919050565b6000602082019050818103600083015261330d816132d1565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006133706029836127ed565b915061337b82613314565b604082019050919050565b6000602082019050818103600083015261339f81613363565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061340f826124cb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613442576134416133d5565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613483601f836127ed565b915061348e8261344d565b602082019050919050565b600060208201905081810360008301526134b281613476565b9050919050565b7f576974686472617720616464726573732063616e6e6f74206265207a65726f00600082015250565b60006134ef601f836127ed565b91506134fa826134b9565b602082019050919050565b6000602082019050818103600083015261351e816134e2565b9050919050565b7f4e6f7420656e6f75676820657468000000000000000000000000000000000000600082015250565b600061355b600e836127ed565b915061356682613525565b602082019050919050565b6000602082019050818103600083015261358a8161354e565b9050919050565b7f4d696e74696e67206973206f7665720000000000000000000000000000000000600082015250565b60006135c7600f836127ed565b91506135d282613591565b602082019050919050565b600060208201905081810360008301526135f6816135ba565b9050919050565b7f416d6f756e74206d757374206265203e203020616e64203c3d20313000000000600082015250565b6000613633601c836127ed565b915061363e826135fd565b602082019050919050565b6000602082019050818103600083015261366281613626565b9050919050565b7f596f752063616e6e6f74206d696e742066726f6d206120736d61727420636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006136c56025836127ed565b91506136d082613669565b604082019050919050565b600060208201905081810360008301526136f4816136b8565b9050919050565b6000613706826124cb565b9150613711836124cb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561374a576137496133d5565b5b828202905092915050565b7f4e6f7420656e6f75676820455448000000000000000000000000000000000000600082015250565b600061378b600e836127ed565b915061379682613755565b602082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b60006137cc826124cb565b91506137d7836124cb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561380c5761380b6133d5565b5b828201905092915050565b7f4e6f7420656e6f75676820737570706c79000000000000000000000000000000600082015250565b600061384d6011836127ed565b915061385882613817565b602082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006138df6029836127ed565b91506138ea82613883565b604082019050919050565b6000602082019050818103600083015261390e816138d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139716026836127ed565b915061397c82613915565b604082019050919050565b600060208201905081810360008301526139a081613964565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139e1826124cb565b91506139ec836124cb565b9250826139fc576139fb6139a7565b5b828204905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613a636028836127ed565b9150613a6e82613a07565b604082019050919050565b60006020820190508181036000830152613a9281613a56565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613af56025836127ed565b9150613b0082613a99565b604082019050919050565b60006020820190508181036000830152613b2481613ae8565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613b87602a836127ed565b9150613b9282613b2b565b604082019050919050565b60006020820190508181036000830152613bb681613b7a565b9050919050565b60006040820190508181036000830152613bd78185612c5f565b90508181036020830152613beb8184612c5f565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c506021836127ed565b9150613c5b82613bf4565b604082019050919050565b60006020820190508181036000830152613c7f81613c43565b9050919050565b6000604082019050613c9b6000830185612541565b613ca86020830184612541565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613d0b6029836127ed565b9150613d1682613caf565b604082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613d6882613d41565b613d728185613d4c565b9350613d828185602086016127fe565b613d8b81612630565b840191505092915050565b600060a082019050613dab6000830188612d4a565b613db86020830187612d4a565b8181036040830152613dca8186612c5f565b90508181036060830152613dde8185612c5f565b90508181036080830152613df28184613d5d565b90509695505050505050565b600081519050613e0d81612597565b92915050565b600060208284031215613e2957613e28612463565b5b6000613e3784828501613dfe565b91505092915050565b60008160e01c9050919050565b600060033d1115613e6c5760046000803e613e69600051613e40565b90505b90565b600060443d1015613e7f57613f02565b613e87612459565b60043d036004823e80513d602482011167ffffffffffffffff82111715613eaf575050613f02565b808201805167ffffffffffffffff811115613ecd5750505050613f02565b80602083010160043d038501811115613eea575050505050613f02565b613ef982602001850186612670565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613f616034836127ed565b9150613f6c82613f05565b604082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613ff36028836127ed565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b600060a08201905061403e6000830188612d4a565b61404b6020830187612d4a565b6140586040830186612541565b6140656060830185612541565b81810360808301526140778184613d5d565b9050969550505050505056fe2031206f662031222c2261747472696275746573223a5b7b2274726169745f74797065223a20225265736f6c7574696f6e222c202276616c7565223a2022313438383020706978656c734142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f222c2261747472696275746573223a5b7b2274726169745f74797065223a20225265736f6c7574696f6e222c202276616c7565223a20223136303020706978656c73a2646970667358221220769958ee3c38a4fbec9ed6d623099ee38d3dc5dd6fbf03dafab2cf008b60f9b164736f6c634300080b0033

Deployed Bytecode Sourcemap

3230:2322:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:228:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4806:85:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3480:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4897:653;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3378:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3990:430:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2500:508;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3449:25:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4382:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3515:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4287:73;;;;;;;;;;;;;:::i;:::-;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;1029:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3411:32:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3753:506;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3076:153:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3291:81:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3607:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:166:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3529:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2115:228:2;2201:7;2247:1;2228:21;;:7;:21;;;;2220:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2314:9;:13;2324:2;2314:13;;;;;;;;;;;:22;2328:7;2314:22;;;;;;;;;;;;;;;;2307:29;;2115:228;;;;:::o;1166:305::-;1268:4;1318:26;1303:41;;;:11;:41;;;;:109;;;;1375:37;1360:52;;;:11;:52;;;;1303:109;:161;;;;1428:36;1452:11;1428:23;:36::i;:::-;1303:161;1284:180;;1166:305;;;:::o;4806:85:8:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4878:6:8::1;4871:4;:13;;;;;;;;;;;;:::i;:::-;;4806:85:::0;:::o;3480:28::-;;;;:::o;4897:653::-;4956:13;4997:1;4989:6;:9;;:21;;;;;5009:1;5002:6;:8;4989:21;4981:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;5033:17;5060:18;5102:1;5092:6;:11;5088:279;;;5126:4;5119:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5144:82;;;;;;;;;;;;;;;;;;;5088:279;;;5264:4;5257:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5282:74;;;;;;;;;;;;;;;;;;;5088:279;5440:101;5507:3;5530:4;5454:86;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5440:13;:101::i;:::-;5390:152;;;;;;;;:::i;:::-;;;;;;;;;;;;;5376:167;;;;4897:653;;;:::o;3378:27::-;;;;;;;;;;;;;:::o;3990:430:2:-;4223:12;:10;:12::i;:::-;4215:20;;:4;:20;;;:60;;;;4239:36;4256:4;4262:12;:10;:12::i;:::-;4239:16;:36::i;:::-;4215:60;4194:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4361:52;4384:4;4390:2;4394:3;4399:7;4408:4;4361:22;:52::i;:::-;3990:430;;;;;:::o;2500:508::-;2651:16;2710:3;:10;2691:8;:15;:29;2683:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2777:30;2824:8;:15;2810:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:63;;2856:9;2851:120;2875:8;:15;2871:1;:19;2851:120;;;2930:30;2940:8;2949:1;2940:11;;;;;;;;:::i;:::-;;;;;;;;2953:3;2957:1;2953:6;;;;;;;;:::i;:::-;;;;;;;;2930:9;:30::i;:::-;2911:13;2925:1;2911:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2892:3;;;;:::i;:::-;;;2851:120;;;;2988:13;2981:20;;;2500:508;;;;:::o;3449:25:8:-;;;;:::o;4382:346::-;1744:1:10;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;1252:12:9::1;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4554:1:8::2;4527:29;;:15;:29;;;;4519:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4635:1;4610:21;:26;;4602:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4673:15;4665:33;;:56;4699:21;4665:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;1701:1:10::0;2628:7;:22;;;;4382:346:8;:::o;3515:86::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4287:73::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4348:5:8::1;4337:8;;:16;;;;;;;;;;;;;;;;;;4287:73::o:0;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1029:85::-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3411:32:8:-;;;;:::o;3753:506::-;1744:1:10;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3861:8:8::1;;;;;;;;;;;3853:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;3917:1;3907:7;:11;:28;;;;;3933:2;3922:7;:13;;3907:28;3899:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4000:9;3986:23;;:10;:23;;;3978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4090:7;4082:5;;:15;;;;:::i;:::-;4069:9;:28;;4061:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4154:6;;4144;;4134:7;:16;;;;:::i;:::-;:26;;4126:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4202:7;4192:6;;:17;;;;;;;:::i;:::-;;;;;;;;4219:33;4225:10;4237:1;4240:7;4219:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;1701:1:10::0;2628:7;:22;;;;3753:506:8;:::o;3076:153:2:-;3170:52;3189:12;:10;:12::i;:::-;3203:8;3213;3170:18;:52::i;:::-;3076:153;;:::o;3291:81:8:-;;;;;;;;;;;;;:::o;3607:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3296:166:2:-;3395:4;3418:18;:27;3437:7;3418:27;;;;;;;;;;;;;;;:37;3446:8;3418:37;;;;;;;;;;;;;;;;;;;;;;;;;3411:44;;3296:166;;;;:::o;3529:389::-;3737:12;:10;:12::i;:::-;3729:20;;:4;:20;;;:60;;;;3753:36;3770:4;3776:12;:10;:12::i;:::-;3753:16;:36::i;:::-;3729:60;3708:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3866:45;3884:4;3890:2;3894;3898:6;3906:4;3866:17;:45::i;:::-;3529:389;;;;;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;1678:1548:8:-;1736:13;1761:11;1775:4;:11;1761:25;;1807:1;1800:3;:8;1796:23;;;1810:9;;;;;;;;;;;;;;;;;1796:23;1868:18;1906:1;1901;1895:3;:7;;;;:::i;:::-;1894:13;;;;:::i;:::-;1889:1;:19;;;;:::i;:::-;1868:40;;1963:19;2008:2;1995:10;:15;;;;:::i;:::-;1985:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1963:48;;2021:18;2042:5;;;;;;;;;;;;;;;;;2021:26;;2108:1;2101:5;2097:13;2152:2;2144:6;2140:15;2199:1;2168:753;2221:3;2218:1;2215:10;2168:753;;;2272:1;2269;2265:9;2260:14;;2329:8;2324:1;2318:4;2314:12;2308:19;2304:34;2406:4;2398:5;2394:2;2390:14;2386:25;2376:8;2372:40;2366:47;2444:3;2441:1;2437:11;2430:18;;2534:4;2525;2517:5;2513:2;2509:14;2505:25;2495:8;2491:40;2485:47;2481:58;2476:3;2472:68;2465:75;;2571:3;2568:1;2564:11;2557:18;;2660:4;2651;2643:5;2640:1;2636:13;2632:24;2622:8;2618:39;2612:46;2608:57;2603:3;2599:67;2592:74;;2697:3;2694:1;2690:11;2683:18;;2778:4;2769;2762:5;2758:16;2748:8;2744:31;2738:38;2734:49;2729:3;2725:59;2718:66;;2817:3;2812;2808:13;2801:20;;2856:3;2845:9;2838:22;2905:1;2894:9;2890:17;2877:30;;2242:679;;2168:753;;;2172:42;2950:1;2945:3;2941:11;2970:1;2965:82;;;;3065:1;3060:80;;;;2934:206;;2965:82;3025:6;3020:3;3016:16;3012:1;3001:9;2997:17;2990:43;2965:82;;3060:80;3120:4;3115:3;3111:14;3107:1;3096:9;3092:17;3085:41;2934:206;;3168:10;3160:6;3153:26;2067:1122;;3212:6;3198:21;;;;;;1678:1548;;;;:::o;6013:1045:2:-;6233:7;:14;6219:3;:10;:28;6211:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6324:1;6310:16;;:2;:16;;;;6302:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6379:16;6398:12;:10;:12::i;:::-;6379:31;;6421:60;6442:8;6452:4;6458:2;6462:3;6467:7;6476:4;6421:20;:60::i;:::-;6497:9;6492:411;6516:3;:10;6512:1;:14;6492:411;;;6547:10;6560:3;6564:1;6560:6;;;;;;;;:::i;:::-;;;;;;;;6547:19;;6580:14;6597:7;6605:1;6597:10;;;;;;;;:::i;:::-;;;;;;;;6580:27;;6622:19;6644:9;:13;6654:2;6644:13;;;;;;;;;;;:19;6658:4;6644:19;;;;;;;;;;;;;;;;6622:41;;6700:6;6685:11;:21;;6677:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6831:6;6817:11;:20;6795:9;:13;6805:2;6795:13;;;;;;;;;;;:19;6809:4;6795:19;;;;;;;;;;;;;;;:42;;;;6886:6;6865:9;:13;6875:2;6865:13;;;;;;;;;;;:17;6879:2;6865:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6533:370;;;6528:3;;;;:::i;:::-;;;6492:411;;;;6948:2;6918:47;;6942:4;6918:47;;6932:8;6918:47;;;6952:3;6957:7;6918:47;;;;;;;:::i;:::-;;;;;;;;6976:75;7012:8;7022:4;7028:2;7032:3;7037:7;7046:4;6976:35;:75::i;:::-;6201:857;6013:1045;;;;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;8340:553:2:-;8501:1;8487:16;;:2;:16;;;;8479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8552:16;8571:12;:10;:12::i;:::-;8552:31;;8594:102;8615:8;8633:1;8637:2;8641:21;8659:2;8641:17;:21::i;:::-;8664:25;8682:6;8664:17;:25::i;:::-;8691:4;8594:20;:102::i;:::-;8728:6;8707:9;:13;8717:2;8707:13;;;;;;;;;;;:17;8721:2;8707:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;8786:2;8749:52;;8782:1;8749:52;;8764:8;8749:52;;;8790:2;8794:6;8749:52;;;;;;;:::i;:::-;;;;;;;;8812:74;8843:8;8861:1;8865:2;8869;8873:6;8881:4;8812:30;:74::i;:::-;8469:424;8340:553;;;;:::o;12019:323::-;12169:8;12160:17;;:5;:17;;;;12152:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:8;12233:18;:25;12252:5;12233:25;;;;;;;;;;;;;;;:35;12259:8;12233:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12316:8;12294:41;;12309:5;12294:41;;;12326:8;12294:41;;;;;;:::i;:::-;;;;;;;;12019:323;;;:::o;4870:797::-;5065:1;5051:16;;:2;:16;;;;5043:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5120:16;5139:12;:10;:12::i;:::-;5120:31;;5162:96;5183:8;5193:4;5199:2;5203:21;5221:2;5203:17;:21::i;:::-;5226:25;5244:6;5226:17;:25::i;:::-;5253:4;5162:20;:96::i;:::-;5269:19;5291:9;:13;5301:2;5291:13;;;;;;;;;;;:19;5305:4;5291:19;;;;;;;;;;;;;;;;5269:41;;5343:6;5328:11;:21;;5320:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5466:6;5452:11;:20;5430:9;:13;5440:2;5430:13;;;;;;;;;;;:19;5444:4;5430:19;;;;;;;;;;;;;;;:42;;;;5513:6;5492:9;:13;5502:2;5492:13;;;;;;;;;;;:17;5506:2;5492:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5566:2;5535:46;;5560:4;5535:46;;5550:8;5535:46;;;5570:2;5574:6;5535:46;;;;;;;:::i;:::-;;;;;;;;5592:68;5623:8;5633:4;5639:2;5643;5647:6;5655:4;5592:30;:68::i;:::-;5033:634;;4870:797;;;;;:::o;13276:214::-;;;;;;;:::o;14227:792::-;14459:15;:2;:13;;;:15::i;:::-;14455:558;;;14511:2;14494:43;;;14538:8;14548:4;14554:3;14559:7;14568:4;14494:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14490:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14879:6;14872:14;;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;;;14926:62;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;14664:48;;;14652:60;;;:8;:60;;;;14648:157;;14736:50;;;;;;;;;;:::i;:::-;;;;;;;;14648:157;14574:245;14455:558;14227:792;;;;;;:::o;15025:193::-;15091:16;15119:22;15158:1;15144:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:41;;15181:7;15170:5;15176:1;15170:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15206:5;15199:12;;;15025:193;;;:::o;13496:725::-;13703:15;:2;:13;;;:15::i;:::-;13699:516;;;13755:2;13738:38;;;13777:8;13787:4;13793:2;13797:6;13805:4;13738:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13734:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14081:6;14074:14;;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;;;14128:62;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;13871:43;;;13859:55;;;:8;:55;;;;13855:152;;13938:50;;;;;;;;;;:::i;:::-;;;;;;;;13855:152;13811:210;13699:516;13496:725;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:11:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:311::-;7636:4;7726:18;7718:6;7715:30;7712:56;;;7748:18;;:::i;:::-;7712:56;7798:4;7790:6;7786:17;7778:25;;7858:4;7852;7848:15;7840:23;;7559:311;;;:::o;7876:117::-;7985:1;7982;7975:12;8016:710;8112:5;8137:81;8153:64;8210:6;8153:64;:::i;:::-;8137:81;:::i;:::-;8128:90;;8238:5;8267:6;8260:5;8253:21;8301:4;8294:5;8290:16;8283:23;;8354:4;8346:6;8342:17;8334:6;8330:30;8383:3;8375:6;8372:15;8369:122;;;8402:79;;:::i;:::-;8369:122;8517:6;8500:220;8534:6;8529:3;8526:15;8500:220;;;8609:3;8638:37;8671:3;8659:10;8638:37;:::i;:::-;8633:3;8626:50;8705:4;8700:3;8696:14;8689:21;;8576:144;8560:4;8555:3;8551:14;8544:21;;8500:220;;;8504:21;8118:608;;8016:710;;;;;:::o;8749:370::-;8820:5;8869:3;8862:4;8854:6;8850:17;8846:27;8836:122;;8877:79;;:::i;:::-;8836:122;8994:6;8981:20;9019:94;9109:3;9101:6;9094:4;9086:6;9082:17;9019:94;:::i;:::-;9010:103;;8826:293;8749:370;;;;:::o;9125:307::-;9186:4;9276:18;9268:6;9265:30;9262:56;;;9298:18;;:::i;:::-;9262:56;9336:29;9358:6;9336:29;:::i;:::-;9328:37;;9420:4;9414;9410:15;9402:23;;9125:307;;;:::o;9438:410::-;9515:5;9540:65;9556:48;9597:6;9556:48;:::i;:::-;9540:65;:::i;:::-;9531:74;;9628:6;9621:5;9614:21;9666:4;9659:5;9655:16;9704:3;9695:6;9690:3;9686:16;9683:25;9680:112;;;9711:79;;:::i;:::-;9680:112;9801:41;9835:6;9830:3;9825;9801:41;:::i;:::-;9521:327;9438:410;;;;;:::o;9867:338::-;9922:5;9971:3;9964:4;9956:6;9952:17;9948:27;9938:122;;9979:79;;:::i;:::-;9938:122;10096:6;10083:20;10121:78;10195:3;10187:6;10180:4;10172:6;10168:17;10121:78;:::i;:::-;10112:87;;9928:277;9867:338;;;;:::o;10211:1509::-;10365:6;10373;10381;10389;10397;10446:3;10434:9;10425:7;10421:23;10417:33;10414:120;;;10453:79;;:::i;:::-;10414:120;10573:1;10598:53;10643:7;10634:6;10623:9;10619:22;10598:53;:::i;:::-;10588:63;;10544:117;10700:2;10726:53;10771:7;10762:6;10751:9;10747:22;10726:53;:::i;:::-;10716:63;;10671:118;10856:2;10845:9;10841:18;10828:32;10887:18;10879:6;10876:30;10873:117;;;10909:79;;:::i;:::-;10873:117;11014:78;11084:7;11075:6;11064:9;11060:22;11014:78;:::i;:::-;11004:88;;10799:303;11169:2;11158:9;11154:18;11141:32;11200:18;11192:6;11189:30;11186:117;;;11222:79;;:::i;:::-;11186:117;11327:78;11397:7;11388:6;11377:9;11373:22;11327:78;:::i;:::-;11317:88;;11112:303;11482:3;11471:9;11467:19;11454:33;11514:18;11506:6;11503:30;11500:117;;;11536:79;;:::i;:::-;11500:117;11641:62;11695:7;11686:6;11675:9;11671:22;11641:62;:::i;:::-;11631:72;;11425:288;10211:1509;;;;;;;;:::o;11726:311::-;11803:4;11893:18;11885:6;11882:30;11879:56;;;11915:18;;:::i;:::-;11879:56;11965:4;11957:6;11953:17;11945:25;;12025:4;12019;12015:15;12007:23;;11726:311;;;:::o;12060:710::-;12156:5;12181:81;12197:64;12254:6;12197:64;:::i;:::-;12181:81;:::i;:::-;12172:90;;12282:5;12311:6;12304:5;12297:21;12345:4;12338:5;12334:16;12327:23;;12398:4;12390:6;12386:17;12378:6;12374:30;12427:3;12419:6;12416:15;12413:122;;;12446:79;;:::i;:::-;12413:122;12561:6;12544:220;12578:6;12573:3;12570:15;12544:220;;;12653:3;12682:37;12715:3;12703:10;12682:37;:::i;:::-;12677:3;12670:50;12749:4;12744:3;12740:14;12733:21;;12620:144;12604:4;12599:3;12595:14;12588:21;;12544:220;;;12548:21;12162:608;;12060:710;;;;;:::o;12793:370::-;12864:5;12913:3;12906:4;12898:6;12894:17;12890:27;12880:122;;12921:79;;:::i;:::-;12880:122;13038:6;13025:20;13063:94;13153:3;13145:6;13138:4;13130:6;13126:17;13063:94;:::i;:::-;13054:103;;12870:293;12793:370;;;;:::o;13169:894::-;13287:6;13295;13344:2;13332:9;13323:7;13319:23;13315:32;13312:119;;;13350:79;;:::i;:::-;13312:119;13498:1;13487:9;13483:17;13470:31;13528:18;13520:6;13517:30;13514:117;;;13550:79;;:::i;:::-;13514:117;13655:78;13725:7;13716:6;13705:9;13701:22;13655:78;:::i;:::-;13645:88;;13441:302;13810:2;13799:9;13795:18;13782:32;13841:18;13833:6;13830:30;13827:117;;;13863:79;;:::i;:::-;13827:117;13968:78;14038:7;14029:6;14018:9;14014:22;13968:78;:::i;:::-;13958:88;;13753:303;13169:894;;;;;:::o;14069:114::-;14136:6;14170:5;14164:12;14154:22;;14069:114;;;:::o;14189:184::-;14288:11;14322:6;14317:3;14310:19;14362:4;14357:3;14353:14;14338:29;;14189:184;;;;:::o;14379:132::-;14446:4;14469:3;14461:11;;14499:4;14494:3;14490:14;14482:22;;14379:132;;;:::o;14517:108::-;14594:24;14612:5;14594:24;:::i;:::-;14589:3;14582:37;14517:108;;:::o;14631:179::-;14700:10;14721:46;14763:3;14755:6;14721:46;:::i;:::-;14799:4;14794:3;14790:14;14776:28;;14631:179;;;;:::o;14816:113::-;14886:4;14918;14913:3;14909:14;14901:22;;14816:113;;;:::o;14965:732::-;15084:3;15113:54;15161:5;15113:54;:::i;:::-;15183:86;15262:6;15257:3;15183:86;:::i;:::-;15176:93;;15293:56;15343:5;15293:56;:::i;:::-;15372:7;15403:1;15388:284;15413:6;15410:1;15407:13;15388:284;;;15489:6;15483:13;15516:63;15575:3;15560:13;15516:63;:::i;:::-;15509:70;;15602:60;15655:6;15602:60;:::i;:::-;15592:70;;15448:224;15435:1;15432;15428:9;15423:14;;15388:284;;;15392:14;15688:3;15681:10;;15089:608;;;14965:732;;;;:::o;15703:373::-;15846:4;15884:2;15873:9;15869:18;15861:26;;15933:9;15927:4;15923:20;15919:1;15908:9;15904:17;15897:47;15961:108;16064:4;16055:6;15961:108;:::i;:::-;15953:116;;15703:373;;;;:::o;16082:104::-;16127:7;16156:24;16174:5;16156:24;:::i;:::-;16145:35;;16082:104;;;:::o;16192:138::-;16273:32;16299:5;16273:32;:::i;:::-;16266:5;16263:43;16253:71;;16320:1;16317;16310:12;16253:71;16192:138;:::o;16336:155::-;16390:5;16428:6;16415:20;16406:29;;16444:41;16479:5;16444:41;:::i;:::-;16336:155;;;;:::o;16497:345::-;16564:6;16613:2;16601:9;16592:7;16588:23;16584:32;16581:119;;;16619:79;;:::i;:::-;16581:119;16739:1;16764:61;16817:7;16808:6;16797:9;16793:22;16764:61;:::i;:::-;16754:71;;16710:125;16497:345;;;;:::o;16848:118::-;16935:24;16953:5;16935:24;:::i;:::-;16930:3;16923:37;16848:118;;:::o;16972:222::-;17065:4;17103:2;17092:9;17088:18;17080:26;;17116:71;17184:1;17173:9;17169:17;17160:6;17116:71;:::i;:::-;16972:222;;;;:::o;17200:116::-;17270:21;17285:5;17270:21;:::i;:::-;17263:5;17260:32;17250:60;;17306:1;17303;17296:12;17250:60;17200:116;:::o;17322:133::-;17365:5;17403:6;17390:20;17381:29;;17419:30;17443:5;17419:30;:::i;:::-;17322:133;;;;:::o;17461:468::-;17526:6;17534;17583:2;17571:9;17562:7;17558:23;17554:32;17551:119;;;17589:79;;:::i;:::-;17551:119;17709:1;17734:53;17779:7;17770:6;17759:9;17755:22;17734:53;:::i;:::-;17724:63;;17680:117;17836:2;17862:50;17904:7;17895:6;17884:9;17880:22;17862:50;:::i;:::-;17852:60;;17807:115;17461:468;;;;;:::o;17935:474::-;18003:6;18011;18060:2;18048:9;18039:7;18035:23;18031:32;18028:119;;;18066:79;;:::i;:::-;18028:119;18186:1;18211:53;18256:7;18247:6;18236:9;18232:22;18211:53;:::i;:::-;18201:63;;18157:117;18313:2;18339:53;18384:7;18375:6;18364:9;18360:22;18339:53;:::i;:::-;18329:63;;18284:118;17935:474;;;;;:::o;18415:1089::-;18519:6;18527;18535;18543;18551;18600:3;18588:9;18579:7;18575:23;18571:33;18568:120;;;18607:79;;:::i;:::-;18568:120;18727:1;18752:53;18797:7;18788:6;18777:9;18773:22;18752:53;:::i;:::-;18742:63;;18698:117;18854:2;18880:53;18925:7;18916:6;18905:9;18901:22;18880:53;:::i;:::-;18870:63;;18825:118;18982:2;19008:53;19053:7;19044:6;19033:9;19029:22;19008:53;:::i;:::-;18998:63;;18953:118;19110:2;19136:53;19181:7;19172:6;19161:9;19157:22;19136:53;:::i;:::-;19126:63;;19081:118;19266:3;19255:9;19251:19;19238:33;19298:18;19290:6;19287:30;19284:117;;;19320:79;;:::i;:::-;19284:117;19425:62;19479:7;19470:6;19459:9;19455:22;19425:62;:::i;:::-;19415:72;;19209:288;18415:1089;;;;;;;;:::o;19510:329::-;19569:6;19618:2;19606:9;19597:7;19593:23;19589:32;19586:119;;;19624:79;;:::i;:::-;19586:119;19744:1;19769:53;19814:7;19805:6;19794:9;19790:22;19769:53;:::i;:::-;19759:63;;19715:117;19510:329;;;;:::o;19845:230::-;19985:34;19981:1;19973:6;19969:14;19962:58;20054:13;20049:2;20041:6;20037:15;20030:38;19845:230;:::o;20081:366::-;20223:3;20244:67;20308:2;20303:3;20244:67;:::i;:::-;20237:74;;20320:93;20409:3;20320:93;:::i;:::-;20438:2;20433:3;20429:12;20422:19;;20081:366;;;:::o;20453:419::-;20619:4;20657:2;20646:9;20642:18;20634:26;;20706:9;20700:4;20696:20;20692:1;20681:9;20677:17;20670:47;20734:131;20860:4;20734:131;:::i;:::-;20726:139;;20453:419;;;:::o;20878:182::-;21018:34;21014:1;21006:6;21002:14;20995:58;20878:182;:::o;21066:366::-;21208:3;21229:67;21293:2;21288:3;21229:67;:::i;:::-;21222:74;;21305:93;21394:3;21305:93;:::i;:::-;21423:2;21418:3;21414:12;21407:19;;21066:366;;;:::o;21438:419::-;21604:4;21642:2;21631:9;21627:18;21619:26;;21691:9;21685:4;21681:20;21677:1;21666:9;21662:17;21655:47;21719:131;21845:4;21719:131;:::i;:::-;21711:139;;21438:419;;;:::o;21863:158::-;22003:10;21999:1;21991:6;21987:14;21980:34;21863:158;:::o;22027:365::-;22169:3;22190:66;22254:1;22249:3;22190:66;:::i;:::-;22183:73;;22265:93;22354:3;22265:93;:::i;:::-;22383:2;22378:3;22374:12;22367:19;;22027:365;;;:::o;22398:419::-;22564:4;22602:2;22591:9;22587:18;22579:26;;22651:9;22645:4;22641:20;22637:1;22626:9;22622:17;22615:47;22679:131;22805:4;22679:131;:::i;:::-;22671:139;;22398:419;;;:::o;22823:180::-;22871:77;22868:1;22861:88;22968:4;22965:1;22958:15;22992:4;22989:1;22982:15;23009:320;23053:6;23090:1;23084:4;23080:12;23070:22;;23137:1;23131:4;23127:12;23158:18;23148:81;;23214:4;23206:6;23202:17;23192:27;;23148:81;23276:2;23268:6;23265:14;23245:18;23242:38;23239:84;;;23295:18;;:::i;:::-;23239:84;23060:269;23009:320;;;:::o;23335:148::-;23437:11;23474:3;23459:18;;23335:148;;;;:::o;23489:214::-;23629:66;23625:1;23617:6;23613:14;23606:90;23489:214;:::o;23709:402::-;23869:3;23890:85;23972:2;23967:3;23890:85;:::i;:::-;23883:92;;23984:93;24073:3;23984:93;:::i;:::-;24102:2;24097:3;24093:12;24086:19;;23709:402;;;:::o;24117:377::-;24223:3;24251:39;24284:5;24251:39;:::i;:::-;24306:89;24388:6;24383:3;24306:89;:::i;:::-;24299:96;;24404:52;24449:6;24444:3;24437:4;24430:5;24426:16;24404:52;:::i;:::-;24481:6;24476:3;24472:16;24465:23;;24227:267;24117:377;;;;:::o;24500:214::-;24640:66;24636:1;24628:6;24624:14;24617:90;24500:214;:::o;24720:402::-;24880:3;24901:85;24983:2;24978:3;24901:85;:::i;:::-;24894:92;;24995:93;25084:3;24995:93;:::i;:::-;25113:2;25108:3;25104:12;25097:19;;24720:402;;;:::o;25128:214::-;25268:66;25264:1;25256:6;25252:14;25245:90;25128:214;:::o;25348:400::-;25508:3;25529:84;25611:1;25606:3;25529:84;:::i;:::-;25522:91;;25622:93;25711:3;25622:93;:::i;:::-;25740:1;25735:3;25731:11;25724:18;;25348:400;;;:::o;25754:1233::-;26237:3;26259:148;26403:3;26259:148;:::i;:::-;26252:155;;26424:95;26515:3;26506:6;26424:95;:::i;:::-;26417:102;;26536:148;26680:3;26536:148;:::i;:::-;26529:155;;26701:95;26792:3;26783:6;26701:95;:::i;:::-;26694:102;;26813:148;26957:3;26813:148;:::i;:::-;26806:155;;26978:3;26971:10;;25754:1233;;;;;:::o;26993:179::-;27133:31;27129:1;27121:6;27117:14;27110:55;26993:179;:::o;27178:402::-;27338:3;27359:85;27441:2;27436:3;27359:85;:::i;:::-;27352:92;;27453:93;27542:3;27453:93;:::i;:::-;27571:2;27566:3;27562:12;27555:19;;27178:402;;;:::o;27586:541::-;27819:3;27841:148;27985:3;27841:148;:::i;:::-;27834:155;;28006:95;28097:3;28088:6;28006:95;:::i;:::-;27999:102;;28118:3;28111:10;;27586:541;;;;:::o;28133:237::-;28273:34;28269:1;28261:6;28257:14;28250:58;28342:20;28337:2;28329:6;28325:15;28318:45;28133:237;:::o;28376:366::-;28518:3;28539:67;28603:2;28598:3;28539:67;:::i;:::-;28532:74;;28615:93;28704:3;28615:93;:::i;:::-;28733:2;28728:3;28724:12;28717:19;;28376:366;;;:::o;28748:419::-;28914:4;28952:2;28941:9;28937:18;28929:26;;29001:9;28995:4;28991:20;28987:1;28976:9;28972:17;28965:47;29029:131;29155:4;29029:131;:::i;:::-;29021:139;;28748:419;;;:::o;29173:228::-;29313:34;29309:1;29301:6;29297:14;29290:58;29382:11;29377:2;29369:6;29365:15;29358:36;29173:228;:::o;29407:366::-;29549:3;29570:67;29634:2;29629:3;29570:67;:::i;:::-;29563:74;;29646:93;29735:3;29646:93;:::i;:::-;29764:2;29759:3;29755:12;29748:19;;29407:366;;;:::o;29779:419::-;29945:4;29983:2;29972:9;29968:18;29960:26;;30032:9;30026:4;30022:20;30018:1;30007:9;30003:17;29996:47;30060:131;30186:4;30060:131;:::i;:::-;30052:139;;29779:419;;;:::o;30204:180::-;30252:77;30249:1;30242:88;30349:4;30346:1;30339:15;30373:4;30370:1;30363:15;30390:180;30438:77;30435:1;30428:88;30535:4;30532:1;30525:15;30559:4;30556:1;30549:15;30576:233;30615:3;30638:24;30656:5;30638:24;:::i;:::-;30629:33;;30684:66;30677:5;30674:77;30671:103;;;30754:18;;:::i;:::-;30671:103;30801:1;30794:5;30790:13;30783:20;;30576:233;;;:::o;30815:181::-;30955:33;30951:1;30943:6;30939:14;30932:57;30815:181;:::o;31002:366::-;31144:3;31165:67;31229:2;31224:3;31165:67;:::i;:::-;31158:74;;31241:93;31330:3;31241:93;:::i;:::-;31359:2;31354:3;31350:12;31343:19;;31002:366;;;:::o;31374:419::-;31540:4;31578:2;31567:9;31563:18;31555:26;;31627:9;31621:4;31617:20;31613:1;31602:9;31598:17;31591:47;31655:131;31781:4;31655:131;:::i;:::-;31647:139;;31374:419;;;:::o;31799:181::-;31939:33;31935:1;31927:6;31923:14;31916:57;31799:181;:::o;31986:366::-;32128:3;32149:67;32213:2;32208:3;32149:67;:::i;:::-;32142:74;;32225:93;32314:3;32225:93;:::i;:::-;32343:2;32338:3;32334:12;32327:19;;31986:366;;;:::o;32358:419::-;32524:4;32562:2;32551:9;32547:18;32539:26;;32611:9;32605:4;32601:20;32597:1;32586:9;32582:17;32575:47;32639:131;32765:4;32639:131;:::i;:::-;32631:139;;32358:419;;;:::o;32783:164::-;32923:16;32919:1;32911:6;32907:14;32900:40;32783:164;:::o;32953:366::-;33095:3;33116:67;33180:2;33175:3;33116:67;:::i;:::-;33109:74;;33192:93;33281:3;33192:93;:::i;:::-;33310:2;33305:3;33301:12;33294:19;;32953:366;;;:::o;33325:419::-;33491:4;33529:2;33518:9;33514:18;33506:26;;33578:9;33572:4;33568:20;33564:1;33553:9;33549:17;33542:47;33606:131;33732:4;33606:131;:::i;:::-;33598:139;;33325:419;;;:::o;33750:165::-;33890:17;33886:1;33878:6;33874:14;33867:41;33750:165;:::o;33921:366::-;34063:3;34084:67;34148:2;34143:3;34084:67;:::i;:::-;34077:74;;34160:93;34249:3;34160:93;:::i;:::-;34278:2;34273:3;34269:12;34262:19;;33921:366;;;:::o;34293:419::-;34459:4;34497:2;34486:9;34482:18;34474:26;;34546:9;34540:4;34536:20;34532:1;34521:9;34517:17;34510:47;34574:131;34700:4;34574:131;:::i;:::-;34566:139;;34293:419;;;:::o;34718:178::-;34858:30;34854:1;34846:6;34842:14;34835:54;34718:178;:::o;34902:366::-;35044:3;35065:67;35129:2;35124:3;35065:67;:::i;:::-;35058:74;;35141:93;35230:3;35141:93;:::i;:::-;35259:2;35254:3;35250:12;35243:19;;34902:366;;;:::o;35274:419::-;35440:4;35478:2;35467:9;35463:18;35455:26;;35527:9;35521:4;35517:20;35513:1;35502:9;35498:17;35491:47;35555:131;35681:4;35555:131;:::i;:::-;35547:139;;35274:419;;;:::o;35699:224::-;35839:34;35835:1;35827:6;35823:14;35816:58;35908:7;35903:2;35895:6;35891:15;35884:32;35699:224;:::o;35929:366::-;36071:3;36092:67;36156:2;36151:3;36092:67;:::i;:::-;36085:74;;36168:93;36257:3;36168:93;:::i;:::-;36286:2;36281:3;36277:12;36270:19;;35929:366;;;:::o;36301:419::-;36467:4;36505:2;36494:9;36490:18;36482:26;;36554:9;36548:4;36544:20;36540:1;36529:9;36525:17;36518:47;36582:131;36708:4;36582:131;:::i;:::-;36574:139;;36301:419;;;:::o;36726:348::-;36766:7;36789:20;36807:1;36789:20;:::i;:::-;36784:25;;36823:20;36841:1;36823:20;:::i;:::-;36818:25;;37011:1;36943:66;36939:74;36936:1;36933:81;36928:1;36921:9;36914:17;36910:105;36907:131;;;37018:18;;:::i;:::-;36907:131;37066:1;37063;37059:9;37048:20;;36726:348;;;;:::o;37080:164::-;37220:16;37216:1;37208:6;37204:14;37197:40;37080:164;:::o;37250:366::-;37392:3;37413:67;37477:2;37472:3;37413:67;:::i;:::-;37406:74;;37489:93;37578:3;37489:93;:::i;:::-;37607:2;37602:3;37598:12;37591:19;;37250:366;;;:::o;37622:419::-;37788:4;37826:2;37815:9;37811:18;37803:26;;37875:9;37869:4;37865:20;37861:1;37850:9;37846:17;37839:47;37903:131;38029:4;37903:131;:::i;:::-;37895:139;;37622:419;;;:::o;38047:305::-;38087:3;38106:20;38124:1;38106:20;:::i;:::-;38101:25;;38140:20;38158:1;38140:20;:::i;:::-;38135:25;;38294:1;38226:66;38222:74;38219:1;38216:81;38213:107;;;38300:18;;:::i;:::-;38213:107;38344:1;38341;38337:9;38330:16;;38047:305;;;;:::o;38358:167::-;38498:19;38494:1;38486:6;38482:14;38475:43;38358:167;:::o;38531:366::-;38673:3;38694:67;38758:2;38753:3;38694:67;:::i;:::-;38687:74;;38770:93;38859:3;38770:93;:::i;:::-;38888:2;38883:3;38879:12;38872:19;;38531:366;;;:::o;38903:419::-;39069:4;39107:2;39096:9;39092:18;39084:26;;39156:9;39150:4;39146:20;39142:1;39131:9;39127:17;39120:47;39184:131;39310:4;39184:131;:::i;:::-;39176:139;;38903:419;;;:::o;39328:228::-;39468:34;39464:1;39456:6;39452:14;39445:58;39537:11;39532:2;39524:6;39520:15;39513:36;39328:228;:::o;39562:366::-;39704:3;39725:67;39789:2;39784:3;39725:67;:::i;:::-;39718:74;;39801:93;39890:3;39801:93;:::i;:::-;39919:2;39914:3;39910:12;39903:19;;39562:366;;;:::o;39934:419::-;40100:4;40138:2;40127:9;40123:18;40115:26;;40187:9;40181:4;40177:20;40173:1;40162:9;40158:17;40151:47;40215:131;40341:4;40215:131;:::i;:::-;40207:139;;39934:419;;;:::o;40359:225::-;40499:34;40495:1;40487:6;40483:14;40476:58;40568:8;40563:2;40555:6;40551:15;40544:33;40359:225;:::o;40590:366::-;40732:3;40753:67;40817:2;40812:3;40753:67;:::i;:::-;40746:74;;40829:93;40918:3;40829:93;:::i;:::-;40947:2;40942:3;40938:12;40931:19;;40590:366;;;:::o;40962:419::-;41128:4;41166:2;41155:9;41151:18;41143:26;;41215:9;41209:4;41205:20;41201:1;41190:9;41186:17;41179:47;41243:131;41369:4;41243:131;:::i;:::-;41235:139;;40962:419;;;:::o;41387:180::-;41435:77;41432:1;41425:88;41532:4;41529:1;41522:15;41556:4;41553:1;41546:15;41573:185;41613:1;41630:20;41648:1;41630:20;:::i;:::-;41625:25;;41664:20;41682:1;41664:20;:::i;:::-;41659:25;;41703:1;41693:35;;41708:18;;:::i;:::-;41693:35;41750:1;41747;41743:9;41738:14;;41573:185;;;;:::o;41764:227::-;41904:34;41900:1;41892:6;41888:14;41881:58;41973:10;41968:2;41960:6;41956:15;41949:35;41764:227;:::o;41997:366::-;42139:3;42160:67;42224:2;42219:3;42160:67;:::i;:::-;42153:74;;42236:93;42325:3;42236:93;:::i;:::-;42354:2;42349:3;42345:12;42338:19;;41997:366;;;:::o;42369:419::-;42535:4;42573:2;42562:9;42558:18;42550:26;;42622:9;42616:4;42612:20;42608:1;42597:9;42593:17;42586:47;42650:131;42776:4;42650:131;:::i;:::-;42642:139;;42369:419;;;:::o;42794:224::-;42934:34;42930:1;42922:6;42918:14;42911:58;43003:7;42998:2;42990:6;42986:15;42979:32;42794:224;:::o;43024:366::-;43166:3;43187:67;43251:2;43246:3;43187:67;:::i;:::-;43180:74;;43263:93;43352:3;43263:93;:::i;:::-;43381:2;43376:3;43372:12;43365:19;;43024:366;;;:::o;43396:419::-;43562:4;43600:2;43589:9;43585:18;43577:26;;43649:9;43643:4;43639:20;43635:1;43624:9;43620:17;43613:47;43677:131;43803:4;43677:131;:::i;:::-;43669:139;;43396:419;;;:::o;43821:229::-;43961:34;43957:1;43949:6;43945:14;43938:58;44030:12;44025:2;44017:6;44013:15;44006:37;43821:229;:::o;44056:366::-;44198:3;44219:67;44283:2;44278:3;44219:67;:::i;:::-;44212:74;;44295:93;44384:3;44295:93;:::i;:::-;44413:2;44408:3;44404:12;44397:19;;44056:366;;;:::o;44428:419::-;44594:4;44632:2;44621:9;44617:18;44609:26;;44681:9;44675:4;44671:20;44667:1;44656:9;44652:17;44645:47;44709:131;44835:4;44709:131;:::i;:::-;44701:139;;44428:419;;;:::o;44853:634::-;45074:4;45112:2;45101:9;45097:18;45089:26;;45161:9;45155:4;45151:20;45147:1;45136:9;45132:17;45125:47;45189:108;45292:4;45283:6;45189:108;:::i;:::-;45181:116;;45344:9;45338:4;45334:20;45329:2;45318:9;45314:18;45307:48;45372:108;45475:4;45466:6;45372:108;:::i;:::-;45364:116;;44853:634;;;;;:::o;45493:220::-;45633:34;45629:1;45621:6;45617:14;45610:58;45702:3;45697:2;45689:6;45685:15;45678:28;45493:220;:::o;45719:366::-;45861:3;45882:67;45946:2;45941:3;45882:67;:::i;:::-;45875:74;;45958:93;46047:3;45958:93;:::i;:::-;46076:2;46071:3;46067:12;46060:19;;45719:366;;;:::o;46091:419::-;46257:4;46295:2;46284:9;46280:18;46272:26;;46344:9;46338:4;46334:20;46330:1;46319:9;46315:17;46308:47;46372:131;46498:4;46372:131;:::i;:::-;46364:139;;46091:419;;;:::o;46516:332::-;46637:4;46675:2;46664:9;46660:18;46652:26;;46688:71;46756:1;46745:9;46741:17;46732:6;46688:71;:::i;:::-;46769:72;46837:2;46826:9;46822:18;46813:6;46769:72;:::i;:::-;46516:332;;;;;:::o;46854:228::-;46994:34;46990:1;46982:6;46978:14;46971:58;47063:11;47058:2;47050:6;47046:15;47039:36;46854:228;:::o;47088:366::-;47230:3;47251:67;47315:2;47310:3;47251:67;:::i;:::-;47244:74;;47327:93;47416:3;47327:93;:::i;:::-;47445:2;47440:3;47436:12;47429:19;;47088:366;;;:::o;47460:419::-;47626:4;47664:2;47653:9;47649:18;47641:26;;47713:9;47707:4;47703:20;47699:1;47688:9;47684:17;47677:47;47741:131;47867:4;47741:131;:::i;:::-;47733:139;;47460:419;;;:::o;47885:98::-;47936:6;47970:5;47964:12;47954:22;;47885:98;;;:::o;47989:168::-;48072:11;48106:6;48101:3;48094:19;48146:4;48141:3;48137:14;48122:29;;47989:168;;;;:::o;48163:360::-;48249:3;48277:38;48309:5;48277:38;:::i;:::-;48331:70;48394:6;48389:3;48331:70;:::i;:::-;48324:77;;48410:52;48455:6;48450:3;48443:4;48436:5;48432:16;48410:52;:::i;:::-;48487:29;48509:6;48487:29;:::i;:::-;48482:3;48478:39;48471:46;;48253:270;48163:360;;;;:::o;48529:1053::-;48852:4;48890:3;48879:9;48875:19;48867:27;;48904:71;48972:1;48961:9;48957:17;48948:6;48904:71;:::i;:::-;48985:72;49053:2;49042:9;49038:18;49029:6;48985:72;:::i;:::-;49104:9;49098:4;49094:20;49089:2;49078:9;49074:18;49067:48;49132:108;49235:4;49226:6;49132:108;:::i;:::-;49124:116;;49287:9;49281:4;49277:20;49272:2;49261:9;49257:18;49250:48;49315:108;49418:4;49409:6;49315:108;:::i;:::-;49307:116;;49471:9;49465:4;49461:20;49455:3;49444:9;49440:19;49433:49;49499:76;49570:4;49561:6;49499:76;:::i;:::-;49491:84;;48529:1053;;;;;;;;:::o;49588:141::-;49644:5;49675:6;49669:13;49660:22;;49691:32;49717:5;49691:32;:::i;:::-;49588:141;;;;:::o;49735:349::-;49804:6;49853:2;49841:9;49832:7;49828:23;49824:32;49821:119;;;49859:79;;:::i;:::-;49821:119;49979:1;50004:63;50059:7;50050:6;50039:9;50035:22;50004:63;:::i;:::-;49994:73;;49950:127;49735:349;;;;:::o;50090:106::-;50134:8;50183:5;50178:3;50174:15;50153:36;;50090:106;;;:::o;50202:183::-;50237:3;50275:1;50257:16;50254:23;50251:128;;;50313:1;50310;50307;50292:23;50335:34;50366:1;50360:8;50335:34;:::i;:::-;50328:41;;50251:128;50202:183;:::o;50391:711::-;50430:3;50468:4;50450:16;50447:26;50444:39;;;50476:5;;50444:39;50505:20;;:::i;:::-;50580:1;50562:16;50558:24;50555:1;50549:4;50534:49;50613:4;50607:11;50712:16;50705:4;50697:6;50693:17;50690:39;50657:18;50649:6;50646:30;50630:113;50627:146;;;50758:5;;;;50627:146;50804:6;50798:4;50794:17;50840:3;50834:10;50867:18;50859:6;50856:30;50853:43;;;50889:5;;;;;;50853:43;50937:6;50930:4;50925:3;50921:14;50917:27;50996:1;50978:16;50974:24;50968:4;50964:35;50959:3;50956:44;50953:57;;;51003:5;;;;;;;50953:57;51020;51068:6;51062:4;51058:17;51050:6;51046:30;51040:4;51020:57;:::i;:::-;51093:3;51086:10;;50434:668;;;;;50391:711;;:::o;51108:239::-;51248:34;51244:1;51236:6;51232:14;51225:58;51317:22;51312:2;51304:6;51300:15;51293:47;51108:239;:::o;51353:366::-;51495:3;51516:67;51580:2;51575:3;51516:67;:::i;:::-;51509:74;;51592:93;51681:3;51592:93;:::i;:::-;51710:2;51705:3;51701:12;51694:19;;51353:366;;;:::o;51725:419::-;51891:4;51929:2;51918:9;51914:18;51906:26;;51978:9;51972:4;51968:20;51964:1;51953:9;51949:17;51942:47;52006:131;52132:4;52006:131;:::i;:::-;51998:139;;51725:419;;;:::o;52150:227::-;52290:34;52286:1;52278:6;52274:14;52267:58;52359:10;52354:2;52346:6;52342:15;52335:35;52150:227;:::o;52383:366::-;52525:3;52546:67;52610:2;52605:3;52546:67;:::i;:::-;52539:74;;52622:93;52711:3;52622:93;:::i;:::-;52740:2;52735:3;52731:12;52724:19;;52383:366;;;:::o;52755:419::-;52921:4;52959:2;52948:9;52944:18;52936:26;;53008:9;53002:4;52998:20;52994:1;52983:9;52979:17;52972:47;53036:131;53162:4;53036:131;:::i;:::-;53028:139;;52755:419;;;:::o;53180:751::-;53403:4;53441:3;53430:9;53426:19;53418:27;;53455:71;53523:1;53512:9;53508:17;53499:6;53455:71;:::i;:::-;53536:72;53604:2;53593:9;53589:18;53580:6;53536:72;:::i;:::-;53618;53686:2;53675:9;53671:18;53662:6;53618:72;:::i;:::-;53700;53768:2;53757:9;53753:18;53744:6;53700:72;:::i;:::-;53820:9;53814:4;53810:20;53804:3;53793:9;53789:19;53782:49;53848:76;53919:4;53910:6;53848:76;:::i;:::-;53840:84;;53180:751;;;;;;;;:::o

Swarm Source

ipfs://769958ee3c38a4fbec9ed6d623099ee38d3dc5dd6fbf03dafab2cf008b60f9b1
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.