ETH Price: $2,394.41 (-0.82%)

Token

DeadPuppetSocietyNFT (DPS)
 

Overview

Max Total Supply

0 DPS

Holders

105

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 DPS
0x224e2782f7879f88b8c3173b026e97a51838a84e
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:
DeadPuppetSociety

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 12: DeadPuppetSociety.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Ownable.sol";
import "./IERC1155.sol";

contract DeadPuppetSociety is ERC721, Ownable {
    using Address for address;
    using Strings for uint256;
    
    // metadata
    bool public metadataLocked = false;
    string public baseURI = "";

    // supply and phases
    uint256 public availSupply;
    uint256 public reservedSupply;
    uint256 public mintIndex;
    bool public presaleEnded = false;
    bool public publicSaleEnded = false;
    bool public mintPaused = true;
    
    // price
    uint256 public price = 0.07 ether;

    // limits
    uint256 public maxPerTx = 50;
    
    // shareholder withdraw
    uint256 public withdrawnByOwner;
    uint256 public withdrawnByShareholder;
    address public shareholderAddress;
    uint256 public constant SHAREHOLDER_PERCENTAGE = 15;

    // presale access
    IERC1155 public PresaleAccessToken;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection, and by setting supply caps, mint indexes, and reserves
     */
    constructor()
        ERC721("DeadPuppetSocietyNFT", "DPS")
    {
        availSupply = 7000;
        reservedSupply = 250;
        shareholderAddress = 0xbCc4CD9BDdaCeFff7e0E7B9dd7a7d7FbC622a960;
    }
    
    /**
     * ------------ METADATA ------------ 
     */

    /**
     * @dev Gets base metadata URI
     */
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    /**
     * @dev Sets base metadata URI, callable by owner
     */
    function setBaseUri(string memory _uri) external onlyOwner {
        require(metadataLocked == false);
        baseURI = _uri;
    }
    
    /**
     * @dev Lock metadata URI forever, callable by owner
     */
    function lockMetadata() external onlyOwner {
        require(metadataLocked == false);
        metadataLocked = true;
    }
    
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
        
        string memory base = _baseURI();
        return string(abi.encodePacked(base, tokenId.toString()));
    }
    
    /**
     * ------------ SALE AND PRESALE ------------ 
     */
     
    /**
     * @dev Ends public sale forever, callable by owner
     */
    function endSaleForever() external onlyOwner {
        publicSaleEnded = true;
    }
    
    /**
     * @dev Ends the presale, callable by owner
     */
    function endPresale() external onlyOwner {
        presaleEnded = true;
    }

    /**
     * @dev Pause/unpause sale or presale
     */
    function togglePauseMinting() external onlyOwner {
        mintPaused = !mintPaused;
    }

    /**
     * ------------ CONFIGURATION ------------ 
     */

    /**
     * @dev Edit sale parameters: price points and count limits
     */
    function editParameters(uint256 _price, uint256 _maxPerTx) external onlyOwner {
        price = _price;
        maxPerTx = _maxPerTx;
    }

    /**
     * @dev Increase available (total) or reserved supply
     */
    function supplyAdd(uint256 _totalSupplyIncrease, uint256 _reservedSupplyIncrease) external onlyOwner {
        availSupply += _totalSupplyIncrease;
        reservedSupply += _reservedSupplyIncrease;
    }

    /**
     * @dev Decrease available (total) or reserved supply
     */
    function supplySubtract(uint256 _totalSupplyDecrease, uint256 _reservedSupplyDecrease) external onlyOwner {
        availSupply -= _totalSupplyDecrease;
        reservedSupply -= _reservedSupplyDecrease;
    }

    /**
     * @dev Set presale access token address
     */
    function setPresaleAccessToken(address addr) external onlyOwner {
        PresaleAccessToken = IERC1155(addr);
    }
     
    /**
     * ------------ MINTING ------------ 
     */
    
    /**
     * @dev Mints `count` tokens to `to` address; internal
     */
    function mintInternal(address to, uint256 count) internal {
        for (uint256 i = 0; i < count; i++) {
            _mint(to, mintIndex);
            mintIndex++;
        }
    }
    
    /**
     * @dev Manual minting by owner, callable by owner
     */
    function mintOwner(address[] calldata owners, uint256[] calldata counts) external onlyOwner {
        require(owners.length == counts.length, "Bad length");
         
        for (uint256 i = 0; i < counts.length; i++) {
            require(reservedSupply >= counts[i], "Reserve exceeded");
            
            mintInternal(owners[i], counts[i]);
            reservedSupply -= counts[i];
            availSupply -= counts[i];
        }
    }
    
    /**
     * @dev Public minting during public sale or presale
     */
    function mint(uint256 count) public payable{
        require(!mintPaused, "Minting is currently paused");
        require(publicSaleEnded == false, "Sale ended");

        require(msg.value == count * price, "Ether value incorrect");
        require(availSupply - reservedSupply >= count, "Supply exceeded");

        if (!presaleEnded) {
            // presale checks
            require(PresaleAccessToken.balanceOf(msg.sender, 1) > 0, "Not whitelisted");
        } else {
            // per tx limit during sale
            require(count <= maxPerTx, "Too many tokens");
        }
        
        availSupply -= count;
        mintInternal(msg.sender, count);
    }

    /**
     * @dev Withdraw ether from this contract, callable by owner
     */
    function withdraw() external {
        require(msg.sender == shareholderAddress || msg.sender == owner(), "Only Shareholder");

        uint256 balance = address(this).balance;

        uint256 availableToWithdrawShareholder = balance * SHAREHOLDER_PERCENTAGE / 100;
        uint256 availableToWithdrawOwner = balance * (100-SHAREHOLDER_PERCENTAGE) / 100;

        require(balance > 0, "Nothing to withdraw");
        
        payable(owner()).transfer(availableToWithdrawOwner);
        payable(shareholderAddress).transfer(availableToWithdrawShareholder);
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 12: ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

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

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

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

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

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @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, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 6 of 12: IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.3.2 (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 7 of 12: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 8 of 12: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 9 of 12: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 10 of 12: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 11 of 12: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 12 of 12: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PresaleAccessToken","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHAREHOLDER_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"availSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_maxPerTx","type":"uint256"}],"name":"editParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endSaleForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleEnded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setPresaleAccessToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareholderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalSupplyIncrease","type":"uint256"},{"internalType":"uint256","name":"_reservedSupplyIncrease","type":"uint256"}],"name":"supplyAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalSupplyDecrease","type":"uint256"},{"internalType":"uint256","name":"_reservedSupplyDecrease","type":"uint256"}],"name":"supplySubtract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePauseMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawnByOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawnByShareholder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526000600660146101000a81548160ff021916908315150217905550604051806020016040528060008152506007908051906020019062000046929190620002b0565b506000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555066f8b0a10e470000600c556032600d55348015620000b557600080fd5b506040518060400160405280601481526020017f44656164507570706574536f63696574794e46540000000000000000000000008152506040518060400160405280600381526020017f445053000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013a929190620002b0565b50806001908051906020019062000153929190620002b0565b505050620001766200016a620001e260201b60201c565b620001ea60201b60201c565b611b5860088190555060fa60098190555073bcc4cd9bddacefff7e0e7b9dd7a7d7fbc622a960601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003c5565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002be9062000360565b90600052602060002090601f016020900481019282620002e257600085556200032e565b82601f10620002fd57805160ff19168380011785556200032e565b828001600101855582156200032e579182015b828111156200032d57825182559160200191906001019062000310565b5b5090506200033d919062000341565b5090565b5b808211156200035c57600081600090555060010162000342565b5090565b600060028204905060018216806200037957607f821691505b6020821081141562000390576200038f62000396565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6147cc80620003d56000396000f3fe60806040526004361061025c5760003560e01c80637e4831d311610144578063a22cb465116100b6578063d8fa31681161007a578063d8fa316814610857578063e580b2b014610880578063e985e9c5146108ab578063f2fde38b146108e8578063f74f9bfd14610911578063f968adbe1461093c5761025c565b8063a22cb46514610788578063a43be57b146107b1578063b88d4fde146107c8578063c87b56dd146107f1578063cdf6d06e1461082e5761025c565b806395d89b411161010857806395d89b41146106ab578063989bdbb6146106d65780639f5215dd146106ed578063a035b1fe14610718578063a0712d6814610743578063a0bcfc7f1461075f5761025c565b80637e4831d3146105e857806382c6ee9f146106135780638a49148b1461062a5780638da5cb5b14610655578063943d40e7146106805761025c565b806342842e0e116101dd57806369d2ceb1116101a157806369d2ceb1146104e85780636c0360eb1461051357806370a082311461053e578063715018a61461057b57806373b9904a146105925780637a632dc7146105bd5761025c565b806342842e0e1461040357806344d19d2b1461042c57806347f1eae3146104575780634f994bfb146104825780636352211e146104ab5761025c565b806315f43cc91161022457806315f43cc91461035a57806321d0aa231461038357806323b872dd146103ac5780633ccfd60b146103d55780633e53afc3146103ec5761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b314610306578063125e0af01461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613254565b610967565b60405161029591906138c1565b60405180910390f35b3480156102aa57600080fd5b506102b3610a49565b6040516102c091906138f7565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906132f7565b610adb565b6040516102fd9190613831565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613193565b610b60565b005b34801561033b57600080fd5b50610344610c78565b60405161035191906138c1565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613351565b610c8b565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190613351565b610d3d565b005b3480156103b857600080fd5b506103d360048036038101906103ce919061307d565b610dcb565b005b3480156103e157600080fd5b506103ea610e2b565b005b3480156103f857600080fd5b50610401611042565b005b34801561040f57600080fd5b5061042a6004803603810190610425919061307d565b6110ea565b005b34801561043857600080fd5b5061044161110a565b60405161044e9190613c59565b60405180910390f35b34801561046357600080fd5b5061046c611110565b6040516104799190613c59565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613351565b611116565b005b3480156104b757600080fd5b506104d260048036038101906104cd91906132f7565b6111c8565b6040516104df9190613831565b60405180910390f35b3480156104f457600080fd5b506104fd61127a565b60405161050a91906138c1565b60405180910390f35b34801561051f57600080fd5b5061052861128d565b60405161053591906138f7565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613010565b61131b565b6040516105729190613c59565b60405180910390f35b34801561058757600080fd5b506105906113d3565b005b34801561059e57600080fd5b506105a761145b565b6040516105b49190613c59565b60405180910390f35b3480156105c957600080fd5b506105d2611460565b6040516105df91906138dc565b60405180910390f35b3480156105f457600080fd5b506105fd611486565b60405161060a91906138c1565b60405180910390f35b34801561061f57600080fd5b50610628611499565b005b34801561063657600080fd5b5061063f611532565b60405161064c9190613c59565b60405180910390f35b34801561066157600080fd5b5061066a611538565b6040516106779190613831565b60405180910390f35b34801561068c57600080fd5b50610695611562565b6040516106a29190613831565b60405180910390f35b3480156106b757600080fd5b506106c0611588565b6040516106cd91906138f7565b60405180910390f35b3480156106e257600080fd5b506106eb61161a565b005b3480156106f957600080fd5b506107026116d3565b60405161070f9190613c59565b60405180910390f35b34801561072457600080fd5b5061072d6116d9565b60405161073a9190613c59565b60405180910390f35b61075d600480360381019061075891906132f7565b6116df565b005b34801561076b57600080fd5b50610786600480360381019061078191906132ae565b61199a565b005b34801561079457600080fd5b506107af60048036038101906107aa9190613153565b611a50565b005b3480156107bd57600080fd5b506107c6611a66565b005b3480156107d457600080fd5b506107ef60048036038101906107ea91906130d0565b611aff565b005b3480156107fd57600080fd5b50610818600480360381019061081391906132f7565b611b61565b60405161082591906138f7565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613010565b611be9565b005b34801561086357600080fd5b5061087e600480360381019061087991906131d3565b611ca9565b005b34801561088c57600080fd5b50610895611ea1565b6040516108a291906138c1565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd919061303d565b611eb4565b6040516108df91906138c1565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613010565b611f48565b005b34801561091d57600080fd5b50610926612040565b6040516109339190613c59565b60405180910390f35b34801561094857600080fd5b50610951612046565b60405161095e9190613c59565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a425750610a418261204c565b5b9050919050565b606060008054610a5890613f51565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490613f51565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b6000610ae6826120b6565b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90613b19565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6b826111c8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613bb9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfb612122565b73ffffffffffffffffffffffffffffffffffffffff161480610c2a5750610c2981610c24612122565b611eb4565b5b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090613a59565b60405180910390fd5b610c73838361212a565b505050565b600b60019054906101000a900460ff1681565b610c93612122565b73ffffffffffffffffffffffffffffffffffffffff16610cb1611538565b73ffffffffffffffffffffffffffffffffffffffff1614610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613b59565b60405180910390fd5b8160086000828254610d199190613e1f565b925050819055508060096000828254610d329190613e1f565b925050819055505050565b610d45612122565b73ffffffffffffffffffffffffffffffffffffffff16610d63611538565b73ffffffffffffffffffffffffffffffffffffffff1614610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090613b59565b60405180910390fd5b81600c8190555080600d819055505050565b610ddc610dd6612122565b826121e3565b610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613c19565b60405180910390fd5b610e268383836122c1565b505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610eb95750610e8a611538565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90613bd9565b60405180910390fd5b600047905060006064600f83610f0e9190613dc5565b610f189190613d94565b905060006064600f6064610f2c9190613e1f565b84610f379190613dc5565b610f419190613d94565b905060008311610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613939565b60405180910390fd5b610f8e611538565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fd3573d6000803e3d6000fd5b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561103c573d6000803e3d6000fd5b50505050565b61104a612122565b73ffffffffffffffffffffffffffffffffffffffff16611068611538565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613b59565b60405180910390fd5b600b60029054906101000a900460ff1615600b60026101000a81548160ff021916908315150217905550565b61110583838360405180602001604052806000815250611aff565b505050565b60095481565b600f5481565b61111e612122565b73ffffffffffffffffffffffffffffffffffffffff1661113c611538565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613b59565b60405180910390fd5b81600860008282546111a49190613d3e565b9250508190555080600960008282546111bd9190613d3e565b925050819055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613ab9565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b6007805461129a90613f51565b80601f01602080910402602001604051908101604052809291908181526020018280546112c690613f51565b80156113135780601f106112e857610100808354040283529160200191611313565b820191906000526020600020905b8154815290600101906020018083116112f657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613a99565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113db612122565b73ffffffffffffffffffffffffffffffffffffffff166113f9611538565b73ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690613b59565b60405180910390fd5b611459600061251d565b565b600f81565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60029054906101000a900460ff1681565b6114a1612122565b73ffffffffffffffffffffffffffffffffffffffff166114bf611538565b73ffffffffffffffffffffffffffffffffffffffff1614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90613b59565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b600e5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461159790613f51565b80601f01602080910402602001604051908101604052809291908181526020018280546115c390613f51565b80156116105780601f106115e557610100808354040283529160200191611610565b820191906000526020600020905b8154815290600101906020018083116115f357829003601f168201915b5050505050905090565b611622612122565b73ffffffffffffffffffffffffffffffffffffffff16611640611538565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613b59565b60405180910390fd5b60001515600660149054906101000a900460ff161515146116b657600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60085481565b600c5481565b600b60029054906101000a900460ff161561172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690613bf9565b60405180910390fd5b60001515600b60019054906101000a900460ff16151514611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613b99565b60405180910390fd5b600c54816117939190613dc5565b34146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90613c39565b60405180910390fd5b806009546008546117e59190613e1f565b1015611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90613a39565b60405180910390fd5b600b60009054906101000a900460ff1661192e576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360016040518363ffffffff1660e01b8152600401611899929190613898565b60206040518083038186803b1580156118b157600080fd5b505afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190613324565b11611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090613a79565b60405180910390fd5b611974565b600d54811115611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a90613999565b60405180910390fd5b5b80600860008282546119869190613e1f565b9250508190555061199733826125e3565b50565b6119a2612122565b73ffffffffffffffffffffffffffffffffffffffff166119c0611538565b73ffffffffffffffffffffffffffffffffffffffff1614611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613b59565b60405180910390fd5b60001515600660149054906101000a900460ff16151514611a3657600080fd5b8060079080519060200190611a4c929190612d63565b5050565b611a62611a5b612122565b838361262a565b5050565b611a6e612122565b73ffffffffffffffffffffffffffffffffffffffff16611a8c611538565b73ffffffffffffffffffffffffffffffffffffffff1614611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613b59565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b611b10611b0a612122565b836121e3565b611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690613c19565b60405180910390fd5b611b5b84848484612797565b50505050565b6060611b6c826120b6565b611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290613af9565b60405180910390fd5b6000611bb56127f3565b905080611bc184612885565b604051602001611bd292919061380d565b604051602081830303815290604052915050919050565b611bf1612122565b73ffffffffffffffffffffffffffffffffffffffff16611c0f611538565b73ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613b59565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cb1612122565b73ffffffffffffffffffffffffffffffffffffffff16611ccf611538565b73ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90613b59565b60405180910390fd5b818190508484905014611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490613b39565b60405180910390fd5b60005b82829050811015611e9a57828282818110611d8e57611d8d6140bb565b5b905060200201356009541015611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613919565b60405180910390fd5b611e23858583818110611def57611dee6140bb565b5b9050602002016020810190611e049190613010565b848484818110611e1757611e166140bb565b5b905060200201356125e3565b828282818110611e3657611e356140bb565b5b9050602002013560096000828254611e4e9190613e1f565b92505081905550828282818110611e6857611e676140bb565b5b9050602002013560086000828254611e809190613e1f565b925050819055508080611e9290613fb4565b915050611d70565b5050505050565b600b60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f50612122565b73ffffffffffffffffffffffffffffffffffffffff16611f6e611538565b73ffffffffffffffffffffffffffffffffffffffff1614611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90613b59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b90613979565b60405180910390fd5b61203d8161251d565b50565b600a5481565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661219d836111c8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121ee826120b6565b61222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490613a19565b60405180910390fd5b6000612238836111c8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122a757508373ffffffffffffffffffffffffffffffffffffffff1661228f84610adb565b73ffffffffffffffffffffffffffffffffffffffff16145b806122b857506122b78185611eb4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122e1826111c8565b73ffffffffffffffffffffffffffffffffffffffff1614612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90613b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e906139d9565b60405180910390fd5b6123b28383836129e6565b6123bd60008261212a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461240d9190613e1f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124649190613d3e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612625576125fa83600a546129eb565b600a600081548092919061260d90613fb4565b9190505550808061261d90613fb4565b9150506125e6565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612690906139f9565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161278a91906138c1565b60405180910390a3505050565b6127a28484846122c1565b6127ae84848484612bb9565b6127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490613959565b60405180910390fd5b50505050565b60606007805461280290613f51565b80601f016020809104026020016040519081016040528092919081815260200182805461282e90613f51565b801561287b5780601f106128505761010080835404028352916020019161287b565b820191906000526020600020905b81548152906001019060200180831161285e57829003601f168201915b5050505050905090565b606060008214156128cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e1565b600082905060005b600082146128ff5780806128e890613fb4565b915050600a826128f89190613d94565b91506128d5565b60008167ffffffffffffffff81111561291b5761291a6140ea565b5b6040519080825280601f01601f19166020018201604052801561294d5781602001600182028036833780820191505090505b5090505b600085146129da576001826129669190613e1f565b9150600a856129759190613ffd565b60306129819190613d3e565b60f81b818381518110612997576129966140bb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129d39190613d94565b9450612951565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5290613ad9565b60405180910390fd5b612a64816120b6565b15612aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9b906139b9565b60405180910390fd5b612ab0600083836129e6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b009190613d3e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612bda8473ffffffffffffffffffffffffffffffffffffffff16612d50565b15612d43578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c03612122565b8786866040518563ffffffff1660e01b8152600401612c25949392919061384c565b602060405180830381600087803b158015612c3f57600080fd5b505af1925050508015612c7057506040513d601f19601f82011682018060405250810190612c6d9190613281565b60015b612cf3573d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b50600081511415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290613959565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d48565b600190505b949350505050565b600080823b905060008111915050919050565b828054612d6f90613f51565b90600052602060002090601f016020900481019282612d915760008555612dd8565b82601f10612daa57805160ff1916838001178555612dd8565b82800160010185558215612dd8579182015b82811115612dd7578251825591602001919060010190612dbc565b5b509050612de59190612de9565b5090565b5b80821115612e02576000816000905550600101612dea565b5090565b6000612e19612e1484613c99565b613c74565b905082815260208101848484011115612e3557612e34614128565b5b612e40848285613f0f565b509392505050565b6000612e5b612e5684613cca565b613c74565b905082815260208101848484011115612e7757612e76614128565b5b612e82848285613f0f565b509392505050565b600081359050612e998161473a565b92915050565b60008083601f840112612eb557612eb461411e565b5b8235905067ffffffffffffffff811115612ed257612ed1614119565b5b602083019150836020820283011115612eee57612eed614123565b5b9250929050565b60008083601f840112612f0b57612f0a61411e565b5b8235905067ffffffffffffffff811115612f2857612f27614119565b5b602083019150836020820283011115612f4457612f43614123565b5b9250929050565b600081359050612f5a81614751565b92915050565b600081359050612f6f81614768565b92915050565b600081519050612f8481614768565b92915050565b600082601f830112612f9f57612f9e61411e565b5b8135612faf848260208601612e06565b91505092915050565b600082601f830112612fcd57612fcc61411e565b5b8135612fdd848260208601612e48565b91505092915050565b600081359050612ff58161477f565b92915050565b60008151905061300a8161477f565b92915050565b60006020828403121561302657613025614132565b5b600061303484828501612e8a565b91505092915050565b6000806040838503121561305457613053614132565b5b600061306285828601612e8a565b925050602061307385828601612e8a565b9150509250929050565b60008060006060848603121561309657613095614132565b5b60006130a486828701612e8a565b93505060206130b586828701612e8a565b92505060406130c686828701612fe6565b9150509250925092565b600080600080608085870312156130ea576130e9614132565b5b60006130f887828801612e8a565b945050602061310987828801612e8a565b935050604061311a87828801612fe6565b925050606085013567ffffffffffffffff81111561313b5761313a61412d565b5b61314787828801612f8a565b91505092959194509250565b6000806040838503121561316a57613169614132565b5b600061317885828601612e8a565b925050602061318985828601612f4b565b9150509250929050565b600080604083850312156131aa576131a9614132565b5b60006131b885828601612e8a565b92505060206131c985828601612fe6565b9150509250929050565b600080600080604085870312156131ed576131ec614132565b5b600085013567ffffffffffffffff81111561320b5761320a61412d565b5b61321787828801612e9f565b9450945050602085013567ffffffffffffffff81111561323a5761323961412d565b5b61324687828801612ef5565b925092505092959194509250565b60006020828403121561326a57613269614132565b5b600061327884828501612f60565b91505092915050565b60006020828403121561329757613296614132565b5b60006132a584828501612f75565b91505092915050565b6000602082840312156132c4576132c3614132565b5b600082013567ffffffffffffffff8111156132e2576132e161412d565b5b6132ee84828501612fb8565b91505092915050565b60006020828403121561330d5761330c614132565b5b600061331b84828501612fe6565b91505092915050565b60006020828403121561333a57613339614132565b5b600061334884828501612ffb565b91505092915050565b6000806040838503121561336857613367614132565b5b600061337685828601612fe6565b925050602061338785828601612fe6565b9150509250929050565b61339a81613e53565b82525050565b6133a981613e65565b82525050565b60006133ba82613cfb565b6133c48185613d11565b93506133d4818560208601613f1e565b6133dd81614137565b840191505092915050565b6133f181613ec7565b82525050565b61340081613ed9565b82525050565b600061341182613d06565b61341b8185613d22565b935061342b818560208601613f1e565b61343481614137565b840191505092915050565b600061344a82613d06565b6134548185613d33565b9350613464818560208601613f1e565b80840191505092915050565b600061347d601083613d22565b915061348882614148565b602082019050919050565b60006134a0601383613d22565b91506134ab82614171565b602082019050919050565b60006134c3603283613d22565b91506134ce8261419a565b604082019050919050565b60006134e6602683613d22565b91506134f1826141e9565b604082019050919050565b6000613509600f83613d22565b915061351482614238565b602082019050919050565b600061352c601c83613d22565b915061353782614261565b602082019050919050565b600061354f602483613d22565b915061355a8261428a565b604082019050919050565b6000613572601983613d22565b915061357d826142d9565b602082019050919050565b6000613595602c83613d22565b91506135a082614302565b604082019050919050565b60006135b8600f83613d22565b91506135c382614351565b602082019050919050565b60006135db603883613d22565b91506135e68261437a565b604082019050919050565b60006135fe600f83613d22565b9150613609826143c9565b602082019050919050565b6000613621602a83613d22565b915061362c826143f2565b604082019050919050565b6000613644602983613d22565b915061364f82614441565b604082019050919050565b6000613667602083613d22565b915061367282614490565b602082019050919050565b600061368a603183613d22565b9150613695826144b9565b604082019050919050565b60006136ad602c83613d22565b91506136b882614508565b604082019050919050565b60006136d0600a83613d22565b91506136db82614557565b602082019050919050565b60006136f3602083613d22565b91506136fe82614580565b602082019050919050565b6000613716602983613d22565b9150613721826145a9565b604082019050919050565b6000613739600a83613d22565b9150613744826145f8565b602082019050919050565b600061375c602183613d22565b915061376782614621565b604082019050919050565b600061377f601083613d22565b915061378a82614670565b602082019050919050565b60006137a2601b83613d22565b91506137ad82614699565b602082019050919050565b60006137c5603183613d22565b91506137d0826146c2565b604082019050919050565b60006137e8601583613d22565b91506137f382614711565b602082019050919050565b61380781613ebd565b82525050565b6000613819828561343f565b9150613825828461343f565b91508190509392505050565b60006020820190506138466000830184613391565b92915050565b60006080820190506138616000830187613391565b61386e6020830186613391565b61387b60408301856137fe565b818103606083015261388d81846133af565b905095945050505050565b60006040820190506138ad6000830185613391565b6138ba60208301846133f7565b9392505050565b60006020820190506138d660008301846133a0565b92915050565b60006020820190506138f160008301846133e8565b92915050565b600060208201905081810360008301526139118184613406565b905092915050565b6000602082019050818103600083015261393281613470565b9050919050565b6000602082019050818103600083015261395281613493565b9050919050565b60006020820190508181036000830152613972816134b6565b9050919050565b60006020820190508181036000830152613992816134d9565b9050919050565b600060208201905081810360008301526139b2816134fc565b9050919050565b600060208201905081810360008301526139d28161351f565b9050919050565b600060208201905081810360008301526139f281613542565b9050919050565b60006020820190508181036000830152613a1281613565565b9050919050565b60006020820190508181036000830152613a3281613588565b9050919050565b60006020820190508181036000830152613a52816135ab565b9050919050565b60006020820190508181036000830152613a72816135ce565b9050919050565b60006020820190508181036000830152613a92816135f1565b9050919050565b60006020820190508181036000830152613ab281613614565b9050919050565b60006020820190508181036000830152613ad281613637565b9050919050565b60006020820190508181036000830152613af28161365a565b9050919050565b60006020820190508181036000830152613b128161367d565b9050919050565b60006020820190508181036000830152613b32816136a0565b9050919050565b60006020820190508181036000830152613b52816136c3565b9050919050565b60006020820190508181036000830152613b72816136e6565b9050919050565b60006020820190508181036000830152613b9281613709565b9050919050565b60006020820190508181036000830152613bb28161372c565b9050919050565b60006020820190508181036000830152613bd28161374f565b9050919050565b60006020820190508181036000830152613bf281613772565b9050919050565b60006020820190508181036000830152613c1281613795565b9050919050565b60006020820190508181036000830152613c32816137b8565b9050919050565b60006020820190508181036000830152613c52816137db565b9050919050565b6000602082019050613c6e60008301846137fe565b92915050565b6000613c7e613c8f565b9050613c8a8282613f83565b919050565b6000604051905090565b600067ffffffffffffffff821115613cb457613cb36140ea565b5b613cbd82614137565b9050602081019050919050565b600067ffffffffffffffff821115613ce557613ce46140ea565b5b613cee82614137565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d4982613ebd565b9150613d5483613ebd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8957613d8861402e565b5b828201905092915050565b6000613d9f82613ebd565b9150613daa83613ebd565b925082613dba57613db961405d565b5b828204905092915050565b6000613dd082613ebd565b9150613ddb83613ebd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e1457613e1361402e565b5b828202905092915050565b6000613e2a82613ebd565b9150613e3583613ebd565b925082821015613e4857613e4761402e565b5b828203905092915050565b6000613e5e82613e9d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613ed282613eeb565b9050919050565b6000613ee482613ebd565b9050919050565b6000613ef682613efd565b9050919050565b6000613f0882613e9d565b9050919050565b82818337600083830152505050565b60005b83811015613f3c578082015181840152602081019050613f21565b83811115613f4b576000848401525b50505050565b60006002820490506001821680613f6957607f821691505b60208210811415613f7d57613f7c61408c565b5b50919050565b613f8c82614137565b810181811067ffffffffffffffff82111715613fab57613faa6140ea565b5b80604052505050565b6000613fbf82613ebd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ff257613ff161402e565b5b600182019050919050565b600061400882613ebd565b915061401383613ebd565b9250826140235761402261405d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265736572766520657863656564656400000000000000000000000000000000600082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f426164206c656e67746800000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79205368617265686f6c64657200000000000000000000000000000000600082015250565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b61474381613e53565b811461474e57600080fd5b50565b61475a81613e65565b811461476557600080fd5b50565b61477181613e71565b811461477c57600080fd5b50565b61478881613ebd565b811461479357600080fd5b5056fea264697066735822122053cea5cf50e097a8afe7cb509ebd9a192b44bce3add956b39bfad386c4140a5164736f6c63430008070033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80637e4831d311610144578063a22cb465116100b6578063d8fa31681161007a578063d8fa316814610857578063e580b2b014610880578063e985e9c5146108ab578063f2fde38b146108e8578063f74f9bfd14610911578063f968adbe1461093c5761025c565b8063a22cb46514610788578063a43be57b146107b1578063b88d4fde146107c8578063c87b56dd146107f1578063cdf6d06e1461082e5761025c565b806395d89b411161010857806395d89b41146106ab578063989bdbb6146106d65780639f5215dd146106ed578063a035b1fe14610718578063a0712d6814610743578063a0bcfc7f1461075f5761025c565b80637e4831d3146105e857806382c6ee9f146106135780638a49148b1461062a5780638da5cb5b14610655578063943d40e7146106805761025c565b806342842e0e116101dd57806369d2ceb1116101a157806369d2ceb1146104e85780636c0360eb1461051357806370a082311461053e578063715018a61461057b57806373b9904a146105925780637a632dc7146105bd5761025c565b806342842e0e1461040357806344d19d2b1461042c57806347f1eae3146104575780634f994bfb146104825780636352211e146104ab5761025c565b806315f43cc91161022457806315f43cc91461035a57806321d0aa231461038357806323b872dd146103ac5780633ccfd60b146103d55780633e53afc3146103ec5761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b314610306578063125e0af01461032f575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613254565b610967565b60405161029591906138c1565b60405180910390f35b3480156102aa57600080fd5b506102b3610a49565b6040516102c091906138f7565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906132f7565b610adb565b6040516102fd9190613831565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613193565b610b60565b005b34801561033b57600080fd5b50610344610c78565b60405161035191906138c1565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190613351565b610c8b565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190613351565b610d3d565b005b3480156103b857600080fd5b506103d360048036038101906103ce919061307d565b610dcb565b005b3480156103e157600080fd5b506103ea610e2b565b005b3480156103f857600080fd5b50610401611042565b005b34801561040f57600080fd5b5061042a6004803603810190610425919061307d565b6110ea565b005b34801561043857600080fd5b5061044161110a565b60405161044e9190613c59565b60405180910390f35b34801561046357600080fd5b5061046c611110565b6040516104799190613c59565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613351565b611116565b005b3480156104b757600080fd5b506104d260048036038101906104cd91906132f7565b6111c8565b6040516104df9190613831565b60405180910390f35b3480156104f457600080fd5b506104fd61127a565b60405161050a91906138c1565b60405180910390f35b34801561051f57600080fd5b5061052861128d565b60405161053591906138f7565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613010565b61131b565b6040516105729190613c59565b60405180910390f35b34801561058757600080fd5b506105906113d3565b005b34801561059e57600080fd5b506105a761145b565b6040516105b49190613c59565b60405180910390f35b3480156105c957600080fd5b506105d2611460565b6040516105df91906138dc565b60405180910390f35b3480156105f457600080fd5b506105fd611486565b60405161060a91906138c1565b60405180910390f35b34801561061f57600080fd5b50610628611499565b005b34801561063657600080fd5b5061063f611532565b60405161064c9190613c59565b60405180910390f35b34801561066157600080fd5b5061066a611538565b6040516106779190613831565b60405180910390f35b34801561068c57600080fd5b50610695611562565b6040516106a29190613831565b60405180910390f35b3480156106b757600080fd5b506106c0611588565b6040516106cd91906138f7565b60405180910390f35b3480156106e257600080fd5b506106eb61161a565b005b3480156106f957600080fd5b506107026116d3565b60405161070f9190613c59565b60405180910390f35b34801561072457600080fd5b5061072d6116d9565b60405161073a9190613c59565b60405180910390f35b61075d600480360381019061075891906132f7565b6116df565b005b34801561076b57600080fd5b50610786600480360381019061078191906132ae565b61199a565b005b34801561079457600080fd5b506107af60048036038101906107aa9190613153565b611a50565b005b3480156107bd57600080fd5b506107c6611a66565b005b3480156107d457600080fd5b506107ef60048036038101906107ea91906130d0565b611aff565b005b3480156107fd57600080fd5b50610818600480360381019061081391906132f7565b611b61565b60405161082591906138f7565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190613010565b611be9565b005b34801561086357600080fd5b5061087e600480360381019061087991906131d3565b611ca9565b005b34801561088c57600080fd5b50610895611ea1565b6040516108a291906138c1565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd919061303d565b611eb4565b6040516108df91906138c1565b60405180910390f35b3480156108f457600080fd5b5061090f600480360381019061090a9190613010565b611f48565b005b34801561091d57600080fd5b50610926612040565b6040516109339190613c59565b60405180910390f35b34801561094857600080fd5b50610951612046565b60405161095e9190613c59565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a3257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a425750610a418261204c565b5b9050919050565b606060008054610a5890613f51565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8490613f51565b8015610ad15780601f10610aa657610100808354040283529160200191610ad1565b820191906000526020600020905b815481529060010190602001808311610ab457829003601f168201915b5050505050905090565b6000610ae6826120b6565b610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c90613b19565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6b826111c8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390613bb9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfb612122565b73ffffffffffffffffffffffffffffffffffffffff161480610c2a5750610c2981610c24612122565b611eb4565b5b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6090613a59565b60405180910390fd5b610c73838361212a565b505050565b600b60019054906101000a900460ff1681565b610c93612122565b73ffffffffffffffffffffffffffffffffffffffff16610cb1611538565b73ffffffffffffffffffffffffffffffffffffffff1614610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613b59565b60405180910390fd5b8160086000828254610d199190613e1f565b925050819055508060096000828254610d329190613e1f565b925050819055505050565b610d45612122565b73ffffffffffffffffffffffffffffffffffffffff16610d63611538565b73ffffffffffffffffffffffffffffffffffffffff1614610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090613b59565b60405180910390fd5b81600c8190555080600d819055505050565b610ddc610dd6612122565b826121e3565b610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290613c19565b60405180910390fd5b610e268383836122c1565b505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610eb95750610e8a611538565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90613bd9565b60405180910390fd5b600047905060006064600f83610f0e9190613dc5565b610f189190613d94565b905060006064600f6064610f2c9190613e1f565b84610f379190613dc5565b610f419190613d94565b905060008311610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613939565b60405180910390fd5b610f8e611538565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fd3573d6000803e3d6000fd5b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561103c573d6000803e3d6000fd5b50505050565b61104a612122565b73ffffffffffffffffffffffffffffffffffffffff16611068611538565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613b59565b60405180910390fd5b600b60029054906101000a900460ff1615600b60026101000a81548160ff021916908315150217905550565b61110583838360405180602001604052806000815250611aff565b505050565b60095481565b600f5481565b61111e612122565b73ffffffffffffffffffffffffffffffffffffffff1661113c611538565b73ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613b59565b60405180910390fd5b81600860008282546111a49190613d3e565b9250508190555080600960008282546111bd9190613d3e565b925050819055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613ab9565b60405180910390fd5b80915050919050565b600660149054906101000a900460ff1681565b6007805461129a90613f51565b80601f01602080910402602001604051908101604052809291908181526020018280546112c690613f51565b80156113135780601f106112e857610100808354040283529160200191611313565b820191906000526020600020905b8154815290600101906020018083116112f657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613a99565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113db612122565b73ffffffffffffffffffffffffffffffffffffffff166113f9611538565b73ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690613b59565b60405180910390fd5b611459600061251d565b565b600f81565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60029054906101000a900460ff1681565b6114a1612122565b73ffffffffffffffffffffffffffffffffffffffff166114bf611538565b73ffffffffffffffffffffffffffffffffffffffff1614611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90613b59565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b600e5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461159790613f51565b80601f01602080910402602001604051908101604052809291908181526020018280546115c390613f51565b80156116105780601f106115e557610100808354040283529160200191611610565b820191906000526020600020905b8154815290600101906020018083116115f357829003601f168201915b5050505050905090565b611622612122565b73ffffffffffffffffffffffffffffffffffffffff16611640611538565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613b59565b60405180910390fd5b60001515600660149054906101000a900460ff161515146116b657600080fd5b6001600660146101000a81548160ff021916908315150217905550565b60085481565b600c5481565b600b60029054906101000a900460ff161561172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690613bf9565b60405180910390fd5b60001515600b60019054906101000a900460ff16151514611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90613b99565b60405180910390fd5b600c54816117939190613dc5565b34146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90613c39565b60405180910390fd5b806009546008546117e59190613e1f565b1015611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90613a39565b60405180910390fd5b600b60009054906101000a900460ff1661192e576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360016040518363ffffffff1660e01b8152600401611899929190613898565b60206040518083038186803b1580156118b157600080fd5b505afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190613324565b11611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090613a79565b60405180910390fd5b611974565b600d54811115611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a90613999565b60405180910390fd5b5b80600860008282546119869190613e1f565b9250508190555061199733826125e3565b50565b6119a2612122565b73ffffffffffffffffffffffffffffffffffffffff166119c0611538565b73ffffffffffffffffffffffffffffffffffffffff1614611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613b59565b60405180910390fd5b60001515600660149054906101000a900460ff16151514611a3657600080fd5b8060079080519060200190611a4c929190612d63565b5050565b611a62611a5b612122565b838361262a565b5050565b611a6e612122565b73ffffffffffffffffffffffffffffffffffffffff16611a8c611538565b73ffffffffffffffffffffffffffffffffffffffff1614611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990613b59565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b611b10611b0a612122565b836121e3565b611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690613c19565b60405180910390fd5b611b5b84848484612797565b50505050565b6060611b6c826120b6565b611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290613af9565b60405180910390fd5b6000611bb56127f3565b905080611bc184612885565b604051602001611bd292919061380d565b604051602081830303815290604052915050919050565b611bf1612122565b73ffffffffffffffffffffffffffffffffffffffff16611c0f611538565b73ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90613b59565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611cb1612122565b73ffffffffffffffffffffffffffffffffffffffff16611ccf611538565b73ffffffffffffffffffffffffffffffffffffffff1614611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c90613b59565b60405180910390fd5b818190508484905014611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490613b39565b60405180910390fd5b60005b82829050811015611e9a57828282818110611d8e57611d8d6140bb565b5b905060200201356009541015611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613919565b60405180910390fd5b611e23858583818110611def57611dee6140bb565b5b9050602002016020810190611e049190613010565b848484818110611e1757611e166140bb565b5b905060200201356125e3565b828282818110611e3657611e356140bb565b5b9050602002013560096000828254611e4e9190613e1f565b92505081905550828282818110611e6857611e676140bb565b5b9050602002013560086000828254611e809190613e1f565b925050819055508080611e9290613fb4565b915050611d70565b5050505050565b600b60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f50612122565b73ffffffffffffffffffffffffffffffffffffffff16611f6e611538565b73ffffffffffffffffffffffffffffffffffffffff1614611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90613b59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b90613979565b60405180910390fd5b61203d8161251d565b50565b600a5481565b600d5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661219d836111c8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121ee826120b6565b61222d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222490613a19565b60405180910390fd5b6000612238836111c8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122a757508373ffffffffffffffffffffffffffffffffffffffff1661228f84610adb565b73ffffffffffffffffffffffffffffffffffffffff16145b806122b857506122b78185611eb4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122e1826111c8565b73ffffffffffffffffffffffffffffffffffffffff1614612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90613b79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e906139d9565b60405180910390fd5b6123b28383836129e6565b6123bd60008261212a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461240d9190613e1f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124649190613d3e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612625576125fa83600a546129eb565b600a600081548092919061260d90613fb4565b9190505550808061261d90613fb4565b9150506125e6565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612690906139f9565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161278a91906138c1565b60405180910390a3505050565b6127a28484846122c1565b6127ae84848484612bb9565b6127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490613959565b60405180910390fd5b50505050565b60606007805461280290613f51565b80601f016020809104026020016040519081016040528092919081815260200182805461282e90613f51565b801561287b5780601f106128505761010080835404028352916020019161287b565b820191906000526020600020905b81548152906001019060200180831161285e57829003601f168201915b5050505050905090565b606060008214156128cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e1565b600082905060005b600082146128ff5780806128e890613fb4565b915050600a826128f89190613d94565b91506128d5565b60008167ffffffffffffffff81111561291b5761291a6140ea565b5b6040519080825280601f01601f19166020018201604052801561294d5781602001600182028036833780820191505090505b5090505b600085146129da576001826129669190613e1f565b9150600a856129759190613ffd565b60306129819190613d3e565b60f81b818381518110612997576129966140bb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129d39190613d94565b9450612951565b8093505050505b919050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5290613ad9565b60405180910390fd5b612a64816120b6565b15612aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9b906139b9565b60405180910390fd5b612ab0600083836129e6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b009190613d3e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612bda8473ffffffffffffffffffffffffffffffffffffffff16612d50565b15612d43578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c03612122565b8786866040518563ffffffff1660e01b8152600401612c25949392919061384c565b602060405180830381600087803b158015612c3f57600080fd5b505af1925050508015612c7057506040513d601f19601f82011682018060405250810190612c6d9190613281565b60015b612cf3573d8060008114612ca0576040519150601f19603f3d011682016040523d82523d6000602084013e612ca5565b606091505b50600081511415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290613959565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d48565b600190505b949350505050565b600080823b905060008111915050919050565b828054612d6f90613f51565b90600052602060002090601f016020900481019282612d915760008555612dd8565b82601f10612daa57805160ff1916838001178555612dd8565b82800160010185558215612dd8579182015b82811115612dd7578251825591602001919060010190612dbc565b5b509050612de59190612de9565b5090565b5b80821115612e02576000816000905550600101612dea565b5090565b6000612e19612e1484613c99565b613c74565b905082815260208101848484011115612e3557612e34614128565b5b612e40848285613f0f565b509392505050565b6000612e5b612e5684613cca565b613c74565b905082815260208101848484011115612e7757612e76614128565b5b612e82848285613f0f565b509392505050565b600081359050612e998161473a565b92915050565b60008083601f840112612eb557612eb461411e565b5b8235905067ffffffffffffffff811115612ed257612ed1614119565b5b602083019150836020820283011115612eee57612eed614123565b5b9250929050565b60008083601f840112612f0b57612f0a61411e565b5b8235905067ffffffffffffffff811115612f2857612f27614119565b5b602083019150836020820283011115612f4457612f43614123565b5b9250929050565b600081359050612f5a81614751565b92915050565b600081359050612f6f81614768565b92915050565b600081519050612f8481614768565b92915050565b600082601f830112612f9f57612f9e61411e565b5b8135612faf848260208601612e06565b91505092915050565b600082601f830112612fcd57612fcc61411e565b5b8135612fdd848260208601612e48565b91505092915050565b600081359050612ff58161477f565b92915050565b60008151905061300a8161477f565b92915050565b60006020828403121561302657613025614132565b5b600061303484828501612e8a565b91505092915050565b6000806040838503121561305457613053614132565b5b600061306285828601612e8a565b925050602061307385828601612e8a565b9150509250929050565b60008060006060848603121561309657613095614132565b5b60006130a486828701612e8a565b93505060206130b586828701612e8a565b92505060406130c686828701612fe6565b9150509250925092565b600080600080608085870312156130ea576130e9614132565b5b60006130f887828801612e8a565b945050602061310987828801612e8a565b935050604061311a87828801612fe6565b925050606085013567ffffffffffffffff81111561313b5761313a61412d565b5b61314787828801612f8a565b91505092959194509250565b6000806040838503121561316a57613169614132565b5b600061317885828601612e8a565b925050602061318985828601612f4b565b9150509250929050565b600080604083850312156131aa576131a9614132565b5b60006131b885828601612e8a565b92505060206131c985828601612fe6565b9150509250929050565b600080600080604085870312156131ed576131ec614132565b5b600085013567ffffffffffffffff81111561320b5761320a61412d565b5b61321787828801612e9f565b9450945050602085013567ffffffffffffffff81111561323a5761323961412d565b5b61324687828801612ef5565b925092505092959194509250565b60006020828403121561326a57613269614132565b5b600061327884828501612f60565b91505092915050565b60006020828403121561329757613296614132565b5b60006132a584828501612f75565b91505092915050565b6000602082840312156132c4576132c3614132565b5b600082013567ffffffffffffffff8111156132e2576132e161412d565b5b6132ee84828501612fb8565b91505092915050565b60006020828403121561330d5761330c614132565b5b600061331b84828501612fe6565b91505092915050565b60006020828403121561333a57613339614132565b5b600061334884828501612ffb565b91505092915050565b6000806040838503121561336857613367614132565b5b600061337685828601612fe6565b925050602061338785828601612fe6565b9150509250929050565b61339a81613e53565b82525050565b6133a981613e65565b82525050565b60006133ba82613cfb565b6133c48185613d11565b93506133d4818560208601613f1e565b6133dd81614137565b840191505092915050565b6133f181613ec7565b82525050565b61340081613ed9565b82525050565b600061341182613d06565b61341b8185613d22565b935061342b818560208601613f1e565b61343481614137565b840191505092915050565b600061344a82613d06565b6134548185613d33565b9350613464818560208601613f1e565b80840191505092915050565b600061347d601083613d22565b915061348882614148565b602082019050919050565b60006134a0601383613d22565b91506134ab82614171565b602082019050919050565b60006134c3603283613d22565b91506134ce8261419a565b604082019050919050565b60006134e6602683613d22565b91506134f1826141e9565b604082019050919050565b6000613509600f83613d22565b915061351482614238565b602082019050919050565b600061352c601c83613d22565b915061353782614261565b602082019050919050565b600061354f602483613d22565b915061355a8261428a565b604082019050919050565b6000613572601983613d22565b915061357d826142d9565b602082019050919050565b6000613595602c83613d22565b91506135a082614302565b604082019050919050565b60006135b8600f83613d22565b91506135c382614351565b602082019050919050565b60006135db603883613d22565b91506135e68261437a565b604082019050919050565b60006135fe600f83613d22565b9150613609826143c9565b602082019050919050565b6000613621602a83613d22565b915061362c826143f2565b604082019050919050565b6000613644602983613d22565b915061364f82614441565b604082019050919050565b6000613667602083613d22565b915061367282614490565b602082019050919050565b600061368a603183613d22565b9150613695826144b9565b604082019050919050565b60006136ad602c83613d22565b91506136b882614508565b604082019050919050565b60006136d0600a83613d22565b91506136db82614557565b602082019050919050565b60006136f3602083613d22565b91506136fe82614580565b602082019050919050565b6000613716602983613d22565b9150613721826145a9565b604082019050919050565b6000613739600a83613d22565b9150613744826145f8565b602082019050919050565b600061375c602183613d22565b915061376782614621565b604082019050919050565b600061377f601083613d22565b915061378a82614670565b602082019050919050565b60006137a2601b83613d22565b91506137ad82614699565b602082019050919050565b60006137c5603183613d22565b91506137d0826146c2565b604082019050919050565b60006137e8601583613d22565b91506137f382614711565b602082019050919050565b61380781613ebd565b82525050565b6000613819828561343f565b9150613825828461343f565b91508190509392505050565b60006020820190506138466000830184613391565b92915050565b60006080820190506138616000830187613391565b61386e6020830186613391565b61387b60408301856137fe565b818103606083015261388d81846133af565b905095945050505050565b60006040820190506138ad6000830185613391565b6138ba60208301846133f7565b9392505050565b60006020820190506138d660008301846133a0565b92915050565b60006020820190506138f160008301846133e8565b92915050565b600060208201905081810360008301526139118184613406565b905092915050565b6000602082019050818103600083015261393281613470565b9050919050565b6000602082019050818103600083015261395281613493565b9050919050565b60006020820190508181036000830152613972816134b6565b9050919050565b60006020820190508181036000830152613992816134d9565b9050919050565b600060208201905081810360008301526139b2816134fc565b9050919050565b600060208201905081810360008301526139d28161351f565b9050919050565b600060208201905081810360008301526139f281613542565b9050919050565b60006020820190508181036000830152613a1281613565565b9050919050565b60006020820190508181036000830152613a3281613588565b9050919050565b60006020820190508181036000830152613a52816135ab565b9050919050565b60006020820190508181036000830152613a72816135ce565b9050919050565b60006020820190508181036000830152613a92816135f1565b9050919050565b60006020820190508181036000830152613ab281613614565b9050919050565b60006020820190508181036000830152613ad281613637565b9050919050565b60006020820190508181036000830152613af28161365a565b9050919050565b60006020820190508181036000830152613b128161367d565b9050919050565b60006020820190508181036000830152613b32816136a0565b9050919050565b60006020820190508181036000830152613b52816136c3565b9050919050565b60006020820190508181036000830152613b72816136e6565b9050919050565b60006020820190508181036000830152613b9281613709565b9050919050565b60006020820190508181036000830152613bb28161372c565b9050919050565b60006020820190508181036000830152613bd28161374f565b9050919050565b60006020820190508181036000830152613bf281613772565b9050919050565b60006020820190508181036000830152613c1281613795565b9050919050565b60006020820190508181036000830152613c32816137b8565b9050919050565b60006020820190508181036000830152613c52816137db565b9050919050565b6000602082019050613c6e60008301846137fe565b92915050565b6000613c7e613c8f565b9050613c8a8282613f83565b919050565b6000604051905090565b600067ffffffffffffffff821115613cb457613cb36140ea565b5b613cbd82614137565b9050602081019050919050565b600067ffffffffffffffff821115613ce557613ce46140ea565b5b613cee82614137565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613d4982613ebd565b9150613d5483613ebd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d8957613d8861402e565b5b828201905092915050565b6000613d9f82613ebd565b9150613daa83613ebd565b925082613dba57613db961405d565b5b828204905092915050565b6000613dd082613ebd565b9150613ddb83613ebd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e1457613e1361402e565b5b828202905092915050565b6000613e2a82613ebd565b9150613e3583613ebd565b925082821015613e4857613e4761402e565b5b828203905092915050565b6000613e5e82613e9d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613ed282613eeb565b9050919050565b6000613ee482613ebd565b9050919050565b6000613ef682613efd565b9050919050565b6000613f0882613e9d565b9050919050565b82818337600083830152505050565b60005b83811015613f3c578082015181840152602081019050613f21565b83811115613f4b576000848401525b50505050565b60006002820490506001821680613f6957607f821691505b60208210811415613f7d57613f7c61408c565b5b50919050565b613f8c82614137565b810181811067ffffffffffffffff82111715613fab57613faa6140ea565b5b80604052505050565b6000613fbf82613ebd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ff257613ff161402e565b5b600182019050919050565b600061400882613ebd565b915061401383613ebd565b9250826140235761402261405d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5265736572766520657863656564656400000000000000000000000000000000600082015250565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e7920746f6b656e730000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f537570706c792065786365656465640000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f426164206c656e67746800000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f53616c6520656e64656400000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79205368617265686f6c64657200000000000000000000000000000000600082015250565b7f4d696e74696e672069732063757272656e746c79207061757365640000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45746865722076616c756520696e636f72726563740000000000000000000000600082015250565b61474381613e53565b811461474e57600080fd5b50565b61475a81613e65565b811461476557600080fd5b50565b61477181613e71565b811461477c57600080fd5b50565b61478881613ebd565b811461479357600080fd5b5056fea264697066735822122053cea5cf50e097a8afe7cb509ebd9a192b44bce3add956b39bfad386c4140a5164736f6c63430008070033

Deployed Bytecode Sourcemap

139:6256:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1490:300:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2408:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3919:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3457:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;520:35:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3664:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3145:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4646:330:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5817:575:2;;;;;;;;;;;;;:::i;:::-;;2893:92;;;;;;;;;;;;;:::i;:::-;;5042:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;414:29:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;783:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3372:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2111:235:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;279:34:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;320:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1849:205:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:10;;;;;;;;;;;;;:::i;:::-;;867:51:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;950:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;562:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2580:86;;;;;;;;;;;;;:::i;:::-;;745:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1029:85:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;827:33:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2570:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1910:126:2;;;;;;;;;;;;;:::i;:::-;;381:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;618:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5039:686;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1687:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4203:153:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2745:79:2;;;;;;;;;;;;;:::i;:::-;;5287:320:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2111:305:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3948:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4495:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;481:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4422:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;450:24:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;675:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1490:300:4;1592:4;1642:25;1627:40;;;:11;:40;;;;:104;;;;1698:33;1683:48;;;:11;:48;;;;1627:104;:156;;;;1747:36;1771:11;1747:23;:36::i;:::-;1627:156;1608:175;;1490:300;;;:::o;2408:98::-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;4022:16;4030:7;4022;:16::i;:::-;4014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4105:15;:24;4121:7;4105:24;;;;;;;;;;;;;;;;;;;;;4098:31;;3919:217;;;:::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;;3586:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3691:5;3675:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3700:37;3717:5;3724:12;:10;:12::i;:::-;3700:16;:37::i;:::-;3675:62;3654:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;520:35:2:-;;;;;;;;;;;;;:::o;3664:212::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3796:20:2::1;3781:11;;:35;;;;;;;:::i;:::-;;;;;;;;3845:23;3827:14;;:41;;;;;;;:::i;:::-;;;;;;;;3664:212:::0;;:::o;3145:142::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3242:6:2::1;3234:5;:14;;;;3270:9;3259:8;:20;;;;3145:142:::0;;:::o;4646:330:4:-;4835:41;4854:12;:10;:12::i;:::-;4868:7;4835:18;:41::i;:::-;4827:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;:::-;4646:330;;;:::o;5817:575:2:-;5879:18;;;;;;;;;;;5865:32;;:10;:32;;;:57;;;;5915:7;:5;:7::i;:::-;5901:21;;:10;:21;;;5865:57;5857:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;5956:15;5974:21;5956:39;;6008:38;6084:3;916:2;6049:7;:32;;;;:::i;:::-;:38;;;;:::i;:::-;6008:79;;6098:32;6174:3;916:2;6144:3;:26;;;;:::i;:::-;6133:7;:38;;;;:::i;:::-;:44;;;;:::i;:::-;6098:79;;6208:1;6198:7;:11;6190:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;6262:7;:5;:7::i;:::-;6254:25;;:51;6280:24;6254:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6324:18;;;;;;;;;;;6316:36;;:68;6353:30;6316:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5846:546;;;5817:575::o;2893:92::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2967:10:2::1;;;;;;;;;;;2966:11;2953:10;;:24;;;;;;;;;;;;;;;;;;2893:92::o:0;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;:::-;5042:179;;;:::o;414:29:2:-;;;;:::o;783:37::-;;;;:::o;3372:207::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3499:20:2::1;3484:11;;:35;;;;;;;:::i;:::-;;;;;;;;3548:23;3530:14;;:41;;;;;;;:::i;:::-;;;;;;;;3372:207:::0;;:::o;2111:235:4:-;2183:7;2202:13;2218:7;:16;2226:7;2218:16;;;;;;;;;;;;;;;;;;;;;2202:32;;2269:1;2252:19;;:5;:19;;;;2244:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2334:5;2327:12;;;2111:235;;;:::o;279:34:2:-;;;;;;;;;;;;;:::o;320:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1849:205:4:-;1921:7;1965:1;1948:19;;:5;:19;;;;1940:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2031:9;:16;2041:5;2031:16;;;;;;;;;;;;;;;;2024:23;;1849:205;;;:::o;1661:101:10:-;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;867:51:2:-;916:2;867:51;:::o;950:34::-;;;;;;;;;;;;;:::o;562:29::-;;;;;;;;;;;;;:::o;2580:86::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2654:4:2::1;2636:15;;:22;;;;;;;;;;;;;;;;;;2580:86::o:0;745:31::-;;;;:::o;1029:85:10:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;827:33:2:-;;;;;;;;;;;;;:::o;2570:102:4:-;2626:13;2658:7;2651:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2570:102;:::o;1910:126:2:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1990:5:2::1;1972:23;;:14;;;;;;;;;;;:23;;;1964:32;;;::::0;::::1;;2024:4;2007:14;;:21;;;;;;;;;;;;;;;;;;1910:126::o:0;381:26::-;;;;:::o;618:33::-;;;;:::o;5039:686::-;5102:10;;;;;;;;;;;5101:11;5093:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;5182:5;5163:24;;:15;;;;;;;;;;;:24;;;5155:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;5244:5;;5236;:13;;;;:::i;:::-;5223:9;:26;5215:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5326:5;5308:14;;5294:11;;:28;;;;:::i;:::-;:37;;5286:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;5369:12;;;;;;;;;;;5364:271;;5483:1;5437:18;;;;;;;;;;;:28;;;5466:10;5478:1;5437:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;5429:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;5364:271;;;5595:8;;5586:5;:17;;5578:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;5364:271;5670:5;5655:11;;:20;;;;;;;:::i;:::-;;;;;;;;5686:31;5699:10;5711:5;5686:12;:31::i;:::-;5039:686;:::o;1687:135::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1783:5:2::1;1765:23;;:14;;;;;;;;;;;:23;;;1757:32;;;::::0;::::1;;1810:4;1800:7;:14;;;;;;;;;;;;:::i;:::-;;1687:135:::0;:::o;4203:153:4:-;4297:52;4316:12;:10;:12::i;:::-;4330:8;4340;4297:18;:52::i;:::-;4203:153;;:::o;2745:79:2:-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2812:4:2::1;2797:12;;:19;;;;;;;;;;;;;;;;;;2745:79::o:0;5287:320:4:-;5456:41;5475:12;:10;:12::i;:::-;5489:7;5456:18;:41::i;:::-;5448:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;:::-;5287:320;;;;:::o;2111:305:2:-;2184:13;2218:16;2226:7;2218;:16::i;:::-;2210:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2309:18;2330:10;:8;:10::i;:::-;2309:31;;2382:4;2388:18;:7;:16;:18::i;:::-;2365:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2351:57;;;2111:305;;;:::o;3948:118::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4053:4:2::1;4023:18;;:35;;;;;;;;;;;;;;;;;;3948:118:::0;:::o;4495:456::-;1252:12:10;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:6:2::1;;:13;;4606:6;;:13;;:30;4598:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4678:9;4673:271;4697:6;;:13;;4693:1;:17;4673:271;;;4758:6;;4765:1;4758:9;;;;;;;:::i;:::-;;;;;;;;4740:14;;:27;;4732:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4817:34;4830:6;;4837:1;4830:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4841:6;;4848:1;4841:9;;;;;;;:::i;:::-;;;;;;;;4817:12;:34::i;:::-;4884:6;;4891:1;4884:9;;;;;;;:::i;:::-;;;;;;;;4866:14;;:27;;;;;;;:::i;:::-;;;;;;;;4923:6;;4930:1;4923:9;;;;;;;:::i;:::-;;;;;;;;4908:11;;:24;;;;;;;:::i;:::-;;;;;;;;4712:3;;;;;:::i;:::-;;;;4673:271;;;;4495:456:::0;;;;:::o;481:32::-;;;;;;;;;;;;;:::o;4422:162:4:-;4519:4;4542:18;:25;4561:5;4542:25;;;;;;;;;;;;;;;:35;4568:8;4542:35;;;;;;;;;;;;;;;;;;;;;;;;;4535:42;;4422:162;;;;:::o;1911:198:10:-;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;450:24:2:-;;;;:::o;675:28::-;;;;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;7079:125:4:-;7144:4;7195:1;7167:30;;:7;:16;7175:7;7167:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7160:37;;7079:125;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;10930:171:4:-;11031:2;11004:15;:24;11020:7;11004:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11086:7;11082:2;11048:46;;11057:23;11072:7;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;7362:344::-;7455:4;7479:16;7487:7;7479;:16::i;:::-;7471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;;7666:32;7683:5;7690:7;7666:16;:32::i;:::-;7611:87;7603:96;;;7362:344;;;;:::o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10495:1;10481:16;;:2;:16;;;;10473:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10709:1;10690:9;:15;10700:4;10690:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10737:1;10720:9;:13;10730:2;10720:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10767:2;10748:7;:16;10756:7;10748:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10804:7;10800:2;10785:27;;10794:4;10785:27;;;;;;;;;;;;10259:560;;;:::o;2263:187:10:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;4224:185:2:-;4298:9;4293:109;4317:5;4313:1;:9;4293:109;;;4344:20;4350:2;4354:9;;4344:5;:20::i;:::-;4379:9;;:11;;;;;;;;;:::i;:::-;;;;;;4324:3;;;;;:::i;:::-;;;;4293:109;;;;4224:185;;:::o;11236:307:4:-;11386:8;11377:17;;:5;:17;;;;11369:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;11472:8;11434:18;:25;11453:5;11434:25;;;;;;;;;;;;;;;:35;11460:8;11434:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;11517:8;11495:41;;11510:5;11495:41;;;11527:8;11495:41;;;;;;:::i;:::-;;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6469:307;;;;:::o;1502:100:2:-;1554:13;1587:7;1580:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1502:100;:::o;328:703:11:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;13430:122:4:-;;;;:::o;8998:372::-;9091:1;9077:16;;:2;:16;;;;9069:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9149:16;9157:7;9149;:16::i;:::-;9148:17;9140:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9282:1;9265:9;:13;9275:2;9265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9312:2;9293:7;:16;9301:7;9293:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9355:7;9351:2;9330:33;;9347:1;9330:33;;;;;;;;;;;;8998:372;;:::o;12096:778::-;12246:4;12266:15;:2;:13;;;:15::i;:::-;12262:606;;;12317:2;12301:36;;;12338:12;:10;:12::i;:::-;12352:4;12358:7;12367:5;12301:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12557:1;12540:6;:13;:18;12536:266;;;12582:60;;;;;;;;;;:::i;:::-;;;;;;;;12536:266;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12433:41;;;12423:51;;;:6;:51;;;;12416:58;;;;;12262:606;12853:4;12846:11;;12096:778;;;;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:12:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:143::-;3516:5;3547:6;3541:13;3532:22;;3563:33;3590:5;3563:33;:::i;:::-;3459:143;;;;:::o;3608:329::-;3667:6;3716:2;3704:9;3695:7;3691:23;3687:32;3684:119;;;3722:79;;:::i;:::-;3684:119;3842:1;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3813:117;3608:329;;;;:::o;3943:474::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4165:117;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3943:474;;;;;:::o;4423:619::-;4500:6;4508;4516;4565:2;4553:9;4544:7;4540:23;4536:32;4533:119;;;4571:79;;:::i;:::-;4533:119;4691:1;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;:::i;:::-;4706:63;;4662:117;4818:2;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4789:118;4946:2;4972:53;5017:7;5008:6;4997:9;4993:22;4972:53;:::i;:::-;4962:63;;4917:118;4423:619;;;;;:::o;5048:943::-;5143:6;5151;5159;5167;5216:3;5204:9;5195:7;5191:23;5187:33;5184:120;;;5223:79;;:::i;:::-;5184:120;5343:1;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5314:117;5470:2;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5441:118;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5754:2;5743:9;5739:18;5726:32;5785:18;5777:6;5774:30;5771:117;;;5807:79;;:::i;:::-;5771:117;5912:62;5966:7;5957:6;5946:9;5942:22;5912:62;:::i;:::-;5902:72;;5697:287;5048:943;;;;;;;:::o;5997:468::-;6062:6;6070;6119:2;6107:9;6098:7;6094:23;6090:32;6087:119;;;6125:79;;:::i;:::-;6087:119;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6372:2;6398:50;6440:7;6431:6;6420:9;6416:22;6398:50;:::i;:::-;6388:60;;6343:115;5997:468;;;;;:::o;6471:474::-;6539:6;6547;6596:2;6584:9;6575:7;6571:23;6567:32;6564:119;;;6602:79;;:::i;:::-;6564:119;6722:1;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6693:117;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6471:474;;;;;:::o;6951:934::-;7073:6;7081;7089;7097;7146:2;7134:9;7125:7;7121:23;7117:32;7114:119;;;7152:79;;:::i;:::-;7114:119;7300:1;7289:9;7285:17;7272:31;7330:18;7322:6;7319:30;7316:117;;;7352:79;;:::i;:::-;7316:117;7465:80;7537:7;7528:6;7517:9;7513:22;7465:80;:::i;:::-;7447:98;;;;7243:312;7622:2;7611:9;7607:18;7594:32;7653:18;7645:6;7642:30;7639:117;;;7675:79;;:::i;:::-;7639:117;7788:80;7860:7;7851:6;7840:9;7836:22;7788:80;:::i;:::-;7770:98;;;;7565:313;6951:934;;;;;;;:::o;7891:327::-;7949:6;7998:2;7986:9;7977:7;7973:23;7969:32;7966:119;;;8004:79;;:::i;:::-;7966:119;8124:1;8149:52;8193:7;8184:6;8173:9;8169:22;8149:52;:::i;:::-;8139:62;;8095:116;7891:327;;;;:::o;8224:349::-;8293:6;8342:2;8330:9;8321:7;8317:23;8313:32;8310:119;;;8348:79;;:::i;:::-;8310:119;8468:1;8493:63;8548:7;8539:6;8528:9;8524:22;8493:63;:::i;:::-;8483:73;;8439:127;8224:349;;;;:::o;8579:509::-;8648:6;8697:2;8685:9;8676:7;8672:23;8668:32;8665:119;;;8703:79;;:::i;:::-;8665:119;8851:1;8840:9;8836:17;8823:31;8881:18;8873:6;8870:30;8867:117;;;8903:79;;:::i;:::-;8867:117;9008:63;9063:7;9054:6;9043:9;9039:22;9008:63;:::i;:::-;8998:73;;8794:287;8579:509;;;;:::o;9094:329::-;9153:6;9202:2;9190:9;9181:7;9177:23;9173:32;9170:119;;;9208:79;;:::i;:::-;9170:119;9328:1;9353:53;9398:7;9389:6;9378:9;9374:22;9353:53;:::i;:::-;9343:63;;9299:117;9094:329;;;;:::o;9429:351::-;9499:6;9548:2;9536:9;9527:7;9523:23;9519:32;9516:119;;;9554:79;;:::i;:::-;9516:119;9674:1;9699:64;9755:7;9746:6;9735:9;9731:22;9699:64;:::i;:::-;9689:74;;9645:128;9429:351;;;;:::o;9786:474::-;9854:6;9862;9911:2;9899:9;9890:7;9886:23;9882:32;9879:119;;;9917:79;;:::i;:::-;9879:119;10037:1;10062:53;10107:7;10098:6;10087:9;10083:22;10062:53;:::i;:::-;10052:63;;10008:117;10164:2;10190:53;10235:7;10226:6;10215:9;10211:22;10190:53;:::i;:::-;10180:63;;10135:118;9786:474;;;;;:::o;10266:118::-;10353:24;10371:5;10353:24;:::i;:::-;10348:3;10341:37;10266:118;;:::o;10390:109::-;10471:21;10486:5;10471:21;:::i;:::-;10466:3;10459:34;10390:109;;:::o;10505:360::-;10591:3;10619:38;10651:5;10619:38;:::i;:::-;10673:70;10736:6;10731:3;10673:70;:::i;:::-;10666:77;;10752:52;10797:6;10792:3;10785:4;10778:5;10774:16;10752:52;:::i;:::-;10829:29;10851:6;10829:29;:::i;:::-;10824:3;10820:39;10813:46;;10595:270;10505:360;;;;:::o;10871:165::-;10975:54;11023:5;10975:54;:::i;:::-;10970:3;10963:67;10871:165;;:::o;11042:147::-;11137:45;11176:5;11137:45;:::i;:::-;11132:3;11125:58;11042:147;;:::o;11195:364::-;11283:3;11311:39;11344:5;11311:39;:::i;:::-;11366:71;11430:6;11425:3;11366:71;:::i;:::-;11359:78;;11446:52;11491:6;11486:3;11479:4;11472:5;11468:16;11446:52;:::i;:::-;11523:29;11545:6;11523:29;:::i;:::-;11518:3;11514:39;11507:46;;11287:272;11195:364;;;;:::o;11565:377::-;11671:3;11699:39;11732:5;11699:39;:::i;:::-;11754:89;11836:6;11831:3;11754:89;:::i;:::-;11747:96;;11852:52;11897:6;11892:3;11885:4;11878:5;11874:16;11852:52;:::i;:::-;11929:6;11924:3;11920:16;11913:23;;11675:267;11565:377;;;;:::o;11948:366::-;12090:3;12111:67;12175:2;12170:3;12111:67;:::i;:::-;12104:74;;12187:93;12276:3;12187:93;:::i;:::-;12305:2;12300:3;12296:12;12289:19;;11948:366;;;:::o;12320:::-;12462:3;12483:67;12547:2;12542:3;12483:67;:::i;:::-;12476:74;;12559:93;12648:3;12559:93;:::i;:::-;12677:2;12672:3;12668:12;12661:19;;12320:366;;;:::o;12692:::-;12834:3;12855:67;12919:2;12914:3;12855:67;:::i;:::-;12848:74;;12931:93;13020:3;12931:93;:::i;:::-;13049:2;13044:3;13040:12;13033:19;;12692:366;;;:::o;13064:::-;13206:3;13227:67;13291:2;13286:3;13227:67;:::i;:::-;13220:74;;13303:93;13392:3;13303:93;:::i;:::-;13421:2;13416:3;13412:12;13405:19;;13064:366;;;:::o;13436:::-;13578:3;13599:67;13663:2;13658:3;13599:67;:::i;:::-;13592:74;;13675:93;13764:3;13675:93;:::i;:::-;13793:2;13788:3;13784:12;13777:19;;13436:366;;;:::o;13808:::-;13950:3;13971:67;14035:2;14030:3;13971:67;:::i;:::-;13964:74;;14047:93;14136:3;14047:93;:::i;:::-;14165:2;14160:3;14156:12;14149:19;;13808:366;;;:::o;14180:::-;14322:3;14343:67;14407:2;14402:3;14343:67;:::i;:::-;14336:74;;14419:93;14508:3;14419:93;:::i;:::-;14537:2;14532:3;14528:12;14521:19;;14180:366;;;:::o;14552:::-;14694:3;14715:67;14779:2;14774:3;14715:67;:::i;:::-;14708:74;;14791:93;14880:3;14791:93;:::i;:::-;14909:2;14904:3;14900:12;14893:19;;14552:366;;;:::o;14924:::-;15066:3;15087:67;15151:2;15146:3;15087:67;:::i;:::-;15080:74;;15163:93;15252:3;15163:93;:::i;:::-;15281:2;15276:3;15272:12;15265:19;;14924:366;;;:::o;15296:::-;15438:3;15459:67;15523:2;15518:3;15459:67;:::i;:::-;15452:74;;15535:93;15624:3;15535:93;:::i;:::-;15653:2;15648:3;15644:12;15637:19;;15296:366;;;:::o;15668:::-;15810:3;15831:67;15895:2;15890:3;15831:67;:::i;:::-;15824:74;;15907:93;15996:3;15907:93;:::i;:::-;16025:2;16020:3;16016:12;16009:19;;15668:366;;;:::o;16040:::-;16182:3;16203:67;16267:2;16262:3;16203:67;:::i;:::-;16196:74;;16279:93;16368:3;16279:93;:::i;:::-;16397:2;16392:3;16388:12;16381:19;;16040:366;;;:::o;16412:::-;16554:3;16575:67;16639:2;16634:3;16575:67;:::i;:::-;16568:74;;16651:93;16740:3;16651:93;:::i;:::-;16769:2;16764:3;16760:12;16753:19;;16412:366;;;:::o;16784:::-;16926:3;16947:67;17011:2;17006:3;16947:67;:::i;:::-;16940:74;;17023:93;17112:3;17023:93;:::i;:::-;17141:2;17136:3;17132:12;17125:19;;16784:366;;;:::o;17156:::-;17298:3;17319:67;17383:2;17378:3;17319:67;:::i;:::-;17312:74;;17395:93;17484:3;17395:93;:::i;:::-;17513:2;17508:3;17504:12;17497:19;;17156:366;;;:::o;17528:::-;17670:3;17691:67;17755:2;17750:3;17691:67;:::i;:::-;17684:74;;17767:93;17856:3;17767:93;:::i;:::-;17885:2;17880:3;17876:12;17869:19;;17528:366;;;:::o;17900:::-;18042:3;18063:67;18127:2;18122:3;18063:67;:::i;:::-;18056:74;;18139:93;18228:3;18139:93;:::i;:::-;18257:2;18252:3;18248:12;18241:19;;17900:366;;;:::o;18272:::-;18414:3;18435:67;18499:2;18494:3;18435:67;:::i;:::-;18428:74;;18511:93;18600:3;18511:93;:::i;:::-;18629:2;18624:3;18620:12;18613:19;;18272:366;;;:::o;18644:::-;18786:3;18807:67;18871:2;18866:3;18807:67;:::i;:::-;18800:74;;18883:93;18972:3;18883:93;:::i;:::-;19001:2;18996:3;18992:12;18985:19;;18644:366;;;:::o;19016:::-;19158:3;19179:67;19243:2;19238:3;19179:67;:::i;:::-;19172:74;;19255:93;19344:3;19255:93;:::i;:::-;19373:2;19368:3;19364:12;19357:19;;19016:366;;;:::o;19388:::-;19530:3;19551:67;19615:2;19610:3;19551:67;:::i;:::-;19544:74;;19627:93;19716:3;19627:93;:::i;:::-;19745:2;19740:3;19736:12;19729:19;;19388:366;;;:::o;19760:::-;19902:3;19923:67;19987:2;19982:3;19923:67;:::i;:::-;19916:74;;19999:93;20088:3;19999:93;:::i;:::-;20117:2;20112:3;20108:12;20101:19;;19760:366;;;:::o;20132:::-;20274:3;20295:67;20359:2;20354:3;20295:67;:::i;:::-;20288:74;;20371:93;20460:3;20371:93;:::i;:::-;20489:2;20484:3;20480:12;20473:19;;20132:366;;;:::o;20504:::-;20646:3;20667:67;20731:2;20726:3;20667:67;:::i;:::-;20660:74;;20743:93;20832:3;20743:93;:::i;:::-;20861:2;20856:3;20852:12;20845:19;;20504:366;;;:::o;20876:::-;21018:3;21039:67;21103:2;21098:3;21039:67;:::i;:::-;21032:74;;21115:93;21204:3;21115:93;:::i;:::-;21233:2;21228:3;21224:12;21217:19;;20876:366;;;:::o;21248:::-;21390:3;21411:67;21475:2;21470:3;21411:67;:::i;:::-;21404:74;;21487:93;21576:3;21487:93;:::i;:::-;21605:2;21600:3;21596:12;21589:19;;21248:366;;;:::o;21620:118::-;21707:24;21725:5;21707:24;:::i;:::-;21702:3;21695:37;21620:118;;:::o;21744:435::-;21924:3;21946:95;22037:3;22028:6;21946:95;:::i;:::-;21939:102;;22058:95;22149:3;22140:6;22058:95;:::i;:::-;22051:102;;22170:3;22163:10;;21744:435;;;;;:::o;22185:222::-;22278:4;22316:2;22305:9;22301:18;22293:26;;22329:71;22397:1;22386:9;22382:17;22373:6;22329:71;:::i;:::-;22185:222;;;;:::o;22413:640::-;22608:4;22646:3;22635:9;22631:19;22623:27;;22660:71;22728:1;22717:9;22713:17;22704:6;22660:71;:::i;:::-;22741:72;22809:2;22798:9;22794:18;22785:6;22741:72;:::i;:::-;22823;22891:2;22880:9;22876:18;22867:6;22823:72;:::i;:::-;22942:9;22936:4;22932:20;22927:2;22916:9;22912:18;22905:48;22970:76;23041:4;23032:6;22970:76;:::i;:::-;22962:84;;22413:640;;;;;;;:::o;23059:348::-;23188:4;23226:2;23215:9;23211:18;23203:26;;23239:71;23307:1;23296:9;23292:17;23283:6;23239:71;:::i;:::-;23320:80;23396:2;23385:9;23381:18;23372:6;23320:80;:::i;:::-;23059:348;;;;;:::o;23413:210::-;23500:4;23538:2;23527:9;23523:18;23515:26;;23551:65;23613:1;23602:9;23598:17;23589:6;23551:65;:::i;:::-;23413:210;;;;:::o;23629:256::-;23739:4;23777:2;23766:9;23762:18;23754:26;;23790:88;23875:1;23864:9;23860:17;23851:6;23790:88;:::i;:::-;23629:256;;;;:::o;23891:313::-;24004:4;24042:2;24031:9;24027:18;24019:26;;24091:9;24085:4;24081:20;24077:1;24066:9;24062:17;24055:47;24119:78;24192:4;24183:6;24119:78;:::i;:::-;24111:86;;23891:313;;;;:::o;24210:419::-;24376:4;24414:2;24403:9;24399:18;24391:26;;24463:9;24457:4;24453:20;24449:1;24438:9;24434:17;24427:47;24491:131;24617:4;24491:131;:::i;:::-;24483:139;;24210:419;;;:::o;24635:::-;24801:4;24839:2;24828:9;24824:18;24816:26;;24888:9;24882:4;24878:20;24874:1;24863:9;24859:17;24852:47;24916:131;25042:4;24916:131;:::i;:::-;24908:139;;24635:419;;;:::o;25060:::-;25226:4;25264:2;25253:9;25249:18;25241:26;;25313:9;25307:4;25303:20;25299:1;25288:9;25284:17;25277:47;25341:131;25467:4;25341:131;:::i;:::-;25333:139;;25060:419;;;:::o;25485:::-;25651:4;25689:2;25678:9;25674:18;25666:26;;25738:9;25732:4;25728:20;25724:1;25713:9;25709:17;25702:47;25766:131;25892:4;25766:131;:::i;:::-;25758:139;;25485:419;;;:::o;25910:::-;26076:4;26114:2;26103:9;26099:18;26091:26;;26163:9;26157:4;26153:20;26149:1;26138:9;26134:17;26127:47;26191:131;26317:4;26191:131;:::i;:::-;26183:139;;25910:419;;;:::o;26335:::-;26501:4;26539:2;26528:9;26524:18;26516:26;;26588:9;26582:4;26578:20;26574:1;26563:9;26559:17;26552:47;26616:131;26742:4;26616:131;:::i;:::-;26608:139;;26335:419;;;:::o;26760:::-;26926:4;26964:2;26953:9;26949:18;26941:26;;27013:9;27007:4;27003:20;26999:1;26988:9;26984:17;26977:47;27041:131;27167:4;27041:131;:::i;:::-;27033:139;;26760:419;;;:::o;27185:::-;27351:4;27389:2;27378:9;27374:18;27366:26;;27438:9;27432:4;27428:20;27424:1;27413:9;27409:17;27402:47;27466:131;27592:4;27466:131;:::i;:::-;27458:139;;27185:419;;;:::o;27610:::-;27776:4;27814:2;27803:9;27799:18;27791:26;;27863:9;27857:4;27853:20;27849:1;27838:9;27834:17;27827:47;27891:131;28017:4;27891:131;:::i;:::-;27883:139;;27610:419;;;:::o;28035:::-;28201:4;28239:2;28228:9;28224:18;28216:26;;28288:9;28282:4;28278:20;28274:1;28263:9;28259:17;28252:47;28316:131;28442:4;28316:131;:::i;:::-;28308:139;;28035:419;;;:::o;28460:::-;28626:4;28664:2;28653:9;28649:18;28641:26;;28713:9;28707:4;28703:20;28699:1;28688:9;28684:17;28677:47;28741:131;28867:4;28741:131;:::i;:::-;28733:139;;28460:419;;;:::o;28885:::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:::-;29901:4;29939:2;29928:9;29924:18;29916:26;;29988:9;29982:4;29978:20;29974:1;29963:9;29959:17;29952:47;30016:131;30142:4;30016:131;:::i;:::-;30008:139;;29735:419;;;:::o;30160:::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:::-;30751:4;30789:2;30778:9;30774:18;30766:26;;30838:9;30832:4;30828:20;30824:1;30813:9;30809:17;30802:47;30866:131;30992:4;30866:131;:::i;:::-;30858:139;;30585:419;;;:::o;31010:::-;31176:4;31214:2;31203:9;31199:18;31191:26;;31263:9;31257:4;31253:20;31249:1;31238:9;31234:17;31227:47;31291:131;31417:4;31291:131;:::i;:::-;31283:139;;31010:419;;;:::o;31435:::-;31601:4;31639:2;31628:9;31624:18;31616:26;;31688:9;31682:4;31678:20;31674:1;31663:9;31659:17;31652:47;31716:131;31842:4;31716:131;:::i;:::-;31708:139;;31435:419;;;:::o;31860:::-;32026:4;32064:2;32053:9;32049:18;32041:26;;32113:9;32107:4;32103:20;32099:1;32088:9;32084:17;32077:47;32141:131;32267:4;32141:131;:::i;:::-;32133:139;;31860:419;;;:::o;32285:::-;32451:4;32489:2;32478:9;32474:18;32466:26;;32538:9;32532:4;32528:20;32524:1;32513:9;32509:17;32502:47;32566:131;32692:4;32566:131;:::i;:::-;32558:139;;32285:419;;;:::o;32710:::-;32876:4;32914:2;32903:9;32899:18;32891:26;;32963:9;32957:4;32953:20;32949:1;32938:9;32934:17;32927:47;32991:131;33117:4;32991:131;:::i;:::-;32983:139;;32710:419;;;:::o;33135:::-;33301:4;33339:2;33328:9;33324:18;33316:26;;33388:9;33382:4;33378:20;33374:1;33363:9;33359:17;33352:47;33416:131;33542:4;33416:131;:::i;:::-;33408:139;;33135:419;;;:::o;33560:::-;33726:4;33764:2;33753:9;33749:18;33741:26;;33813:9;33807:4;33803:20;33799:1;33788:9;33784:17;33777:47;33841:131;33967:4;33841:131;:::i;:::-;33833:139;;33560:419;;;:::o;33985:::-;34151:4;34189:2;34178:9;34174:18;34166:26;;34238:9;34232:4;34228:20;34224:1;34213:9;34209:17;34202:47;34266:131;34392:4;34266:131;:::i;:::-;34258:139;;33985:419;;;:::o;34410:::-;34576:4;34614:2;34603:9;34599:18;34591:26;;34663:9;34657:4;34653:20;34649:1;34638:9;34634:17;34627:47;34691:131;34817:4;34691:131;:::i;:::-;34683:139;;34410:419;;;:::o;34835:::-;35001:4;35039:2;35028:9;35024:18;35016:26;;35088:9;35082:4;35078:20;35074:1;35063:9;35059:17;35052:47;35116:131;35242:4;35116:131;:::i;:::-;35108:139;;34835:419;;;:::o;35260:222::-;35353:4;35391:2;35380:9;35376:18;35368:26;;35404:71;35472:1;35461:9;35457:17;35448:6;35404:71;:::i;:::-;35260:222;;;;:::o;35488:129::-;35522:6;35549:20;;:::i;:::-;35539:30;;35578:33;35606:4;35598:6;35578:33;:::i;:::-;35488:129;;;:::o;35623:75::-;35656:6;35689:2;35683:9;35673:19;;35623:75;:::o;35704:307::-;35765:4;35855:18;35847:6;35844:30;35841:56;;;35877:18;;:::i;:::-;35841:56;35915:29;35937:6;35915:29;:::i;:::-;35907:37;;35999:4;35993;35989:15;35981:23;;35704:307;;;:::o;36017:308::-;36079:4;36169:18;36161:6;36158:30;36155:56;;;36191:18;;:::i;:::-;36155:56;36229:29;36251:6;36229:29;:::i;:::-;36221:37;;36313:4;36307;36303:15;36295:23;;36017:308;;;:::o;36331:98::-;36382:6;36416:5;36410:12;36400:22;;36331:98;;;:::o;36435:99::-;36487:6;36521:5;36515:12;36505:22;;36435:99;;;:::o;36540:168::-;36623:11;36657:6;36652:3;36645:19;36697:4;36692:3;36688:14;36673:29;;36540:168;;;;:::o;36714:169::-;36798:11;36832:6;36827:3;36820:19;36872:4;36867:3;36863:14;36848:29;;36714:169;;;;:::o;36889:148::-;36991:11;37028:3;37013:18;;36889:148;;;;:::o;37043:305::-;37083:3;37102:20;37120:1;37102:20;:::i;:::-;37097:25;;37136:20;37154:1;37136:20;:::i;:::-;37131:25;;37290:1;37222:66;37218:74;37215:1;37212:81;37209:107;;;37296:18;;:::i;:::-;37209:107;37340:1;37337;37333:9;37326:16;;37043:305;;;;:::o;37354:185::-;37394:1;37411:20;37429:1;37411:20;:::i;:::-;37406:25;;37445:20;37463:1;37445:20;:::i;:::-;37440:25;;37484:1;37474:35;;37489:18;;:::i;:::-;37474:35;37531:1;37528;37524:9;37519:14;;37354:185;;;;:::o;37545:348::-;37585:7;37608:20;37626:1;37608:20;:::i;:::-;37603:25;;37642:20;37660:1;37642:20;:::i;:::-;37637:25;;37830:1;37762:66;37758:74;37755:1;37752:81;37747:1;37740:9;37733:17;37729:105;37726:131;;;37837:18;;:::i;:::-;37726:131;37885:1;37882;37878:9;37867:20;;37545:348;;;;:::o;37899:191::-;37939:4;37959:20;37977:1;37959:20;:::i;:::-;37954:25;;37993:20;38011:1;37993:20;:::i;:::-;37988:25;;38032:1;38029;38026:8;38023:34;;;38037:18;;:::i;:::-;38023:34;38082:1;38079;38075:9;38067:17;;37899:191;;;;:::o;38096:96::-;38133:7;38162:24;38180:5;38162:24;:::i;:::-;38151:35;;38096:96;;;:::o;38198:90::-;38232:7;38275:5;38268:13;38261:21;38250:32;;38198:90;;;:::o;38294:149::-;38330:7;38370:66;38363:5;38359:78;38348:89;;38294:149;;;:::o;38449:126::-;38486:7;38526:42;38519:5;38515:54;38504:65;;38449:126;;;:::o;38581:77::-;38618:7;38647:5;38636:16;;38581:77;;;:::o;38664:143::-;38731:9;38764:37;38795:5;38764:37;:::i;:::-;38751:50;;38664:143;;;:::o;38813:121::-;38871:9;38904:24;38922:5;38904:24;:::i;:::-;38891:37;;38813:121;;;:::o;38940:126::-;38990:9;39023:37;39054:5;39023:37;:::i;:::-;39010:50;;38940:126;;;:::o;39072:113::-;39122:9;39155:24;39173:5;39155:24;:::i;:::-;39142:37;;39072:113;;;:::o;39191:154::-;39275:6;39270:3;39265;39252:30;39337:1;39328:6;39323:3;39319:16;39312:27;39191:154;;;:::o;39351:307::-;39419:1;39429:113;39443:6;39440:1;39437:13;39429:113;;;39528:1;39523:3;39519:11;39513:18;39509:1;39504:3;39500:11;39493:39;39465:2;39462:1;39458:10;39453:15;;39429:113;;;39560:6;39557:1;39554:13;39551:101;;;39640:1;39631:6;39626:3;39622:16;39615:27;39551:101;39400:258;39351:307;;;:::o;39664:320::-;39708:6;39745:1;39739:4;39735:12;39725:22;;39792:1;39786:4;39782:12;39813:18;39803:81;;39869:4;39861:6;39857:17;39847:27;;39803:81;39931:2;39923:6;39920:14;39900:18;39897:38;39894:84;;;39950:18;;:::i;:::-;39894:84;39715:269;39664:320;;;:::o;39990:281::-;40073:27;40095:4;40073:27;:::i;:::-;40065:6;40061:40;40203:6;40191:10;40188:22;40167:18;40155:10;40152:34;40149:62;40146:88;;;40214:18;;:::i;:::-;40146:88;40254:10;40250:2;40243:22;40033:238;39990:281;;:::o;40277:233::-;40316:3;40339:24;40357:5;40339:24;:::i;:::-;40330:33;;40385:66;40378:5;40375:77;40372:103;;;40455:18;;:::i;:::-;40372:103;40502:1;40495:5;40491:13;40484:20;;40277:233;;;:::o;40516:176::-;40548:1;40565:20;40583:1;40565:20;:::i;:::-;40560:25;;40599:20;40617:1;40599:20;:::i;:::-;40594:25;;40638:1;40628:35;;40643:18;;:::i;:::-;40628:35;40684:1;40681;40677:9;40672:14;;40516:176;;;;:::o;40698:180::-;40746:77;40743:1;40736:88;40843:4;40840:1;40833:15;40867:4;40864:1;40857:15;40884:180;40932:77;40929:1;40922:88;41029:4;41026:1;41019:15;41053:4;41050:1;41043:15;41070:180;41118:77;41115:1;41108:88;41215:4;41212:1;41205:15;41239:4;41236:1;41229:15;41256:180;41304:77;41301:1;41294:88;41401:4;41398:1;41391:15;41425:4;41422:1;41415:15;41442:180;41490:77;41487:1;41480:88;41587:4;41584:1;41577:15;41611:4;41608:1;41601:15;41628:117;41737:1;41734;41727:12;41751:117;41860:1;41857;41850:12;41874:117;41983:1;41980;41973:12;41997:117;42106:1;42103;42096:12;42120:117;42229:1;42226;42219:12;42243:117;42352:1;42349;42342:12;42366:102;42407:6;42458:2;42454:7;42449:2;42442:5;42438:14;42434:28;42424:38;;42366:102;;;:::o;42474:166::-;42614:18;42610:1;42602:6;42598:14;42591:42;42474:166;:::o;42646:169::-;42786:21;42782:1;42774:6;42770:14;42763:45;42646:169;:::o;42821:237::-;42961:34;42957:1;42949:6;42945:14;42938:58;43030:20;43025:2;43017:6;43013:15;43006:45;42821:237;:::o;43064:225::-;43204:34;43200:1;43192:6;43188:14;43181:58;43273:8;43268:2;43260:6;43256:15;43249:33;43064:225;:::o;43295:165::-;43435:17;43431:1;43423:6;43419:14;43412:41;43295:165;:::o;43466:178::-;43606:30;43602:1;43594:6;43590:14;43583:54;43466:178;:::o;43650:223::-;43790:34;43786:1;43778:6;43774:14;43767:58;43859:6;43854:2;43846:6;43842:15;43835:31;43650:223;:::o;43879:175::-;44019:27;44015:1;44007:6;44003:14;43996:51;43879:175;:::o;44060:231::-;44200:34;44196:1;44188:6;44184:14;44177:58;44269:14;44264:2;44256:6;44252:15;44245:39;44060:231;:::o;44297:165::-;44437:17;44433:1;44425:6;44421:14;44414:41;44297:165;:::o;44468:243::-;44608:34;44604:1;44596:6;44592:14;44585:58;44677:26;44672:2;44664:6;44660:15;44653:51;44468:243;:::o;44717:165::-;44857:17;44853:1;44845:6;44841:14;44834:41;44717:165;:::o;44888:229::-;45028:34;45024:1;45016:6;45012:14;45005:58;45097:12;45092:2;45084:6;45080:15;45073:37;44888:229;:::o;45123:228::-;45263:34;45259:1;45251:6;45247:14;45240:58;45332:11;45327:2;45319:6;45315:15;45308:36;45123:228;:::o;45357:182::-;45497:34;45493:1;45485:6;45481:14;45474:58;45357:182;:::o;45545:236::-;45685:34;45681:1;45673:6;45669:14;45662:58;45754:19;45749:2;45741:6;45737:15;45730:44;45545:236;:::o;45787:231::-;45927:34;45923:1;45915:6;45911:14;45904:58;45996:14;45991:2;45983:6;45979:15;45972:39;45787:231;:::o;46024:160::-;46164:12;46160:1;46152:6;46148:14;46141:36;46024:160;:::o;46190:182::-;46330:34;46326:1;46318:6;46314:14;46307:58;46190:182;:::o;46378:228::-;46518:34;46514:1;46506:6;46502:14;46495:58;46587:11;46582:2;46574:6;46570:15;46563:36;46378:228;:::o;46612:160::-;46752:12;46748:1;46740:6;46736:14;46729:36;46612:160;:::o;46778:220::-;46918:34;46914:1;46906:6;46902:14;46895:58;46987:3;46982:2;46974:6;46970:15;46963:28;46778:220;:::o;47004:166::-;47144:18;47140:1;47132:6;47128:14;47121:42;47004:166;:::o;47176:177::-;47316:29;47312:1;47304:6;47300:14;47293:53;47176:177;:::o;47359:236::-;47499:34;47495:1;47487:6;47483:14;47476:58;47568:19;47563:2;47555:6;47551:15;47544:44;47359:236;:::o;47601:171::-;47741:23;47737:1;47729:6;47725:14;47718:47;47601:171;:::o;47778:122::-;47851:24;47869:5;47851:24;:::i;:::-;47844:5;47841:35;47831:63;;47890:1;47887;47880:12;47831:63;47778:122;:::o;47906:116::-;47976:21;47991:5;47976:21;:::i;:::-;47969:5;47966:32;47956:60;;48012:1;48009;48002:12;47956:60;47906:116;:::o;48028:120::-;48100:23;48117:5;48100:23;:::i;:::-;48093:5;48090:34;48080:62;;48138:1;48135;48128:12;48080:62;48028:120;:::o;48154:122::-;48227:24;48245:5;48227:24;:::i;:::-;48220:5;48217:35;48207:63;;48266:1;48263;48256:12;48207:63;48154:122;:::o

Swarm Source

ipfs://53cea5cf50e097a8afe7cb509ebd9a192b44bce3add956b39bfad386c4140a51
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.