ETH Price: $3,479.26 (+0.88%)
Gas: 5.79 Gwei

Token

FOX FACTION (FF)
 

Overview

Max Total Supply

298 FF

Holders

267

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 FF
0x756e12148473872f0e1a055c33dddb3288b27371
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:
FOX_FACTION

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-31
*/

// SPDX-License-Identifier: GPL-3.0

/*

########  #######  ##     ##    ########    ###     ######  ######## ####  #######  ##    ## 
##       ##     ##  ##   ##     ##         ## ##   ##    ##    ##     ##  ##     ## ###   ## 
##       ##     ##   ## ##      ##        ##   ##  ##          ##     ##  ##     ## ####  ## 
######   ##     ##    ###       ######   ##     ## ##          ##     ##  ##     ## ## ## ## 
##       ##     ##   ## ##      ##       ######### ##          ##     ##  ##     ## ##  #### 
##       ##     ##  ##   ##     ##       ##     ## ##    ##    ##     ##  ##     ## ##   ### 
##        #######  ##     ##    ##       ##     ##  ######     ##    ####  #######  ##    ## 

*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {
    
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

        _;

        _status = _NOT_ENTERED;
    }
}


// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    function toString(uint256 value) internal pure returns (string memory) {

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.8.0;

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: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

    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: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

interface IERC721Receiver {
  
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

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: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

  
    function ownerOf(uint256 tokenId) external view returns (address owner);


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

  
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;


    function approve(address to, uint256 tokenId) external;


    function setApprovalForAll(address operator, bool _approved) external;


    function getApproved(uint256 tokenId) external view returns (address operator);

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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: erc721a/contracts/IERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;



/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}


// File: erc721a/contracts/ERC721A.sol

// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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 override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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


    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

 
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: contracts/foxfaction.sol
// FOX FACTION

pragma solidity >= 0.8.0 < 0.9.0;

contract FOX_FACTION is ERC721A, Ownable, ReentrancyGuard {

  using Strings for uint256;

  string public uriPrefix;
  string public notRevealedURI;
  string public uriSuffix = ".json";
  
  uint256 public cost = 0.003 ether;
  uint256 public maxSupply = 1500;
  uint256 public freeSupply = 250;
  
  uint256 public MaxperTx = 6;
  uint256 public nftPerAddressLimit = 18;
  
  uint256 public MaxperTxFree = 1;
  uint256 public maxFreePerAddress = 1;

  bool public pause = true;
  bool public revealed = true;
  
  mapping(address => uint256) public freeClaimed;
  mapping(address => uint256) public addressMintedBalance;

  constructor() ERC721A ( "FOX FACTION", "FF" ) {
    setUriPrefix( "ipfs://QmVkX7gMnJfEmAsEzmaDS3ueRGfDQrAKPPTCbeYYexjVER/" );
  }

// ~~~~~~~~~~~~~~~~~~~~ URI's ~~~~~~~~~~~~~~~~~~~~

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }

// ~~~~~~~~~~~~~~~~~~~~ Modifiers ~~~~~~~~~~~~~~~~~~~~

  modifier mintCompliance(uint256 _quantity) {
    if (msg.sender != owner()) {
        require(!pause, "FOX FACTION : The contract is paused!");
        require(_quantity <= MaxperTx, "FOX FACTION : Max mint per transaction exceeded!");
        }
    require(_quantity > 0, "FOX FACTION : Mint amount can't be zero.");
    require(tx.origin == msg.sender, "FOX FACTION : The caller is another contract.");
    require(totalSupply() + _quantity <= maxSupply, "FOX FACTION : Beyond Max Supply.");
    _;
  }

// ~~~~~~~~~~~~~~~~~~~~ Mint Functions ~~~~~~~~~~~~~~~~~~~~

  // MINT
    function mint(uint256 _quantity) public payable mintCompliance(_quantity) {
        if (msg.sender != owner()) {
            require(addressMintedBalance[msg.sender] + _quantity <= nftPerAddressLimit, "FOX FACTION : Max amount per address exceeded!");
            require(msg.value >= cost * _quantity, "FOX FACTION : Insufficient funds!");
            }
        addressMintedBalance[msg.sender] += _quantity;
        _safeMint(msg.sender, _quantity);
    }
  
  // FREE MINT
    function mintfree(uint256 _quantity) public payable mintCompliance(_quantity) {
        require(totalSupply() + _quantity <= maxSupply, "FOX FACTION : Mint amount exceeds max supply!");
        require(_quantity <= MaxperTxFree, "FOX FACTION : Max free mint per transaction exceeded!");
        require(freeClaimed[msg.sender] + _quantity <= maxFreePerAddress, "FOX FACTION : Max Free per address exceeded!");

        require(freeSupply > 0, "FOX FACTION : free supply sold out.");
        require(freeSupply - _quantity >= 0, "FOX FACTION : Invalid mint amount!");
        freeSupply -= _quantity;
    
        freeClaimed[msg.sender] += _quantity;
        addressMintedBalance[msg.sender] += _quantity;
        _safeMint(_msgSender(), _quantity);
    }

  // MINT for address
    function mintToAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
        require(totalSupply() + _mintAmount <= maxSupply, "FOX FACTION : Mint amount exceeds max supply!");
        _safeMint(_receiver, _mintAmount);
    }

// ~~~~~~~~~~~~~~~~~~~~ Checks ~~~~~~~~~~~~~~~~~~~~
  // Check Wallet assets
  function walletOfOwner(address _owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = _startTokenId();
    uint256 ownedTokenIndex = 0;
    address latestOwnerAddress;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
      TokenOwnership memory ownership = _ownershipOf(currentTokenId);

      if (!ownership.burned) {
        if (ownership.addr != address(0)) {
          latestOwnerAddress = ownership.addr;
        }

        if (latestOwnerAddress == _owner) {
          ownedTokenIds[ownedTokenIndex] = currentTokenId;
          ownedTokenIndex++;
        }
      }
      currentTokenId++;
    }
    return ownedTokenIds;
  }

  // Start Token
  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

  // TOKEN URI => If you are reading this you are awesome!!
  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token.");
    
    if (revealed == false) { return notRevealedURI; }

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

// ~~~~~~~~~~~~~~~~~~~~ onlyOwner Functions ~~~~~~~~~~~~~~~~~~~~

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }
  
  function setMaxperTx(uint256 _maxMintperTx) public onlyOwner {
    MaxperTx = _maxMintperTx;
  }

  function setMaxFreeperTx(uint256 _maxFreeperTx) public onlyOwner {
    MaxperTxFree = _maxFreeperTx;
  }

  function setMaxPerAddressLimit(uint256 _maxPerAddressLimit) public onlyOwner {
    nftPerAddressLimit = _maxPerAddressLimit;
  }

  function setMaxFreeLimit(uint256 _maxFreePerAddressLimit) public onlyOwner {
    maxFreePerAddress = _maxFreePerAddressLimit;
  }

  // BaseURI
  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  // NotRevealedURI
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedURI = _notRevealedURI;
  }

  function setPause(bool _state) public onlyOwner {
    pause = _state;
  }

  function setReveal(bool _state) public onlyOwner {
    revealed = _state;
  }

  function withdraw() external onlyOwner nonReentrant {
    (bool success, ) = payable(owner()).call{value: address(this).balance}("");
    require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"MaxperTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxperTxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"maxFreePerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mintfree","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","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":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreePerAddressLimit","type":"uint256"}],"name":"setMaxFreeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeperTx","type":"uint256"}],"name":"setMaxFreeperTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddressLimit","type":"uint256"}],"name":"setMaxPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintperTx","type":"uint256"}],"name":"setMaxperTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200037a565b50660aa87bee538000600d556105dc600e5560fa600f5560066010556012601155600160125560016013556001601460006101000a81548160ff0219169083151502179055506001601460016101000a81548160ff021916908315150217905550348015620000bf57600080fd5b506040518060400160405280600b81526020017f464f582046414354494f4e0000000000000000000000000000000000000000008152506040518060400160405280600281526020017f46460000000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001449291906200037a565b5080600390805190602001906200015d9291906200037a565b506200016e620001ce60201b60201c565b6000819055505050620001966200018a620001d760201b60201c565b620001df60201b60201c565b6001600981905550620001c86040518060600160405280603681526020016200536e60369139620002a560201b60201c565b62000512565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002b5620001d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002db6200035060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000334576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032b9062000451565b60405180910390fd5b80600a90805190602001906200034c9291906200037a565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003889062000484565b90600052602060002090601f016020900481019282620003ac5760008555620003f8565b82601f10620003c757805160ff1916838001178555620003f8565b82800160010185558215620003f8579182015b82811115620003f7578251825591602001919060010190620003da565b5b5090506200040791906200040b565b5090565b5b80821115620004265760008160009055506001016200040c565b5090565b60006200043960208362000473565b91506200044682620004e9565b602082019050919050565b600060208201905081810360008301526200046c816200042a565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049d57607f821691505b60208210811415620004b457620004b3620004ba565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614e4c80620005226000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063ba7d2c76116100c1578063d5abeb011161007a578063d5abeb0114610932578063e985e9c51461095d578063f2c4ce1e1461099a578063f2fde38b146109c3578063f4464cf1146109ec578063ff64569114610a1757610272565b8063ba7d2c7614610824578063bedb86fb1461084f578063c13c45d214610878578063c87b56dd146108a3578063cb07a1c7146108e0578063d20604a41461090957610272565b80638456cb59116101135780638456cb59146107355780638da5cb5b1461076057806395d89b411461078b578063a0712d68146107b6578063a22cb465146107d2578063b88d4fde146107fb57610272565b80636352211e1461065057806370a082311461068d578063715018a6146106ca57806372250380146106e15780637ec4a6591461070c57610272565b80632a3f300c116101e8578063512b658d116101ac578063512b658d1461054057806351830227146105695780635503a0e8146105945780635ef9ff37146105bf57806361c0b6a0146105e857806362b99ad41461062557610272565b80632a3f300c146104715780633ccfd60b1461049a57806342842e0e146104b1578063438b6300146104da57806344a0d68a1461051757610272565b806313faede61161023a57806313faede61461036157806316993f641461038c57806318160ddd146103b557806318cae269146103e057806323b872dd1461041d57806324a6ab0c1461044657610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063084dcc691461031c578063095ea7b314610338575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c00565b610a42565b6040516102ab9190614206565b60405180910390f35b3480156102c057600080fd5b506102c9610b24565b6040516102d69190614221565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613ca3565b610bb6565b604051610313919061417d565b60405180910390f35b61033660048036038101906103319190613ca3565b610c32565b005b34801561034457600080fd5b5061035f600480360381019061035a9190613b93565b6110a6565b005b34801561036d57600080fd5b506103766111ab565b6040516103839190614443565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613ca3565b6111b1565b005b3480156103c157600080fd5b506103ca611237565b6040516103d79190614443565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190613a10565b61124e565b6040516104149190614443565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613a7d565b611266565b005b34801561045257600080fd5b5061045b611276565b6040516104689190614443565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613bd3565b61127c565b005b3480156104a657600080fd5b506104af611315565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190613a7d565b611467565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613a10565b611487565b60405161050e91906141e4565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613ca3565b6115e3565b005b34801561054c57600080fd5b5061056760048036038101906105629190613cd0565b611669565b005b34801561057557600080fd5b5061057e61174a565b60405161058b9190614206565b60405180910390f35b3480156105a057600080fd5b506105a961175d565b6040516105b69190614221565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613ca3565b6117eb565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190613a10565b611871565b60405161061c9190614443565b60405180910390f35b34801561063157600080fd5b5061063a611889565b6040516106479190614221565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613ca3565b611917565b604051610684919061417d565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613a10565b61192d565b6040516106c19190614443565b60405180910390f35b3480156106d657600080fd5b506106df6119fd565b005b3480156106ed57600080fd5b506106f6611a85565b6040516107039190614221565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190613c5a565b611b13565b005b34801561074157600080fd5b5061074a611ba9565b6040516107579190614206565b60405180910390f35b34801561076c57600080fd5b50610775611bbc565b604051610782919061417d565b60405180910390f35b34801561079757600080fd5b506107a0611be6565b6040516107ad9190614221565b60405180910390f35b6107d060048036038101906107cb9190613ca3565b611c78565b005b3480156107de57600080fd5b506107f960048036038101906107f49190613b53565b611fcf565b005b34801561080757600080fd5b50610822600480360381019061081d9190613ad0565b612147565b005b34801561083057600080fd5b506108396121bf565b6040516108469190614443565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190613bd3565b6121c5565b005b34801561088457600080fd5b5061088d61225e565b60405161089a9190614443565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613ca3565b612264565b6040516108d79190614221565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613ca3565b6123bd565b005b34801561091557600080fd5b50610930600480360381019061092b9190613ca3565b612443565b005b34801561093e57600080fd5b506109476124c9565b6040516109549190614443565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613a3d565b6124cf565b6040516109919190614206565b60405180910390f35b3480156109a657600080fd5b506109c160048036038101906109bc9190613c5a565b612563565b005b3480156109cf57600080fd5b506109ea60048036038101906109e59190613a10565b6125f9565b005b3480156109f857600080fd5b50610a016126f1565b604051610a0e9190614443565b60405180910390f35b348015610a2357600080fd5b50610a2c6126f7565b604051610a399190614443565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b1d5750610b1c826126fd565b5b9050919050565b606060028054610b339061474c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f9061474c565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b5050505050905090565b6000610bc182612767565b610bf7576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80610c3b611bbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d0357601460009054906101000a900460ff1615610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb4906143c3565b60405180910390fd5b601054811115610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990614303565b60405180910390fd5b5b60008111610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90614243565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90614383565b60405180910390fd5b600e5481610dc0611237565b610dca9190614581565b1115610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e02906142a3565b60405180910390fd5b600e5482610e17611237565b610e219190614581565b1115610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990614403565b60405180910390fd5b601254821115610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90614263565b60405180910390fd5b60135482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef59190614581565b1115610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d906143a3565b60405180910390fd5b6000600f5411610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614283565b60405180910390fd5b600082600f54610f8b9190614662565b1015610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906142c3565b60405180910390fd5b81600f6000828254610fde9190614662565b9250508190555081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110349190614581565b9250508190555081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108a9190614581565b925050819055506110a261109c6127b5565b836127bd565b5050565b60006110b182611917565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611119576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111386127b5565b73ffffffffffffffffffffffffffffffffffffffff161461119b576111648161115f6127b5565b6124cf565b61119a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6111a68383836127db565b505050565b600d5481565b6111b96127b5565b73ffffffffffffffffffffffffffffffffffffffff166111d7611bbc565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614343565b60405180910390fd5b8060138190555050565b600061124161288d565b6001546000540303905090565b60166020528060005260406000206000915090505481565b611271838383612896565b505050565b600f5481565b6112846127b5565b73ffffffffffffffffffffffffffffffffffffffff166112a2611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614343565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b61131d6127b5565b73ffffffffffffffffffffffffffffffffffffffff1661133b611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890614343565b60405180910390fd5b600260095414156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce906143e3565b60405180910390fd5b600260098190555060006113e9611bbc565b73ffffffffffffffffffffffffffffffffffffffff164760405161140c90614168565b60006040518083038185875af1925050503d8060008114611449576040519150601f19603f3d011682016040523d82523d6000602084013e61144e565b606091505b505090508061145c57600080fd5b506001600981905550565b61148283838360405180602001604052806000815250612147565b505050565b606060006114948361192d565b905060008167ffffffffffffffff8111156114b2576114b16148e5565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060006114ed61288d565b90506000805b8482108015611503575060005483105b156115d657600061151384612d4c565b905080604001516115c257600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461155e57806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c157838584815181106115a6576115a56148b6565b5b60200260200101818152505082806115bd906147af565b9350505b5b83806115cd906147af565b945050506114f3565b8395505050505050919050565b6115eb6127b5565b73ffffffffffffffffffffffffffffffffffffffff16611609611bbc565b73ffffffffffffffffffffffffffffffffffffffff161461165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690614343565b60405180910390fd5b80600d8190555050565b6116716127b5565b73ffffffffffffffffffffffffffffffffffffffff1661168f611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90614343565b60405180910390fd5b600e54826116f1611237565b6116fb9190614581565b111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614403565b60405180910390fd5b61174681836127bd565b5050565b601460019054906101000a900460ff1681565b600c805461176a9061474c565b80601f01602080910402602001604051908101604052809291908181526020018280546117969061474c565b80156117e35780601f106117b8576101008083540402835291602001916117e3565b820191906000526020600020905b8154815290600101906020018083116117c657829003601f168201915b505050505081565b6117f36127b5565b73ffffffffffffffffffffffffffffffffffffffff16611811611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e90614343565b60405180910390fd5b8060108190555050565b60156020528060005260406000206000915090505481565b600a80546118969061474c565b80601f01602080910402602001604051908101604052809291908181526020018280546118c29061474c565b801561190f5780601f106118e45761010080835404028352916020019161190f565b820191906000526020600020905b8154815290600101906020018083116118f257829003601f168201915b505050505081565b600061192282612d4c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611995576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611a056127b5565b73ffffffffffffffffffffffffffffffffffffffff16611a23611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7090614343565b60405180910390fd5b611a836000612fd7565b565b600b8054611a929061474c565b80601f0160208091040260200160405190810160405280929190818152602001828054611abe9061474c565b8015611b0b5780601f10611ae057610100808354040283529160200191611b0b565b820191906000526020600020905b815481529060010190602001808311611aee57829003601f168201915b505050505081565b611b1b6127b5565b73ffffffffffffffffffffffffffffffffffffffff16611b39611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690614343565b60405180910390fd5b80600a9080519060200190611ba59291906137e1565b5050565b601460009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611bf59061474c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c219061474c565b8015611c6e5780601f10611c4357610100808354040283529160200191611c6e565b820191906000526020600020905b815481529060010190602001808311611c5157829003601f168201915b5050505050905090565b80611c81611bbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4957601460009054906101000a900460ff1615611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906143c3565b60405180910390fd5b601054811115611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90614303565b60405180910390fd5b5b60008111611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614243565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614383565b60405180910390fd5b600e5481611e06611237565b611e109190614581565b1115611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e48906142a3565b60405180910390fd5b611e59611bbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f6b5760115482601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed99190614581565b1115611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190614363565b60405180910390fd5b81600d54611f289190614608565b341015611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190614323565b60405180910390fd5b5b81601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fba9190614581565b92505081905550611fcb33836127bd565b5050565b611fd76127b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561203c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006120496127b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120f66127b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161213b9190614206565b60405180910390a35050565b612152848484612896565b6121718373ffffffffffffffffffffffffffffffffffffffff1661309d565b156121b957612182848484846130c0565b6121b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60115481565b6121cd6127b5565b73ffffffffffffffffffffffffffffffffffffffff166121eb611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890614343565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60125481565b606061226f82612767565b6122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a590614423565b60405180910390fd5b60001515601460019054906101000a900460ff161515141561235c57600b80546122d79061474c565b80601f01602080910402602001604051908101604052809291908181526020018280546123039061474c565b80156123505780601f1061232557610100808354040283529160200191612350565b820191906000526020600020905b81548152906001019060200180831161233357829003601f168201915b505050505090506123b8565b6000612366613220565b9050600081511161238657604051806020016040528060008152506123b4565b80612390846132b2565b600c6040516020016123a493929190614137565b6040516020818303038152906040525b9150505b919050565b6123c56127b5565b73ffffffffffffffffffffffffffffffffffffffff166123e3611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090614343565b60405180910390fd5b8060118190555050565b61244b6127b5565b73ffffffffffffffffffffffffffffffffffffffff16612469611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b690614343565b60405180910390fd5b8060128190555050565b600e5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61256b6127b5565b73ffffffffffffffffffffffffffffffffffffffff16612589611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690614343565b60405180910390fd5b80600b90805190602001906125f59291906137e1565b5050565b6126016127b5565b73ffffffffffffffffffffffffffffffffffffffff1661261f611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614343565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc906142e3565b60405180910390fd5b6126ee81612fd7565b50565b60135481565b60105481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161277261288d565b11158015612781575060005482105b80156127ae575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b6127d7828260405180602001604052806000815250613413565b5050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006128a182612d4c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461290c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661292d6127b5565b73ffffffffffffffffffffffffffffffffffffffff16148061295c575061295b856129566127b5565b6124cf565b5b806129a1575061296a6127b5565b73ffffffffffffffffffffffffffffffffffffffff1661298984610bb6565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806129da576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a41576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4e85858560016137d5565b612a5a600084876127db565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cda576000548214612cd957878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d4585858560016137db565b5050505050565b612d54613867565b600082905080612d6261288d565b11612fa057600054811015612f9f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612f9d57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e81578092505050612fd2565b5b600115612f9c57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f97578092505050612fd2565b612e82565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130e66127b5565b8786866040518563ffffffff1660e01b81526004016131089493929190614198565b602060405180830381600087803b15801561312257600080fd5b505af192505050801561315357506040513d601f19601f820116820180604052508101906131509190613c2d565b60015b6131cd573d8060008114613183576040519150601f19603f3d011682016040523d82523d6000602084013e613188565b606091505b506000815114156131c5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461322f9061474c565b80601f016020809104026020016040519081016040528092919081815260200182805461325b9061474c565b80156132a85780601f1061327d576101008083540402835291602001916132a8565b820191906000526020600020905b81548152906001019060200180831161328b57829003601f168201915b5050505050905090565b606060008214156132fa576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061340e565b600082905060005b6000821461332c578080613315906147af565b915050600a8261332591906145d7565b9150613302565b60008167ffffffffffffffff811115613348576133476148e5565b5b6040519080825280601f01601f19166020018201604052801561337a5781602001600182028036833780820191505090505b5090505b60008514613407576001826133939190614662565b9150600a856133a291906147f8565b60306133ae9190614581565b60f81b8183815181106133c4576133c36148b6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561340091906145d7565b945061337e565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613480576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156134bb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134c860008583866137d5565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506136898673ffffffffffffffffffffffffffffffffffffffff1661309d565b1561374e575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136fe60008784806001019550876130c0565b613734576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061368f57826000541461374957600080fd5b6137b9565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061374f575b8160008190555050506137cf60008583866137db565b50505050565b50505050565b50505050565b8280546137ed9061474c565b90600052602060002090601f01602090048101928261380f5760008555613856565b82601f1061382857805160ff1916838001178555613856565b82800160010185558215613856579182015b8281111561385557825182559160200191906001019061383a565b5b50905061386391906138aa565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156138c35760008160009055506001016138ab565b5090565b60006138da6138d584614483565b61445e565b9050828152602081018484840111156138f6576138f5614919565b5b61390184828561470a565b509392505050565b600061391c613917846144b4565b61445e565b90508281526020810184848401111561393857613937614919565b5b61394384828561470a565b509392505050565b60008135905061395a81614dba565b92915050565b60008135905061396f81614dd1565b92915050565b60008135905061398481614de8565b92915050565b60008151905061399981614de8565b92915050565b600082601f8301126139b4576139b3614914565b5b81356139c48482602086016138c7565b91505092915050565b600082601f8301126139e2576139e1614914565b5b81356139f2848260208601613909565b91505092915050565b600081359050613a0a81614dff565b92915050565b600060208284031215613a2657613a25614923565b5b6000613a348482850161394b565b91505092915050565b60008060408385031215613a5457613a53614923565b5b6000613a628582860161394b565b9250506020613a738582860161394b565b9150509250929050565b600080600060608486031215613a9657613a95614923565b5b6000613aa48682870161394b565b9350506020613ab58682870161394b565b9250506040613ac6868287016139fb565b9150509250925092565b60008060008060808587031215613aea57613ae9614923565b5b6000613af88782880161394b565b9450506020613b098782880161394b565b9350506040613b1a878288016139fb565b925050606085013567ffffffffffffffff811115613b3b57613b3a61491e565b5b613b478782880161399f565b91505092959194509250565b60008060408385031215613b6a57613b69614923565b5b6000613b788582860161394b565b9250506020613b8985828601613960565b9150509250929050565b60008060408385031215613baa57613ba9614923565b5b6000613bb88582860161394b565b9250506020613bc9858286016139fb565b9150509250929050565b600060208284031215613be957613be8614923565b5b6000613bf784828501613960565b91505092915050565b600060208284031215613c1657613c15614923565b5b6000613c2484828501613975565b91505092915050565b600060208284031215613c4357613c42614923565b5b6000613c518482850161398a565b91505092915050565b600060208284031215613c7057613c6f614923565b5b600082013567ffffffffffffffff811115613c8e57613c8d61491e565b5b613c9a848285016139cd565b91505092915050565b600060208284031215613cb957613cb8614923565b5b6000613cc7848285016139fb565b91505092915050565b60008060408385031215613ce757613ce6614923565b5b6000613cf5858286016139fb565b9250506020613d068582860161394b565b9150509250929050565b6000613d1c8383614119565b60208301905092915050565b613d3181614696565b82525050565b6000613d428261450a565b613d4c8185614538565b9350613d57836144e5565b8060005b83811015613d88578151613d6f8882613d10565b9750613d7a8361452b565b925050600181019050613d5b565b5085935050505092915050565b613d9e816146a8565b82525050565b6000613daf82614515565b613db98185614549565b9350613dc9818560208601614719565b613dd281614928565b840191505092915050565b6000613de882614520565b613df28185614565565b9350613e02818560208601614719565b613e0b81614928565b840191505092915050565b6000613e2182614520565b613e2b8185614576565b9350613e3b818560208601614719565b80840191505092915050565b60008154613e548161474c565b613e5e8186614576565b94506001821660008114613e795760018114613e8a57613ebd565b60ff19831686528186019350613ebd565b613e93856144f5565b60005b83811015613eb557815481890152600182019150602081019050613e96565b838801955050505b50505092915050565b6000613ed3602883614565565b9150613ede82614939565b604082019050919050565b6000613ef6603583614565565b9150613f0182614988565b604082019050919050565b6000613f19602383614565565b9150613f24826149d7565b604082019050919050565b6000613f3c602083614565565b9150613f4782614a26565b602082019050919050565b6000613f5f602283614565565b9150613f6a82614a4f565b604082019050919050565b6000613f82602683614565565b9150613f8d82614a9e565b604082019050919050565b6000613fa5603083614565565b9150613fb082614aed565b604082019050919050565b6000613fc8602183614565565b9150613fd382614b3c565b604082019050919050565b6000613feb602083614565565b9150613ff682614b8b565b602082019050919050565b600061400e602e83614565565b915061401982614bb4565b604082019050919050565b600061403160008361455a565b915061403c82614c03565b600082019050919050565b6000614054602d83614565565b915061405f82614c06565b604082019050919050565b6000614077602c83614565565b915061408282614c55565b604082019050919050565b600061409a602583614565565b91506140a582614ca4565b604082019050919050565b60006140bd601f83614565565b91506140c882614cf3565b602082019050919050565b60006140e0602d83614565565b91506140eb82614d1c565b604082019050919050565b6000614103603083614565565b915061410e82614d6b565b604082019050919050565b61412281614700565b82525050565b61413181614700565b82525050565b60006141438286613e16565b915061414f8285613e16565b915061415b8284613e47565b9150819050949350505050565b600061417382614024565b9150819050919050565b60006020820190506141926000830184613d28565b92915050565b60006080820190506141ad6000830187613d28565b6141ba6020830186613d28565b6141c76040830185614128565b81810360608301526141d98184613da4565b905095945050505050565b600060208201905081810360008301526141fe8184613d37565b905092915050565b600060208201905061421b6000830184613d95565b92915050565b6000602082019050818103600083015261423b8184613ddd565b905092915050565b6000602082019050818103600083015261425c81613ec6565b9050919050565b6000602082019050818103600083015261427c81613ee9565b9050919050565b6000602082019050818103600083015261429c81613f0c565b9050919050565b600060208201905081810360008301526142bc81613f2f565b9050919050565b600060208201905081810360008301526142dc81613f52565b9050919050565b600060208201905081810360008301526142fc81613f75565b9050919050565b6000602082019050818103600083015261431c81613f98565b9050919050565b6000602082019050818103600083015261433c81613fbb565b9050919050565b6000602082019050818103600083015261435c81613fde565b9050919050565b6000602082019050818103600083015261437c81614001565b9050919050565b6000602082019050818103600083015261439c81614047565b9050919050565b600060208201905081810360008301526143bc8161406a565b9050919050565b600060208201905081810360008301526143dc8161408d565b9050919050565b600060208201905081810360008301526143fc816140b0565b9050919050565b6000602082019050818103600083015261441c816140d3565b9050919050565b6000602082019050818103600083015261443c816140f6565b9050919050565b60006020820190506144586000830184614128565b92915050565b6000614468614479565b9050614474828261477e565b919050565b6000604051905090565b600067ffffffffffffffff82111561449e5761449d6148e5565b5b6144a782614928565b9050602081019050919050565b600067ffffffffffffffff8211156144cf576144ce6148e5565b5b6144d882614928565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061458c82614700565b915061459783614700565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145cc576145cb614829565b5b828201905092915050565b60006145e282614700565b91506145ed83614700565b9250826145fd576145fc614858565b5b828204905092915050565b600061461382614700565b915061461e83614700565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614656614829565b5b828202905092915050565b600061466d82614700565b915061467883614700565b92508282101561468b5761468a614829565b5b828203905092915050565b60006146a1826146e0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561473757808201518184015260208101905061471c565b83811115614746576000848401525b50505050565b6000600282049050600182168061476457607f821691505b6020821081141561477857614777614887565b5b50919050565b61478782614928565b810181811067ffffffffffffffff821117156147a6576147a56148e5565b5b80604052505050565b60006147ba82614700565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147ed576147ec614829565b5b600182019050919050565b600061480382614700565b915061480e83614700565b92508261481e5761481d614858565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f464f582046414354494f4e203a204d696e7420616d6f756e742063616e27742060008201527f6265207a65726f2e000000000000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204d61782066726565206d696e74207065722060008201527f7472616e73616374696f6e206578636565646564210000000000000000000000602082015250565b7f464f582046414354494f4e203a206672656520737570706c7920736f6c64206f60008201527f75742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204265796f6e64204d617820537570706c792e600082015250565b7f464f582046414354494f4e203a20496e76616c6964206d696e7420616d6f756e60008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204d6178206d696e7420706572207472616e7360008201527f616374696f6e2065786365656465642100000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a20496e73756666696369656e742066756e647360008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f464f582046414354494f4e203a204d617820616d6f756e74207065722061646460008201527f7265737320657863656564656421000000000000000000000000000000000000602082015250565b50565b7f464f582046414354494f4e203a205468652063616c6c657220697320616e6f7460008201527f68657220636f6e74726163742e00000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204d617820467265652070657220616464726560008201527f7373206578636565646564210000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a2054686520636f6e747261637420697320706160008201527f7573656421000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f464f582046414354494f4e203a204d696e7420616d6f756e742065786365656460008201527f73206d617820737570706c792100000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b614dc381614696565b8114614dce57600080fd5b50565b614dda816146a8565b8114614de557600080fd5b50565b614df1816146b4565b8114614dfc57600080fd5b50565b614e0881614700565b8114614e1357600080fd5b5056fea26469706673582212207ea678f386ae537489d12b927d9aeb446c0801914f03f15410904f1d820b1a6a64736f6c63430008070033697066733a2f2f516d566b5837674d6e4a66456d4173457a6d614453337565524766445172414b505054436265595965786a5645522f

Deployed Bytecode

0x6080604052600436106102725760003560e01c80636352211e1161014f578063ba7d2c76116100c1578063d5abeb011161007a578063d5abeb0114610932578063e985e9c51461095d578063f2c4ce1e1461099a578063f2fde38b146109c3578063f4464cf1146109ec578063ff64569114610a1757610272565b8063ba7d2c7614610824578063bedb86fb1461084f578063c13c45d214610878578063c87b56dd146108a3578063cb07a1c7146108e0578063d20604a41461090957610272565b80638456cb59116101135780638456cb59146107355780638da5cb5b1461076057806395d89b411461078b578063a0712d68146107b6578063a22cb465146107d2578063b88d4fde146107fb57610272565b80636352211e1461065057806370a082311461068d578063715018a6146106ca57806372250380146106e15780637ec4a6591461070c57610272565b80632a3f300c116101e8578063512b658d116101ac578063512b658d1461054057806351830227146105695780635503a0e8146105945780635ef9ff37146105bf57806361c0b6a0146105e857806362b99ad41461062557610272565b80632a3f300c146104715780633ccfd60b1461049a57806342842e0e146104b1578063438b6300146104da57806344a0d68a1461051757610272565b806313faede61161023a57806313faede61461036157806316993f641461038c57806318160ddd146103b557806318cae269146103e057806323b872dd1461041d57806324a6ab0c1461044657610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063084dcc691461031c578063095ea7b314610338575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c00565b610a42565b6040516102ab9190614206565b60405180910390f35b3480156102c057600080fd5b506102c9610b24565b6040516102d69190614221565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613ca3565b610bb6565b604051610313919061417d565b60405180910390f35b61033660048036038101906103319190613ca3565b610c32565b005b34801561034457600080fd5b5061035f600480360381019061035a9190613b93565b6110a6565b005b34801561036d57600080fd5b506103766111ab565b6040516103839190614443565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613ca3565b6111b1565b005b3480156103c157600080fd5b506103ca611237565b6040516103d79190614443565b60405180910390f35b3480156103ec57600080fd5b5061040760048036038101906104029190613a10565b61124e565b6040516104149190614443565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613a7d565b611266565b005b34801561045257600080fd5b5061045b611276565b6040516104689190614443565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613bd3565b61127c565b005b3480156104a657600080fd5b506104af611315565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190613a7d565b611467565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613a10565b611487565b60405161050e91906141e4565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613ca3565b6115e3565b005b34801561054c57600080fd5b5061056760048036038101906105629190613cd0565b611669565b005b34801561057557600080fd5b5061057e61174a565b60405161058b9190614206565b60405180910390f35b3480156105a057600080fd5b506105a961175d565b6040516105b69190614221565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613ca3565b6117eb565b005b3480156105f457600080fd5b5061060f600480360381019061060a9190613a10565b611871565b60405161061c9190614443565b60405180910390f35b34801561063157600080fd5b5061063a611889565b6040516106479190614221565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190613ca3565b611917565b604051610684919061417d565b60405180910390f35b34801561069957600080fd5b506106b460048036038101906106af9190613a10565b61192d565b6040516106c19190614443565b60405180910390f35b3480156106d657600080fd5b506106df6119fd565b005b3480156106ed57600080fd5b506106f6611a85565b6040516107039190614221565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190613c5a565b611b13565b005b34801561074157600080fd5b5061074a611ba9565b6040516107579190614206565b60405180910390f35b34801561076c57600080fd5b50610775611bbc565b604051610782919061417d565b60405180910390f35b34801561079757600080fd5b506107a0611be6565b6040516107ad9190614221565b60405180910390f35b6107d060048036038101906107cb9190613ca3565b611c78565b005b3480156107de57600080fd5b506107f960048036038101906107f49190613b53565b611fcf565b005b34801561080757600080fd5b50610822600480360381019061081d9190613ad0565b612147565b005b34801561083057600080fd5b506108396121bf565b6040516108469190614443565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190613bd3565b6121c5565b005b34801561088457600080fd5b5061088d61225e565b60405161089a9190614443565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190613ca3565b612264565b6040516108d79190614221565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190613ca3565b6123bd565b005b34801561091557600080fd5b50610930600480360381019061092b9190613ca3565b612443565b005b34801561093e57600080fd5b506109476124c9565b6040516109549190614443565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613a3d565b6124cf565b6040516109919190614206565b60405180910390f35b3480156109a657600080fd5b506109c160048036038101906109bc9190613c5a565b612563565b005b3480156109cf57600080fd5b506109ea60048036038101906109e59190613a10565b6125f9565b005b3480156109f857600080fd5b50610a016126f1565b604051610a0e9190614443565b60405180910390f35b348015610a2357600080fd5b50610a2c6126f7565b604051610a399190614443565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b1d5750610b1c826126fd565b5b9050919050565b606060028054610b339061474c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f9061474c565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b5050505050905090565b6000610bc182612767565b610bf7576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80610c3b611bbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d0357601460009054906101000a900460ff1615610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb4906143c3565b60405180910390fd5b601054811115610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990614303565b60405180910390fd5b5b60008111610d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3d90614243565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dab90614383565b60405180910390fd5b600e5481610dc0611237565b610dca9190614581565b1115610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e02906142a3565b60405180910390fd5b600e5482610e17611237565b610e219190614581565b1115610e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5990614403565b60405180910390fd5b601254821115610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e90614263565b60405180910390fd5b60135482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef59190614581565b1115610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d906143a3565b60405180910390fd5b6000600f5411610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614283565b60405180910390fd5b600082600f54610f8b9190614662565b1015610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906142c3565b60405180910390fd5b81600f6000828254610fde9190614662565b9250508190555081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110349190614581565b9250508190555081601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461108a9190614581565b925050819055506110a261109c6127b5565b836127bd565b5050565b60006110b182611917565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611119576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111386127b5565b73ffffffffffffffffffffffffffffffffffffffff161461119b576111648161115f6127b5565b6124cf565b61119a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6111a68383836127db565b505050565b600d5481565b6111b96127b5565b73ffffffffffffffffffffffffffffffffffffffff166111d7611bbc565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614343565b60405180910390fd5b8060138190555050565b600061124161288d565b6001546000540303905090565b60166020528060005260406000206000915090505481565b611271838383612896565b505050565b600f5481565b6112846127b5565b73ffffffffffffffffffffffffffffffffffffffff166112a2611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614343565b60405180910390fd5b80601460016101000a81548160ff02191690831515021790555050565b61131d6127b5565b73ffffffffffffffffffffffffffffffffffffffff1661133b611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890614343565b60405180910390fd5b600260095414156113d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ce906143e3565b60405180910390fd5b600260098190555060006113e9611bbc565b73ffffffffffffffffffffffffffffffffffffffff164760405161140c90614168565b60006040518083038185875af1925050503d8060008114611449576040519150601f19603f3d011682016040523d82523d6000602084013e61144e565b606091505b505090508061145c57600080fd5b506001600981905550565b61148283838360405180602001604052806000815250612147565b505050565b606060006114948361192d565b905060008167ffffffffffffffff8111156114b2576114b16148e5565b5b6040519080825280602002602001820160405280156114e05781602001602082028036833780820191505090505b50905060006114ed61288d565b90506000805b8482108015611503575060005483105b156115d657600061151384612d4c565b905080604001516115c257600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461155e57806000015191505b8773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c157838584815181106115a6576115a56148b6565b5b60200260200101818152505082806115bd906147af565b9350505b5b83806115cd906147af565b945050506114f3565b8395505050505050919050565b6115eb6127b5565b73ffffffffffffffffffffffffffffffffffffffff16611609611bbc565b73ffffffffffffffffffffffffffffffffffffffff161461165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690614343565b60405180910390fd5b80600d8190555050565b6116716127b5565b73ffffffffffffffffffffffffffffffffffffffff1661168f611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90614343565b60405180910390fd5b600e54826116f1611237565b6116fb9190614581565b111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614403565b60405180910390fd5b61174681836127bd565b5050565b601460019054906101000a900460ff1681565b600c805461176a9061474c565b80601f01602080910402602001604051908101604052809291908181526020018280546117969061474c565b80156117e35780601f106117b8576101008083540402835291602001916117e3565b820191906000526020600020905b8154815290600101906020018083116117c657829003601f168201915b505050505081565b6117f36127b5565b73ffffffffffffffffffffffffffffffffffffffff16611811611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e90614343565b60405180910390fd5b8060108190555050565b60156020528060005260406000206000915090505481565b600a80546118969061474c565b80601f01602080910402602001604051908101604052809291908181526020018280546118c29061474c565b801561190f5780601f106118e45761010080835404028352916020019161190f565b820191906000526020600020905b8154815290600101906020018083116118f257829003601f168201915b505050505081565b600061192282612d4c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611995576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611a056127b5565b73ffffffffffffffffffffffffffffffffffffffff16611a23611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7090614343565b60405180910390fd5b611a836000612fd7565b565b600b8054611a929061474c565b80601f0160208091040260200160405190810160405280929190818152602001828054611abe9061474c565b8015611b0b5780601f10611ae057610100808354040283529160200191611b0b565b820191906000526020600020905b815481529060010190602001808311611aee57829003601f168201915b505050505081565b611b1b6127b5565b73ffffffffffffffffffffffffffffffffffffffff16611b39611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690614343565b60405180910390fd5b80600a9080519060200190611ba59291906137e1565b5050565b601460009054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611bf59061474c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c219061474c565b8015611c6e5780601f10611c4357610100808354040283529160200191611c6e565b820191906000526020600020905b815481529060010190602001808311611c5157829003601f168201915b5050505050905090565b80611c81611bbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4957601460009054906101000a900460ff1615611d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906143c3565b60405180910390fd5b601054811115611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90614303565b60405180910390fd5b5b60008111611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8390614243565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614383565b60405180910390fd5b600e5481611e06611237565b611e109190614581565b1115611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e48906142a3565b60405180910390fd5b611e59611bbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f6b5760115482601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed99190614581565b1115611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190614363565b60405180910390fd5b81600d54611f289190614608565b341015611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190614323565b60405180910390fd5b5b81601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fba9190614581565b92505081905550611fcb33836127bd565b5050565b611fd76127b5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561203c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006120496127b5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120f66127b5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161213b9190614206565b60405180910390a35050565b612152848484612896565b6121718373ffffffffffffffffffffffffffffffffffffffff1661309d565b156121b957612182848484846130c0565b6121b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60115481565b6121cd6127b5565b73ffffffffffffffffffffffffffffffffffffffff166121eb611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890614343565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60125481565b606061226f82612767565b6122ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a590614423565b60405180910390fd5b60001515601460019054906101000a900460ff161515141561235c57600b80546122d79061474c565b80601f01602080910402602001604051908101604052809291908181526020018280546123039061474c565b80156123505780601f1061232557610100808354040283529160200191612350565b820191906000526020600020905b81548152906001019060200180831161233357829003601f168201915b505050505090506123b8565b6000612366613220565b9050600081511161238657604051806020016040528060008152506123b4565b80612390846132b2565b600c6040516020016123a493929190614137565b6040516020818303038152906040525b9150505b919050565b6123c56127b5565b73ffffffffffffffffffffffffffffffffffffffff166123e3611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243090614343565b60405180910390fd5b8060118190555050565b61244b6127b5565b73ffffffffffffffffffffffffffffffffffffffff16612469611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b690614343565b60405180910390fd5b8060128190555050565b600e5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61256b6127b5565b73ffffffffffffffffffffffffffffffffffffffff16612589611bbc565b73ffffffffffffffffffffffffffffffffffffffff16146125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690614343565b60405180910390fd5b80600b90805190602001906125f59291906137e1565b5050565b6126016127b5565b73ffffffffffffffffffffffffffffffffffffffff1661261f611bbc565b73ffffffffffffffffffffffffffffffffffffffff1614612675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266c90614343565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc906142e3565b60405180910390fd5b6126ee81612fd7565b50565b60135481565b60105481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161277261288d565b11158015612781575060005482105b80156127ae575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b6127d7828260405180602001604052806000815250613413565b5050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b60006128a182612d4c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461290c576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661292d6127b5565b73ffffffffffffffffffffffffffffffffffffffff16148061295c575061295b856129566127b5565b6124cf565b5b806129a1575061296a6127b5565b73ffffffffffffffffffffffffffffffffffffffff1661298984610bb6565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806129da576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a41576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a4e85858560016137d5565b612a5a600084876127db565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612cda576000548214612cd957878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d4585858560016137db565b5050505050565b612d54613867565b600082905080612d6261288d565b11612fa057600054811015612f9f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612f9d57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e81578092505050612fd2565b5b600115612f9c57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f97578092505050612fd2565b612e82565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130e66127b5565b8786866040518563ffffffff1660e01b81526004016131089493929190614198565b602060405180830381600087803b15801561312257600080fd5b505af192505050801561315357506040513d601f19601f820116820180604052508101906131509190613c2d565b60015b6131cd573d8060008114613183576040519150601f19603f3d011682016040523d82523d6000602084013e613188565b606091505b506000815114156131c5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461322f9061474c565b80601f016020809104026020016040519081016040528092919081815260200182805461325b9061474c565b80156132a85780601f1061327d576101008083540402835291602001916132a8565b820191906000526020600020905b81548152906001019060200180831161328b57829003601f168201915b5050505050905090565b606060008214156132fa576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061340e565b600082905060005b6000821461332c578080613315906147af565b915050600a8261332591906145d7565b9150613302565b60008167ffffffffffffffff811115613348576133476148e5565b5b6040519080825280601f01601f19166020018201604052801561337a5781602001600182028036833780820191505090505b5090505b60008514613407576001826133939190614662565b9150600a856133a291906147f8565b60306133ae9190614581565b60f81b8183815181106133c4576133c36148b6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561340091906145d7565b945061337e565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613480576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156134bb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134c860008583866137d5565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506136898673ffffffffffffffffffffffffffffffffffffffff1661309d565b1561374e575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136fe60008784806001019550876130c0565b613734576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061368f57826000541461374957600080fd5b6137b9565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061374f575b8160008190555050506137cf60008583866137db565b50505050565b50505050565b50505050565b8280546137ed9061474c565b90600052602060002090601f01602090048101928261380f5760008555613856565b82601f1061382857805160ff1916838001178555613856565b82800160010185558215613856579182015b8281111561385557825182559160200191906001019061383a565b5b50905061386391906138aa565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156138c35760008160009055506001016138ab565b5090565b60006138da6138d584614483565b61445e565b9050828152602081018484840111156138f6576138f5614919565b5b61390184828561470a565b509392505050565b600061391c613917846144b4565b61445e565b90508281526020810184848401111561393857613937614919565b5b61394384828561470a565b509392505050565b60008135905061395a81614dba565b92915050565b60008135905061396f81614dd1565b92915050565b60008135905061398481614de8565b92915050565b60008151905061399981614de8565b92915050565b600082601f8301126139b4576139b3614914565b5b81356139c48482602086016138c7565b91505092915050565b600082601f8301126139e2576139e1614914565b5b81356139f2848260208601613909565b91505092915050565b600081359050613a0a81614dff565b92915050565b600060208284031215613a2657613a25614923565b5b6000613a348482850161394b565b91505092915050565b60008060408385031215613a5457613a53614923565b5b6000613a628582860161394b565b9250506020613a738582860161394b565b9150509250929050565b600080600060608486031215613a9657613a95614923565b5b6000613aa48682870161394b565b9350506020613ab58682870161394b565b9250506040613ac6868287016139fb565b9150509250925092565b60008060008060808587031215613aea57613ae9614923565b5b6000613af88782880161394b565b9450506020613b098782880161394b565b9350506040613b1a878288016139fb565b925050606085013567ffffffffffffffff811115613b3b57613b3a61491e565b5b613b478782880161399f565b91505092959194509250565b60008060408385031215613b6a57613b69614923565b5b6000613b788582860161394b565b9250506020613b8985828601613960565b9150509250929050565b60008060408385031215613baa57613ba9614923565b5b6000613bb88582860161394b565b9250506020613bc9858286016139fb565b9150509250929050565b600060208284031215613be957613be8614923565b5b6000613bf784828501613960565b91505092915050565b600060208284031215613c1657613c15614923565b5b6000613c2484828501613975565b91505092915050565b600060208284031215613c4357613c42614923565b5b6000613c518482850161398a565b91505092915050565b600060208284031215613c7057613c6f614923565b5b600082013567ffffffffffffffff811115613c8e57613c8d61491e565b5b613c9a848285016139cd565b91505092915050565b600060208284031215613cb957613cb8614923565b5b6000613cc7848285016139fb565b91505092915050565b60008060408385031215613ce757613ce6614923565b5b6000613cf5858286016139fb565b9250506020613d068582860161394b565b9150509250929050565b6000613d1c8383614119565b60208301905092915050565b613d3181614696565b82525050565b6000613d428261450a565b613d4c8185614538565b9350613d57836144e5565b8060005b83811015613d88578151613d6f8882613d10565b9750613d7a8361452b565b925050600181019050613d5b565b5085935050505092915050565b613d9e816146a8565b82525050565b6000613daf82614515565b613db98185614549565b9350613dc9818560208601614719565b613dd281614928565b840191505092915050565b6000613de882614520565b613df28185614565565b9350613e02818560208601614719565b613e0b81614928565b840191505092915050565b6000613e2182614520565b613e2b8185614576565b9350613e3b818560208601614719565b80840191505092915050565b60008154613e548161474c565b613e5e8186614576565b94506001821660008114613e795760018114613e8a57613ebd565b60ff19831686528186019350613ebd565b613e93856144f5565b60005b83811015613eb557815481890152600182019150602081019050613e96565b838801955050505b50505092915050565b6000613ed3602883614565565b9150613ede82614939565b604082019050919050565b6000613ef6603583614565565b9150613f0182614988565b604082019050919050565b6000613f19602383614565565b9150613f24826149d7565b604082019050919050565b6000613f3c602083614565565b9150613f4782614a26565b602082019050919050565b6000613f5f602283614565565b9150613f6a82614a4f565b604082019050919050565b6000613f82602683614565565b9150613f8d82614a9e565b604082019050919050565b6000613fa5603083614565565b9150613fb082614aed565b604082019050919050565b6000613fc8602183614565565b9150613fd382614b3c565b604082019050919050565b6000613feb602083614565565b9150613ff682614b8b565b602082019050919050565b600061400e602e83614565565b915061401982614bb4565b604082019050919050565b600061403160008361455a565b915061403c82614c03565b600082019050919050565b6000614054602d83614565565b915061405f82614c06565b604082019050919050565b6000614077602c83614565565b915061408282614c55565b604082019050919050565b600061409a602583614565565b91506140a582614ca4565b604082019050919050565b60006140bd601f83614565565b91506140c882614cf3565b602082019050919050565b60006140e0602d83614565565b91506140eb82614d1c565b604082019050919050565b6000614103603083614565565b915061410e82614d6b565b604082019050919050565b61412281614700565b82525050565b61413181614700565b82525050565b60006141438286613e16565b915061414f8285613e16565b915061415b8284613e47565b9150819050949350505050565b600061417382614024565b9150819050919050565b60006020820190506141926000830184613d28565b92915050565b60006080820190506141ad6000830187613d28565b6141ba6020830186613d28565b6141c76040830185614128565b81810360608301526141d98184613da4565b905095945050505050565b600060208201905081810360008301526141fe8184613d37565b905092915050565b600060208201905061421b6000830184613d95565b92915050565b6000602082019050818103600083015261423b8184613ddd565b905092915050565b6000602082019050818103600083015261425c81613ec6565b9050919050565b6000602082019050818103600083015261427c81613ee9565b9050919050565b6000602082019050818103600083015261429c81613f0c565b9050919050565b600060208201905081810360008301526142bc81613f2f565b9050919050565b600060208201905081810360008301526142dc81613f52565b9050919050565b600060208201905081810360008301526142fc81613f75565b9050919050565b6000602082019050818103600083015261431c81613f98565b9050919050565b6000602082019050818103600083015261433c81613fbb565b9050919050565b6000602082019050818103600083015261435c81613fde565b9050919050565b6000602082019050818103600083015261437c81614001565b9050919050565b6000602082019050818103600083015261439c81614047565b9050919050565b600060208201905081810360008301526143bc8161406a565b9050919050565b600060208201905081810360008301526143dc8161408d565b9050919050565b600060208201905081810360008301526143fc816140b0565b9050919050565b6000602082019050818103600083015261441c816140d3565b9050919050565b6000602082019050818103600083015261443c816140f6565b9050919050565b60006020820190506144586000830184614128565b92915050565b6000614468614479565b9050614474828261477e565b919050565b6000604051905090565b600067ffffffffffffffff82111561449e5761449d6148e5565b5b6144a782614928565b9050602081019050919050565b600067ffffffffffffffff8211156144cf576144ce6148e5565b5b6144d882614928565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061458c82614700565b915061459783614700565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145cc576145cb614829565b5b828201905092915050565b60006145e282614700565b91506145ed83614700565b9250826145fd576145fc614858565b5b828204905092915050565b600061461382614700565b915061461e83614700565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614656614829565b5b828202905092915050565b600061466d82614700565b915061467883614700565b92508282101561468b5761468a614829565b5b828203905092915050565b60006146a1826146e0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561473757808201518184015260208101905061471c565b83811115614746576000848401525b50505050565b6000600282049050600182168061476457607f821691505b6020821081141561477857614777614887565b5b50919050565b61478782614928565b810181811067ffffffffffffffff821117156147a6576147a56148e5565b5b80604052505050565b60006147ba82614700565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147ed576147ec614829565b5b600182019050919050565b600061480382614700565b915061480e83614700565b92508261481e5761481d614858565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f464f582046414354494f4e203a204d696e7420616d6f756e742063616e27742060008201527f6265207a65726f2e000000000000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204d61782066726565206d696e74207065722060008201527f7472616e73616374696f6e206578636565646564210000000000000000000000602082015250565b7f464f582046414354494f4e203a206672656520737570706c7920736f6c64206f60008201527f75742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204265796f6e64204d617820537570706c792e600082015250565b7f464f582046414354494f4e203a20496e76616c6964206d696e7420616d6f756e60008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204d6178206d696e7420706572207472616e7360008201527f616374696f6e2065786365656465642100000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a20496e73756666696369656e742066756e647360008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f464f582046414354494f4e203a204d617820616d6f756e74207065722061646460008201527f7265737320657863656564656421000000000000000000000000000000000000602082015250565b50565b7f464f582046414354494f4e203a205468652063616c6c657220697320616e6f7460008201527f68657220636f6e74726163742e00000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a204d617820467265652070657220616464726560008201527f7373206578636565646564210000000000000000000000000000000000000000602082015250565b7f464f582046414354494f4e203a2054686520636f6e747261637420697320706160008201527f7573656421000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f464f582046414354494f4e203a204d696e7420616d6f756e742065786365656460008201527f73206d617820737570706c792100000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b614dc381614696565b8114614dce57600080fd5b50565b614dda816146a8565b8114614de557600080fd5b50565b614df1816146b4565b8114614dfc57600080fd5b50565b614e0881614700565b8114614e1357600080fd5b5056fea26469706673582212207ea678f386ae537489d12b927d9aeb446c0801914f03f15410904f1d820b1a6a64736f6c63430008070033

Deployed Bytecode Sourcemap

37497:5903:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20361:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23476:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24980:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39591:767;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24542:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37697:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42665:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19601:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38085:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25845:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37771:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43150:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43235:162;;;;;;;;;;;;;:::i;:::-;;26086:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40715:828;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42231:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40389:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37998:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37655:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42313:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38034:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37594:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23284:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20730:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4748:103;;;;;;;;;;;;;:::i;:::-;;37622:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42816:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37969:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4097:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23645:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39101:464;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25256:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26342:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37843:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43069:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37890:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41729:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42529:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42417:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37735:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25614:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42943:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5006:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37926:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37811:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20361:305;20463:4;20515:25;20500:40;;;:11;:40;;;;:105;;;;20572:33;20557:48;;;:11;:48;;;;20500:105;:158;;;;20622:36;20646:11;20622:23;:36::i;:::-;20500:158;20480:178;;20361:305;;;:::o;23476:100::-;23530:13;23563:5;23556:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23476:100;:::o;24980:204::-;25048:7;25073:16;25081:7;25073;:16::i;:::-;25068:64;;25098:34;;;;;;;;;;;;;;25068:64;25152:15;:24;25168:7;25152:24;;;;;;;;;;;;;;;;;;;;;25145:31;;24980:204;;;:::o;39591:767::-;39658:9;38574:7;:5;:7::i;:::-;38560:21;;:10;:21;;;38556:199;;38603:5;;;;;;;;;;;38602:6;38594:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38682:8;;38669:9;:21;;38661:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38556:199;38781:1;38769:9;:13;38761:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38855:10;38842:23;;:9;:23;;;38834:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38959:9;;38946;38930:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;38922:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39717:9:::1;;39704;39688:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;39680:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39808:12;;39795:9;:25;;39787:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;39936:17;;39923:9;39897:11;:23;39909:10;39897:23;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;:56;;39889:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;40036:1;40023:10;;:14;40015:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40122:1;40109:9;40096:10;;:22;;;;:::i;:::-;:27;;40088:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40187:9;40173:10;;:23;;;;;;;:::i;:::-;;;;;;;;40240:9;40213:11;:23;40225:10;40213:23;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;40296:9;40260:20;:32;40281:10;40260:32;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;40316:34;40326:12;:10;:12::i;:::-;40340:9;40316;:34::i;:::-;39591:767:::0;;:::o;24542:372::-;24615:13;24631:24;24647:7;24631:15;:24::i;:::-;24615:40;;24676:5;24670:11;;:2;:11;;;24666:48;;;24690:24;;;;;;;;;;;;;;24666:48;24747:5;24731:21;;:12;:10;:12::i;:::-;:21;;;24727:139;;24758:37;24775:5;24782:12;:10;:12::i;:::-;24758:16;:37::i;:::-;24754:112;;24819:35;;;;;;;;;;;;;;24754:112;24727:139;24878:28;24887:2;24891:7;24900:5;24878:8;:28::i;:::-;24604:310;24542:372;;:::o;37697:33::-;;;;:::o;42665:131::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42767:23:::1;42747:17;:43;;;;42665:131:::0;:::o;19601:312::-;19654:7;19879:15;:13;:15::i;:::-;19864:12;;19848:13;;:28;:46;19841:53;;19601:312;:::o;38085:55::-;;;;;;;;;;;;;;;;;:::o;25845:170::-;25979:28;25989:4;25995:2;25999:7;25979:9;:28::i;:::-;25845:170;;;:::o;37771:31::-;;;;:::o;43150:79::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43217:6:::1;43206:8;;:17;;;;;;;;;;;;;;;;;;43150:79:::0;:::o;43235:162::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;941:1:::1;1161:7;;:19;;1153:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;941:1;1294:7;:18;;;;43295:12:::2;43321:7;:5;:7::i;:::-;43313:21;;43342;43313:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43294:74;;;43383:7;43375:16;;;::::0;::::2;;43287:110;897:1:::1;1339:7;:22;;;;43235:162::o:0;26086:185::-;26224:39;26241:4;26247:2;26251:7;26224:39;;;;;;;;;;;;:16;:39::i;:::-;26086:185;;;:::o;40715:828::-;40775:16;40800:23;40826:17;40836:6;40826:9;:17::i;:::-;40800:43;;40850:30;40897:15;40883:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40850:63;;40920:22;40945:15;:13;:15::i;:::-;40920:40;;40967:23;41001:26;41036:475;41061:15;41043;:33;:67;;;;;41097:13;;41080:14;:30;41043:67;41036:475;;;41121:31;41155:28;41168:14;41155:12;:28::i;:::-;41121:62;;41199:9;:16;;;41194:285;;41258:1;41232:28;;:9;:14;;;:28;;;41228:94;;41296:9;:14;;;41275:35;;41228:94;41360:6;41338:28;;:18;:28;;;41334:136;;;41414:14;41381:13;41395:15;41381:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;41441:17;;;;;:::i;:::-;;;;41334:136;41194:285;41487:16;;;;;:::i;:::-;;;;41112:399;41036:475;;;41524:13;41517:20;;;;;;;40715:828;;;:::o;42231:74::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42294:5:::1;42287:4;:12;;;;42231:74:::0;:::o;40389:241::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40519:9:::1;;40504:11;40488:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;40480:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40589:33;40599:9;40610:11;40589:9;:33::i;:::-;40389:241:::0;;:::o;37998:27::-;;;;;;;;;;;;;:::o;37655:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42313:98::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42392:13:::1;42381:8;:24;;;;42313:98:::0;:::o;38034:46::-;;;;;;;;;;;;;;;;;:::o;37594:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23284:125::-;23348:7;23375:21;23388:7;23375:12;:21::i;:::-;:26;;;23368:33;;23284:125;;;:::o;20730:206::-;20794:7;20835:1;20818:19;;:5;:19;;;20814:60;;;20846:28;;;;;;;;;;;;;;20814:60;20900:12;:19;20913:5;20900:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;20892:36;;20885:43;;20730:206;;;:::o;4748:103::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4813:30:::1;4840:1;4813:18;:30::i;:::-;4748:103::o:0;37622:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42816:100::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42900:10:::1;42888:9;:22;;;;;;;;;;;;:::i;:::-;;42816:100:::0;:::o;37969:24::-;;;;;;;;;;;;;:::o;4097:87::-;4143:7;4170:6;;;;;;;;;;;4163:13;;4097:87;:::o;23645:104::-;23701:13;23734:7;23727:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23645:104;:::o;39101:464::-;39164:9;38574:7;:5;:7::i;:::-;38560:21;;:10;:21;;;38556:199;;38603:5;;;;;;;;;;;38602:6;38594:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38682:8;;38669:9;:21;;38661:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38556:199;38781:1;38769:9;:13;38761:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38855:10;38842:23;;:9;:23;;;38834:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38959:9;;38946;38930:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;38922:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:7:::1;:5;:7::i;:::-;39190:21;;:10;:21;;;39186:273;;39284:18;;39271:9;39236:20;:32;39257:10;39236:32;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:66;;39228:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;39396:9;39389:4;;:16;;;;:::i;:::-;39376:9;:29;;39368:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39186:273;39505:9;39469:20;:32;39490:10;39469:32;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;39525:32;39535:10;39547:9;39525;:32::i;:::-;39101:464:::0;;:::o;25256:287::-;25367:12;:10;:12::i;:::-;25355:24;;:8;:24;;;25351:54;;;25388:17;;;;;;;;;;;;;;25351:54;25463:8;25418:18;:32;25437:12;:10;:12::i;:::-;25418:32;;;;;;;;;;;;;;;:42;25451:8;25418:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25516:8;25487:48;;25502:12;:10;:12::i;:::-;25487:48;;;25526:8;25487:48;;;;;;:::i;:::-;;;;;;;;25256:287;;:::o;26342:370::-;26509:28;26519:4;26525:2;26529:7;26509:9;:28::i;:::-;26552:15;:2;:13;;;:15::i;:::-;26548:157;;;26573:56;26604:4;26610:2;26614:7;26623:5;26573:30;:56::i;:::-;26569:136;;26653:40;;;;;;;;;;;;;;26569:136;26548:157;26342:370;;;;:::o;37843:38::-;;;;:::o;43069:75::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43132:6:::1;43124:5;;:14;;;;;;;;;;;;;;;;;;43069:75:::0;:::o;37890:31::-;;;;:::o;41729:428::-;41803:13;41833:17;41841:8;41833:7;:17::i;:::-;41825:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;41931:5;41919:17;;:8;;;;;;;;;;;:17;;;41915:49;;;41947:14;41940:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41915:49;41972:28;42003:10;:8;:10::i;:::-;41972:41;;42058:1;42033:14;42027:28;:32;:122;;;;;;;;;;;;;;;;;42091:14;42107:19;:8;:17;:19::i;:::-;42128:9;42074:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42027:122;42020:129;;;41729:428;;;;:::o;42529:130::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42634:19:::1;42613:18;:40;;;;42529:130:::0;:::o;42417:106::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42504:13:::1;42489:12;:28;;;;42417:106:::0;:::o;37735:31::-;;;;:::o;25614:164::-;25711:4;25735:18;:25;25754:5;25735:25;;;;;;;;;;;;;;;:35;25761:8;25735:35;;;;;;;;;;;;;;;;;;;;;;;;;25728:42;;25614:164;;;;:::o;42943:120::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43042:15:::1;43025:14;:32;;;;;;;;;;;;:::i;:::-;;42943:120:::0;:::o;5006:201::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5115:1:::1;5095:22;;:8;:22;;;;5087:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5171:28;5190:8;5171:18;:28::i;:::-;5006:201:::0;:::o;37926:36::-;;;;:::o;37811:27::-;;;;:::o;11589:157::-;11674:4;11713:25;11698:40;;;:11;:40;;;;11691:47;;11589:157;;;:::o;26967:174::-;27024:4;27067:7;27048:15;:13;:15::i;:::-;:26;;:53;;;;;27088:13;;27078:7;:23;27048:53;:85;;;;;27106:11;:20;27118:7;27106:20;;;;;;;;;;;:27;;;;;;;;;;;;27105:28;27048:85;27041:92;;26967:174;;;:::o;3387:98::-;3440:7;3467:10;3460:17;;3387:98;:::o;27225:104::-;27294:27;27304:2;27308:8;27294:27;;;;;;;;;;;;:9;:27::i;:::-;27225:104;;:::o;36189:196::-;36331:2;36304:15;:24;36320:7;36304:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36369:7;36365:2;36349:28;;36358:5;36349:28;;;;;;;;;;;;36189:196;;;:::o;41567:95::-;41632:7;41655:1;41648:8;;41567:95;:::o;31137:2130::-;31252:35;31290:21;31303:7;31290:12;:21::i;:::-;31252:59;;31350:4;31328:26;;:13;:18;;;:26;;;31324:67;;31363:28;;;;;;;;;;;;;;31324:67;31404:22;31446:4;31430:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;31467:36;31484:4;31490:12;:10;:12::i;:::-;31467:16;:36::i;:::-;31430:73;:126;;;;31544:12;:10;:12::i;:::-;31520:36;;:20;31532:7;31520:11;:20::i;:::-;:36;;;31430:126;31404:153;;31575:17;31570:66;;31601:35;;;;;;;;;;;;;;31570:66;31665:1;31651:16;;:2;:16;;;31647:52;;;31676:23;;;;;;;;;;;;;;31647:52;31712:43;31734:4;31740:2;31744:7;31753:1;31712:21;:43::i;:::-;31820:35;31837:1;31841:7;31850:4;31820:8;:35::i;:::-;32181:1;32151:12;:18;32164:4;32151:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32225:1;32197:12;:16;32210:2;32197:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32243:31;32277:11;:20;32289:7;32277:20;;;;;;;;;;;32243:54;;32328:2;32312:8;:13;;;:18;;;;;;;;;;;;;;;;;;32378:15;32345:8;:23;;;:49;;;;;;;;;;;;;;;;;;32646:19;32678:1;32668:7;:11;32646:33;;32694:31;32728:11;:24;32740:11;32728:24;;;;;;;;;;;32694:58;;32796:1;32771:27;;:8;:13;;;;;;;;;;;;:27;;;32767:384;;;32981:13;;32966:11;:28;32962:174;;33035:4;33019:8;:13;;;:20;;;;;;;;;;;;;;;;;;33088:13;:28;;;33062:8;:23;;;:54;;;;;;;;;;;;;;;;;;32962:174;32767:384;32126:1036;;;33198:7;33194:2;33179:27;;33188:4;33179:27;;;;;;;;;;;;33217:42;33238:4;33244:2;33248:7;33257:1;33217:20;:42::i;:::-;31241:2026;;31137:2130;;;:::o;22111:1111::-;22173:21;;:::i;:::-;22207:12;22222:7;22207:22;;22290:4;22271:15;:13;:15::i;:::-;:23;22267:888;;22307:13;;22300:4;:20;22296:859;;;22341:31;22375:11;:17;22387:4;22375:17;;;;;;;;;;;22341:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22416:9;:16;;;22411:729;;22487:1;22461:28;;:9;:14;;;:28;;;22457:101;;22525:9;22518:16;;;;;;22457:101;22860:261;22867:4;22860:261;;;22900:6;;;;;;;;22945:11;:17;22957:4;22945:17;;;;;;;;;;;22933:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23019:1;22993:28;;:9;:14;;;:28;;;22989:109;;23061:9;23054:16;;;;;;22989:109;22860:261;;;22411:729;22322:833;22296:859;22267:888;23183:31;;;;;;;;;;;;;;22111:1111;;;;:::o;5367:191::-;5441:16;5460:6;;;;;;;;;;;5441:25;;5486:8;5477:6;;:17;;;;;;;;;;;;;;;;;;5541:8;5510:40;;5531:8;5510:40;;;;;;;;;;;;5430:128;5367:191;:::o;5819:115::-;5879:4;5925:1;5903:7;:19;;;:23;5896:30;;5819:115;;;:::o;36395:667::-;36558:4;36595:2;36579:36;;;36616:12;:10;:12::i;:::-;36630:4;36636:7;36645:5;36579:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36575:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36830:1;36813:6;:13;:18;36809:235;;;36859:40;;;;;;;;;;;;;;36809:235;37002:6;36996:13;36987:6;36983:2;36979:15;36972:38;36575:480;36708:45;;;36698:55;;;:6;:55;;;;36691:62;;;36395:667;;;;;;:::o;38338:104::-;38398:13;38427:9;38420:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38338:104;:::o;1645:534::-;1701:13;1742:1;1733:5;:10;1729:53;;;1760:10;;;;;;;;;;;;;;;;;;;;;1729:53;1792:12;1807:5;1792:20;;1823:14;1848:78;1863:1;1855:4;:9;1848:78;;1881:8;;;;;:::i;:::-;;;;1912:2;1904:10;;;;;:::i;:::-;;;1848:78;;;1936:19;1968:6;1958:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1936:39;;1986:154;2002:1;1993:5;:10;1986:154;;2030:1;2020:11;;;;;:::i;:::-;;;2097:2;2089:5;:10;;;;:::i;:::-;2076:2;:24;;;;:::i;:::-;2063:39;;2046:6;2053;2046:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2126:2;2117:11;;;;;:::i;:::-;;;1986:154;;;2164:6;2150:21;;;;;1645:534;;;;:::o;27702:1749::-;27825:20;27848:13;;27825:36;;27890:1;27876:16;;:2;:16;;;27872:48;;;27901:19;;;;;;;;;;;;;;27872:48;27947:1;27935:8;:13;27931:44;;;27957:18;;;;;;;;;;;;;;27931:44;27988:61;28018:1;28022:2;28026:12;28040:8;27988:21;:61::i;:::-;28361:8;28326:12;:16;28339:2;28326:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28425:8;28385:12;:16;28398:2;28385:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28484:2;28451:11;:25;28463:12;28451:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;28551:15;28501:11;:25;28513:12;28501:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;28584:20;28607:12;28584:35;;28634:11;28663:8;28648:12;:23;28634:37;;28692:15;:2;:13;;;:15::i;:::-;28688:631;;;28728:313;28784:12;28780:2;28759:38;;28776:1;28759:38;;;;;;;;;;;;28825:69;28864:1;28868:2;28872:14;;;;;;28888:5;28825:30;:69::i;:::-;28820:174;;28930:40;;;;;;;;;;;;;;28820:174;29036:3;29021:12;:18;28728:313;;29122:12;29105:13;;:29;29101:43;;29136:8;;;29101:43;28688:631;;;29185:119;29241:14;;;;;;29237:2;29216:40;;29233:1;29216:40;;;;;;;;;;;;29299:3;29284:12;:18;29185:119;;28688:631;29349:12;29333:13;:28;;;;28301:1072;;29383:60;29412:1;29416:2;29420:12;29434:8;29383:20;:60::i;:::-;27814:1637;27702:1749;;;:::o;37073:159::-;;;;;:::o;37242:158::-;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10302:845::-;10405:3;10442:5;10436:12;10471:36;10497:9;10471:36;:::i;:::-;10523:89;10605:6;10600:3;10523:89;:::i;:::-;10516:96;;10643:1;10632:9;10628:17;10659:1;10654:137;;;;10805:1;10800:341;;;;10621:520;;10654:137;10738:4;10734:9;10723;10719:25;10714:3;10707:38;10774:6;10769:3;10765:16;10758:23;;10654:137;;10800:341;10867:38;10899:5;10867:38;:::i;:::-;10927:1;10941:154;10955:6;10952:1;10949:13;10941:154;;;11029:7;11023:14;11019:1;11014:3;11010:11;11003:35;11079:1;11070:7;11066:15;11055:26;;10977:4;10974:1;10970:12;10965:17;;10941:154;;;11124:6;11119:3;11115:16;11108:23;;10807:334;;10621:520;;10409:738;;10302:845;;;;:::o;11153:366::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:398::-;15032:3;15053:83;15134:1;15129:3;15053:83;:::i;:::-;15046:90;;15145:93;15234:3;15145:93;:::i;:::-;15263:1;15258:3;15254:11;15247:18;;14873:398;;;:::o;15277:366::-;15419:3;15440:67;15504:2;15499:3;15440:67;:::i;:::-;15433:74;;15516:93;15605:3;15516:93;:::i;:::-;15634:2;15629:3;15625:12;15618:19;;15277:366;;;:::o;15649:::-;15791:3;15812:67;15876:2;15871:3;15812:67;:::i;:::-;15805:74;;15888:93;15977:3;15888:93;:::i;:::-;16006:2;16001:3;15997:12;15990:19;;15649:366;;;:::o;16021:::-;16163:3;16184:67;16248:2;16243:3;16184:67;:::i;:::-;16177:74;;16260:93;16349:3;16260:93;:::i;:::-;16378:2;16373:3;16369:12;16362:19;;16021:366;;;:::o;16393:::-;16535:3;16556:67;16620:2;16615:3;16556:67;:::i;:::-;16549:74;;16632:93;16721:3;16632:93;:::i;:::-;16750:2;16745:3;16741:12;16734:19;;16393:366;;;:::o;16765:::-;16907:3;16928:67;16992:2;16987:3;16928:67;:::i;:::-;16921:74;;17004:93;17093:3;17004:93;:::i;:::-;17122:2;17117:3;17113:12;17106:19;;16765:366;;;:::o;17137:::-;17279:3;17300:67;17364:2;17359:3;17300:67;:::i;:::-;17293:74;;17376:93;17465:3;17376:93;:::i;:::-;17494:2;17489:3;17485:12;17478:19;;17137:366;;;:::o;17509:108::-;17586:24;17604:5;17586:24;:::i;:::-;17581:3;17574:37;17509:108;;:::o;17623:118::-;17710:24;17728:5;17710:24;:::i;:::-;17705:3;17698:37;17623:118;;:::o;17747:589::-;17972:3;17994:95;18085:3;18076:6;17994:95;:::i;:::-;17987:102;;18106:95;18197:3;18188:6;18106:95;:::i;:::-;18099:102;;18218:92;18306:3;18297:6;18218:92;:::i;:::-;18211:99;;18327:3;18320:10;;17747:589;;;;;;:::o;18342:379::-;18526:3;18548:147;18691:3;18548:147;:::i;:::-;18541:154;;18712:3;18705:10;;18342:379;;;:::o;18727:222::-;18820:4;18858:2;18847:9;18843:18;18835:26;;18871:71;18939:1;18928:9;18924:17;18915:6;18871:71;:::i;:::-;18727:222;;;;:::o;18955:640::-;19150:4;19188:3;19177:9;19173:19;19165:27;;19202:71;19270:1;19259:9;19255:17;19246:6;19202:71;:::i;:::-;19283:72;19351:2;19340:9;19336:18;19327:6;19283:72;:::i;:::-;19365;19433:2;19422:9;19418:18;19409:6;19365:72;:::i;:::-;19484:9;19478:4;19474:20;19469:2;19458:9;19454:18;19447:48;19512:76;19583:4;19574:6;19512:76;:::i;:::-;19504:84;;18955:640;;;;;;;:::o;19601:373::-;19744:4;19782:2;19771:9;19767:18;19759:26;;19831:9;19825:4;19821:20;19817:1;19806:9;19802:17;19795:47;19859:108;19962:4;19953:6;19859:108;:::i;:::-;19851:116;;19601:373;;;;:::o;19980:210::-;20067:4;20105:2;20094:9;20090:18;20082:26;;20118:65;20180:1;20169:9;20165:17;20156:6;20118:65;:::i;:::-;19980:210;;;;:::o;20196:313::-;20309:4;20347:2;20336:9;20332:18;20324:26;;20396:9;20390:4;20386:20;20382:1;20371:9;20367:17;20360:47;20424:78;20497:4;20488:6;20424:78;:::i;:::-;20416:86;;20196:313;;;;:::o;20515:419::-;20681:4;20719:2;20708:9;20704:18;20696:26;;20768:9;20762:4;20758:20;20754:1;20743:9;20739:17;20732:47;20796:131;20922:4;20796:131;:::i;:::-;20788:139;;20515:419;;;:::o;20940:::-;21106:4;21144:2;21133:9;21129:18;21121:26;;21193:9;21187:4;21183:20;21179:1;21168:9;21164:17;21157:47;21221:131;21347:4;21221:131;:::i;:::-;21213:139;;20940:419;;;:::o;21365:::-;21531:4;21569:2;21558:9;21554:18;21546:26;;21618:9;21612:4;21608:20;21604:1;21593:9;21589:17;21582:47;21646:131;21772:4;21646:131;:::i;:::-;21638:139;;21365:419;;;:::o;21790:::-;21956:4;21994:2;21983:9;21979:18;21971:26;;22043:9;22037:4;22033:20;22029:1;22018:9;22014:17;22007:47;22071:131;22197:4;22071:131;:::i;:::-;22063:139;;21790:419;;;:::o;22215:::-;22381:4;22419:2;22408:9;22404:18;22396:26;;22468:9;22462:4;22458:20;22454:1;22443:9;22439:17;22432:47;22496:131;22622:4;22496:131;:::i;:::-;22488:139;;22215:419;;;:::o;22640:::-;22806:4;22844:2;22833:9;22829:18;22821:26;;22893:9;22887:4;22883:20;22879:1;22868:9;22864:17;22857:47;22921:131;23047:4;22921:131;:::i;:::-;22913:139;;22640:419;;;:::o;23065:::-;23231:4;23269:2;23258:9;23254:18;23246:26;;23318:9;23312:4;23308:20;23304:1;23293:9;23289:17;23282:47;23346:131;23472:4;23346:131;:::i;:::-;23338:139;;23065:419;;;:::o;23490:::-;23656:4;23694:2;23683:9;23679:18;23671:26;;23743:9;23737:4;23733:20;23729:1;23718:9;23714:17;23707:47;23771:131;23897:4;23771:131;:::i;:::-;23763:139;;23490:419;;;:::o;23915:::-;24081:4;24119:2;24108:9;24104:18;24096:26;;24168:9;24162:4;24158:20;24154:1;24143:9;24139:17;24132:47;24196:131;24322:4;24196:131;:::i;:::-;24188:139;;23915:419;;;:::o;24340:::-;24506:4;24544:2;24533:9;24529:18;24521:26;;24593:9;24587:4;24583:20;24579:1;24568:9;24564:17;24557:47;24621:131;24747:4;24621:131;:::i;:::-;24613:139;;24340:419;;;:::o;24765:::-;24931:4;24969:2;24958:9;24954:18;24946:26;;25018:9;25012:4;25008:20;25004:1;24993:9;24989:17;24982:47;25046:131;25172:4;25046:131;:::i;:::-;25038:139;;24765:419;;;:::o;25190:::-;25356:4;25394:2;25383:9;25379:18;25371:26;;25443:9;25437:4;25433:20;25429:1;25418:9;25414:17;25407:47;25471:131;25597:4;25471:131;:::i;:::-;25463:139;;25190:419;;;:::o;25615:::-;25781:4;25819:2;25808:9;25804:18;25796:26;;25868:9;25862:4;25858:20;25854:1;25843:9;25839:17;25832:47;25896:131;26022:4;25896:131;:::i;:::-;25888:139;;25615:419;;;:::o;26040:::-;26206:4;26244:2;26233:9;26229:18;26221:26;;26293:9;26287:4;26283:20;26279:1;26268:9;26264:17;26257:47;26321:131;26447:4;26321:131;:::i;:::-;26313:139;;26040:419;;;:::o;26465:::-;26631:4;26669:2;26658:9;26654:18;26646:26;;26718:9;26712:4;26708:20;26704:1;26693:9;26689:17;26682:47;26746:131;26872:4;26746:131;:::i;:::-;26738:139;;26465:419;;;:::o;26890:::-;27056:4;27094:2;27083:9;27079:18;27071:26;;27143:9;27137:4;27133:20;27129:1;27118:9;27114:17;27107:47;27171:131;27297:4;27171:131;:::i;:::-;27163:139;;26890:419;;;:::o;27315:222::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27459:71;27527:1;27516:9;27512:17;27503:6;27459:71;:::i;:::-;27315:222;;;;:::o;27543:129::-;27577:6;27604:20;;:::i;:::-;27594:30;;27633:33;27661:4;27653:6;27633:33;:::i;:::-;27543:129;;;:::o;27678:75::-;27711:6;27744:2;27738:9;27728:19;;27678:75;:::o;27759:307::-;27820:4;27910:18;27902:6;27899:30;27896:56;;;27932:18;;:::i;:::-;27896:56;27970:29;27992:6;27970:29;:::i;:::-;27962:37;;28054:4;28048;28044:15;28036:23;;27759:307;;;:::o;28072:308::-;28134:4;28224:18;28216:6;28213:30;28210:56;;;28246:18;;:::i;:::-;28210:56;28284:29;28306:6;28284:29;:::i;:::-;28276:37;;28368:4;28362;28358:15;28350:23;;28072:308;;;:::o;28386:132::-;28453:4;28476:3;28468:11;;28506:4;28501:3;28497:14;28489:22;;28386:132;;;:::o;28524:141::-;28573:4;28596:3;28588:11;;28619:3;28616:1;28609:14;28653:4;28650:1;28640:18;28632:26;;28524:141;;;:::o;28671:114::-;28738:6;28772:5;28766:12;28756:22;;28671:114;;;:::o;28791:98::-;28842:6;28876:5;28870:12;28860:22;;28791:98;;;:::o;28895:99::-;28947:6;28981:5;28975:12;28965:22;;28895:99;;;:::o;29000:113::-;29070:4;29102;29097:3;29093:14;29085:22;;29000:113;;;:::o;29119:184::-;29218:11;29252:6;29247:3;29240:19;29292:4;29287:3;29283:14;29268:29;;29119:184;;;;:::o;29309:168::-;29392:11;29426:6;29421:3;29414:19;29466:4;29461:3;29457:14;29442:29;;29309:168;;;;:::o;29483:147::-;29584:11;29621:3;29606:18;;29483:147;;;;:::o;29636:169::-;29720:11;29754:6;29749:3;29742:19;29794:4;29789:3;29785:14;29770:29;;29636:169;;;;:::o;29811:148::-;29913:11;29950:3;29935:18;;29811:148;;;;:::o;29965:305::-;30005:3;30024:20;30042:1;30024:20;:::i;:::-;30019:25;;30058:20;30076:1;30058:20;:::i;:::-;30053:25;;30212:1;30144:66;30140:74;30137:1;30134:81;30131:107;;;30218:18;;:::i;:::-;30131:107;30262:1;30259;30255:9;30248:16;;29965:305;;;;:::o;30276:185::-;30316:1;30333:20;30351:1;30333:20;:::i;:::-;30328:25;;30367:20;30385:1;30367:20;:::i;:::-;30362:25;;30406:1;30396:35;;30411:18;;:::i;:::-;30396:35;30453:1;30450;30446:9;30441:14;;30276:185;;;;:::o;30467:348::-;30507:7;30530:20;30548:1;30530:20;:::i;:::-;30525:25;;30564:20;30582:1;30564:20;:::i;:::-;30559:25;;30752:1;30684:66;30680:74;30677:1;30674:81;30669:1;30662:9;30655:17;30651:105;30648:131;;;30759:18;;:::i;:::-;30648:131;30807:1;30804;30800:9;30789:20;;30467:348;;;;:::o;30821:191::-;30861:4;30881:20;30899:1;30881:20;:::i;:::-;30876:25;;30915:20;30933:1;30915:20;:::i;:::-;30910:25;;30954:1;30951;30948:8;30945:34;;;30959:18;;:::i;:::-;30945:34;31004:1;31001;30997:9;30989:17;;30821:191;;;;:::o;31018:96::-;31055:7;31084:24;31102:5;31084:24;:::i;:::-;31073:35;;31018:96;;;:::o;31120:90::-;31154:7;31197:5;31190:13;31183:21;31172:32;;31120:90;;;:::o;31216:149::-;31252:7;31292:66;31285:5;31281:78;31270:89;;31216:149;;;:::o;31371:126::-;31408:7;31448:42;31441:5;31437:54;31426:65;;31371:126;;;:::o;31503:77::-;31540:7;31569:5;31558:16;;31503:77;;;:::o;31586:154::-;31670:6;31665:3;31660;31647:30;31732:1;31723:6;31718:3;31714:16;31707:27;31586:154;;;:::o;31746:307::-;31814:1;31824:113;31838:6;31835:1;31832:13;31824:113;;;31923:1;31918:3;31914:11;31908:18;31904:1;31899:3;31895:11;31888:39;31860:2;31857:1;31853:10;31848:15;;31824:113;;;31955:6;31952:1;31949:13;31946:101;;;32035:1;32026:6;32021:3;32017:16;32010:27;31946:101;31795:258;31746:307;;;:::o;32059:320::-;32103:6;32140:1;32134:4;32130:12;32120:22;;32187:1;32181:4;32177:12;32208:18;32198:81;;32264:4;32256:6;32252:17;32242:27;;32198:81;32326:2;32318:6;32315:14;32295:18;32292:38;32289:84;;;32345:18;;:::i;:::-;32289:84;32110:269;32059:320;;;:::o;32385:281::-;32468:27;32490:4;32468:27;:::i;:::-;32460:6;32456:40;32598:6;32586:10;32583:22;32562:18;32550:10;32547:34;32544:62;32541:88;;;32609:18;;:::i;:::-;32541:88;32649:10;32645:2;32638:22;32428:238;32385:281;;:::o;32672:233::-;32711:3;32734:24;32752:5;32734:24;:::i;:::-;32725:33;;32780:66;32773:5;32770:77;32767:103;;;32850:18;;:::i;:::-;32767:103;32897:1;32890:5;32886:13;32879:20;;32672:233;;;:::o;32911:176::-;32943:1;32960:20;32978:1;32960:20;:::i;:::-;32955:25;;32994:20;33012:1;32994:20;:::i;:::-;32989:25;;33033:1;33023:35;;33038:18;;:::i;:::-;33023:35;33079:1;33076;33072:9;33067:14;;32911:176;;;;:::o;33093:180::-;33141:77;33138:1;33131:88;33238:4;33235:1;33228:15;33262:4;33259:1;33252:15;33279:180;33327:77;33324:1;33317:88;33424:4;33421:1;33414:15;33448:4;33445:1;33438:15;33465:180;33513:77;33510:1;33503:88;33610:4;33607:1;33600:15;33634:4;33631:1;33624:15;33651:180;33699:77;33696:1;33689:88;33796:4;33793:1;33786:15;33820:4;33817:1;33810:15;33837:180;33885:77;33882:1;33875:88;33982:4;33979:1;33972:15;34006:4;34003:1;33996:15;34023:117;34132:1;34129;34122:12;34146:117;34255:1;34252;34245:12;34269:117;34378:1;34375;34368:12;34392:117;34501:1;34498;34491:12;34515:102;34556:6;34607:2;34603:7;34598:2;34591:5;34587:14;34583:28;34573:38;;34515:102;;;:::o;34623:227::-;34763:34;34759:1;34751:6;34747:14;34740:58;34832:10;34827:2;34819:6;34815:15;34808:35;34623:227;:::o;34856:240::-;34996:34;34992:1;34984:6;34980:14;34973:58;35065:23;35060:2;35052:6;35048:15;35041:48;34856:240;:::o;35102:222::-;35242:34;35238:1;35230:6;35226:14;35219:58;35311:5;35306:2;35298:6;35294:15;35287:30;35102:222;:::o;35330:182::-;35470:34;35466:1;35458:6;35454:14;35447:58;35330:182;:::o;35518:221::-;35658:34;35654:1;35646:6;35642:14;35635:58;35727:4;35722:2;35714:6;35710:15;35703:29;35518:221;:::o;35745:225::-;35885:34;35881:1;35873:6;35869:14;35862:58;35954:8;35949:2;35941:6;35937:15;35930:33;35745:225;:::o;35976:235::-;36116:34;36112:1;36104:6;36100:14;36093:58;36185:18;36180:2;36172:6;36168:15;36161:43;35976:235;:::o;36217:220::-;36357:34;36353:1;36345:6;36341:14;36334:58;36426:3;36421:2;36413:6;36409:15;36402:28;36217:220;:::o;36443:182::-;36583:34;36579:1;36571:6;36567:14;36560:58;36443:182;:::o;36631:233::-;36771:34;36767:1;36759:6;36755:14;36748:58;36840:16;36835:2;36827:6;36823:15;36816:41;36631:233;:::o;36870:114::-;;:::o;36990:232::-;37130:34;37126:1;37118:6;37114:14;37107:58;37199:15;37194:2;37186:6;37182:15;37175:40;36990:232;:::o;37228:231::-;37368:34;37364:1;37356:6;37352:14;37345:58;37437:14;37432:2;37424:6;37420:15;37413:39;37228:231;:::o;37465:224::-;37605:34;37601:1;37593:6;37589:14;37582:58;37674:7;37669:2;37661:6;37657:15;37650:32;37465:224;:::o;37695:181::-;37835:33;37831:1;37823:6;37819:14;37812:57;37695:181;:::o;37882:232::-;38022:34;38018:1;38010:6;38006:14;37999:58;38091:15;38086:2;38078:6;38074:15;38067:40;37882:232;:::o;38120:235::-;38260:34;38256:1;38248:6;38244:14;38237:58;38329:18;38324:2;38316:6;38312:15;38305:43;38120:235;:::o;38361:122::-;38434:24;38452:5;38434:24;:::i;:::-;38427:5;38424:35;38414:63;;38473:1;38470;38463:12;38414:63;38361:122;:::o;38489:116::-;38559:21;38574:5;38559:21;:::i;:::-;38552:5;38549:32;38539:60;;38595:1;38592;38585:12;38539:60;38489:116;:::o;38611:120::-;38683:23;38700:5;38683:23;:::i;:::-;38676:5;38673:34;38663:62;;38721:1;38718;38711:12;38663:62;38611:120;:::o;38737:122::-;38810:24;38828:5;38810:24;:::i;:::-;38803:5;38800:35;38790:63;;38849:1;38846;38839:12;38790:63;38737:122;:::o

Swarm Source

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