ETH Price: $2,208.66 (-10.74%)

Token

Xara Land Sites (XaraL)
 

Overview

Max Total Supply

1,273 XaraL

Holders

98

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 XaraL
0x227574772958242ae1630ee7d9FEcA24d3Aca8b1
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:
XaraLand

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.
*/

// OPENSEA REGISTRY CODE START
interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        // If an inheriting token contract is deployed to a network without the registry deployed, the modifier
        // will not revert, but the contract will need to be registered with the registry once it is deployed in
        // order for the modifier to filter addresses.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (subscribe) {
                OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    OPERATOR_FILTER_REGISTRY.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        // Allow spending tokens from addresses with balance
        // Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
        // from an EOA.
        if (from != msg.sender) {
            _checkFilterOperator(msg.sender);
        }
        _;
    }

    modifier onlyAllowedOperatorApproval(address operator) virtual {
        _checkFilterOperator(operator);
        _;
    }

    function _checkFilterOperator(address operator) internal view virtual {
        // Check registry code length to facilitate testing in environments without a deployed registry.
        if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
            if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
                revert OperatorNotAllowed(operator);
            }
        }
    }
}

abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

// OPENSEA REGISTRY CODE END



interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    //@dev Emitted when `tokenId` token is transferred from `from` to `to`.
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Addr: cant send val, rcpt revert");
    }

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

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

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

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Addr: insufficient balance 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, "Addr: low-level static call fail");
    }

    /**
     * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call non-contract");

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

abstract contract Proxy is Ownable {
    mapping(address => bool) private _isProxy;

    constructor() {
        _isProxy[_msgSender()] = true;
    }

    function assignProxy(address newProxy) external onlyOwner {
        _isProxy[newProxy] = true;
    }

    function revokeProxy(address badProxy) external onlyOwner {
        _isProxy[badProxy] = false;
    }

    function isProxy(address checkProxy) external view returns (bool) {
        return _isProxy[checkProxy];
    }

    modifier proxyAccess {
        require(_isProxy[_msgSender()]);
        _;
    }
}

abstract contract Functional {
    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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}

// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract XaraLand is DefaultOperatorFilterer, IERC721, Proxy, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

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

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

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

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    
    // Specific Functionality
    bool public revealed;  //for URI redirects
    uint256 public totalTokens;
    uint256 public numberMinted;

    address public payoutWallet;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        // This smart contract will be proxy accessible by the market smart contract
        // which will handle all of the transactions for this contract.
        _name = "Xara Land Sites";
        _symbol = "XaraL"; //L for Land
        _baseURI = "https://bafybeic2jyguqe2gjbv2un3wvxbq65gryka5qss76jdj7kcyjotzefjds4.ipfs.nftstorage.link/";

        payoutWallet = 0x516e4BB39632690e674d36691264a6DcD7dF251E;
        
        totalTokens = 6000;
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == XaraLand.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 sendAmount = address(this).balance;
        (bool success, ) = payoutWallet.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted;

        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
            numberMinted ++;  //increment here in case of gas overload
        }
    }
    
    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }

    /////////////////// Proxy Access for Staking /////////////////
    function proxyTransfer(address _from, address _to, uint256 _tokenId) external proxyAccess {
        _transfer(_from, _to, _tokenId);
    }

    function proxyMint(address _to, uint256 _qty) external proxyAccess {
        // Checks and balances handled mostly by the proxy contract
        require((numberMinted + _qty) <= totalTokens, "Cannot fill order");

        uint256 mintSeedValue = numberMinted;
        for(uint256 i = 0; i < _qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted++;
        }
        
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    function setPayoutWallet(address newWallet) external onlyOwner {
    	payoutWallet = newWallet;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted;
    }

    function reveal() external onlyOwner {
        revealed = true;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

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

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

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override onlyAllowedOperatorApproval(operator){
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, 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 onlyAllowedOperator(from){
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override onlyAllowedOperator(from){
        require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved");
        _safeTransfer(from, to, tokenId, _data);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

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

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI 0x0 token");
        string memory tokenuri;
        
        if (!revealed) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","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":"newProxy","type":"address"}],"name":"assignProxy","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":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"checkProxy","type":"address"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","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":"payoutWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"proxyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"proxyTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"badProxy","type":"address"}],"name":"revokeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","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":[],"name":"totalTokens","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600260006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb6600160006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111562000239578015620000ff576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620000c5929190620004ef565b600060405180830381600087803b158015620000e057600080fd5b505af1158015620000f5573d6000803e3d6000fd5b5050505062000238565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620001b9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200017f929190620004ef565b600060405180830381600087803b1580156200019a57600080fd5b505af1158015620001af573d6000803e3d6000fd5b5050505062000237565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200020291906200051c565b600060405180830381600087803b1580156200021d57600080fd5b505af115801562000232573d6000803e3d6000fd5b505050505b5b5b50506200025b6200024f620003de60201b60201c565b620003e660201b60201c565b600180600062000270620003de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506040518060400160405280600f81526020017f58617261204c616e64205369746573000000000000000000000000000000000081525060039081620003079190620007b3565b506040518060400160405280600581526020017f586172614c000000000000000000000000000000000000000000000000000000815250600490816200034e9190620007b3565b5060405180608001604052806059815260200162004daa6059913960059081620003799190620007b3565b5073516e4bb39632690e674d36691264a6dcd7df251e600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611770600b819055506200089a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004d782620004aa565b9050919050565b620004e981620004ca565b82525050565b6000604082019050620005066000830185620004de565b620005156020830184620004de565b9392505050565b6000602082019050620005336000830184620004de565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005bb57607f821691505b602082108103620005d157620005d062000573565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200063b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005fc565b620006478683620005fc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006946200068e62000688846200065f565b62000669565b6200065f565b9050919050565b6000819050919050565b620006b08362000673565b620006c8620006bf826200069b565b84845462000609565b825550505050565b600090565b620006df620006d0565b620006ec818484620006a5565b505050565b5b81811015620007145762000708600082620006d5565b600181019050620006f2565b5050565b601f82111562000763576200072d81620005d7565b6200073884620005ec565b8101602085101562000748578190505b620007606200075785620005ec565b830182620006f1565b50505b505050565b600082821c905092915050565b6000620007886000198460080262000768565b1980831691505092915050565b6000620007a3838362000775565b9150826002028217905092915050565b620007be8262000539565b67ffffffffffffffff811115620007da57620007d962000544565b5b620007e68254620005a2565b620007f382828562000718565b600060209050601f8311600181146200082b576000841562000816578287015190505b62000822858262000795565b86555062000892565b601f1984166200083b86620005d7565b60005b8281101562000865578489015182556001820191506020850194506020810190506200083e565b8683101562000885578489015162000881601f89168262000775565b8355505b6001600288020188555050505b505050505050565b61450080620008aa6000396000f3fe60806040526004361061021d5760003560e01c806355f804b311610123578063a22cb465116100ab578063c89052251161006f578063c8905225146107ae578063e8a3d485146107d7578063e985e9c514610802578063f2fde38b1461083f578063f8b2cb4f1461086857610224565b8063a22cb465146106df578063a475b5dd14610708578063b0b922631461071f578063b88d4fde14610748578063c87b56dd1461077157610224565b8063715018a6116100f2578063715018a61461061c5780637e1c0c09146106335780638488bb4e1461065e5780638da5cb5b1461068957806395d89b41146106b457610224565b806355f804b3146105505780636352211e146105795780636b8f9c43146105b657806370a08231146105df57610224565b806329710388116101a657806342842e0e1161017557806342842e0e1461047f57806342966c68146104a857806349a772b5146104d15780634a92fb3a146104fc578063518302271461052557610224565b806329710388146103d75780633b479d58146104145780633ccfd60b1461043d57806341f434341461045457610224565b8063095ea7b3116101ed578063095ea7b3146102f4578063150b7a021461031d57806318160ddd1461035a5780631f471ad01461038557806323b872dd146103ae57610224565b8062b6849f1461022657806301ffc9a71461024f57806306fdde031461028c578063081812fc146102b757610224565b3661022457005b005b34801561023257600080fd5b5061024d60048036038101906102489190612d0d565b6108a5565b005b34801561025b57600080fd5b5061027660048036038101906102719190612dae565b610a3c565b6040516102839190612df6565b60405180910390f35b34801561029857600080fd5b506102a1610bc5565b6040516102ae9190612e99565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190612ef1565b610c57565b6040516102eb9190612f2d565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612f48565b610cdc565b005b34801561032957600080fd5b50610344600480360381019061033f9190612fe3565b610df0565b604051610351919061307a565b60405180910390f35b34801561036657600080fd5b5061036f610e05565b60405161037c91906130a4565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612f48565b610e0f565b005b3480156103ba57600080fd5b506103d560048036038101906103d091906130bf565b610f16565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613112565b610fae565b60405161040b9190612df6565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613112565b611004565b005b34801561044957600080fd5b506104526110da565b005b34801561046057600080fd5b5061046961122d565b604051610476919061319e565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906130bf565b61123f565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612ef1565b61129e565b005b3480156104dd57600080fd5b506104e66112f1565b6040516104f391906130a4565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906130bf565b6112f7565b005b34801561053157600080fd5b5061053a611364565b6040516105479190612df6565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061326e565b611377565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612ef1565b611406565b6040516105ad9190612f2d565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613112565b6114b7565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613112565b611577565b60405161061391906130a4565b60405180910390f35b34801561062857600080fd5b5061063161162e565b005b34801561063f57600080fd5b506106486116b6565b60405161065591906130a4565b60405180910390f35b34801561066a57600080fd5b506106736116bc565b6040516106809190612f2d565b60405180910390f35b34801561069557600080fd5b5061069e6116e2565b6040516106ab9190612f2d565b60405180910390f35b3480156106c057600080fd5b506106c961170b565b6040516106d69190612e99565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906132e3565b61179d565b005b34801561071457600080fd5b5061071d611913565b005b34801561072b57600080fd5b5061074660048036038101906107419190612ef1565b6119ac565b005b34801561075457600080fd5b5061076f600480360381019061076a91906133c4565b611a32565b005b34801561077d57600080fd5b5061079860048036038101906107939190612ef1565b611acc565b6040516107a59190612e99565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613112565b611b8b565b005b3480156107e357600080fd5b506107ec611c62565b6040516107f99190612e99565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613447565b611c8a565b6040516108369190612df6565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190613112565b611d1e565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613112565b611e15565b60405161089c91906130a4565b60405180910390f35b6108ad611e70565b73ffffffffffffffffffffffffffffffffffffffff166108cb6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610918906134d3565b60405180910390fd5b600081519050600c5481600c546109389190613522565b11610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f906135c4565b60405180910390fd5b600b5481600c546109899190613522565b11156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613630565b60405180910390fd5b6000600c54905060005b82811015610a3657610a0b8482815181106109f2576109f1613650565b5b60200260200101518284610a069190613522565b611e78565b600c6000815480929190610a1e9061367f565b91905055508080610a2e9061367f565b9150506109d4565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bbe575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610bd4906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906136f6565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050505050905090565b6000610c6282611e96565b610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890613773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610ce681611f02565b6000610cf183611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906137df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610da15750610da08133611c8a565b5b610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd79061384b565b60405180910390fd5b610dea8484611fff565b50505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b60016000610e1b611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e6c57600080fd5b600b5481600c54610e7d9190613522565b1115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613630565b60405180910390fd5b6000600c54905060005b82811015610f1057610ee5848284610ee09190613522565b611e78565b600c6000815480929190610ef89061367f565b91905055508080610f089061367f565b915050610ec8565b50505050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f5457610f5333611f02565b5b610f5e33836120b8565b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f94906138b7565b60405180910390fd5b610fa8848484612196565b50505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61100c611e70565b73ffffffffffffffffffffffffffffffffffffffff1661102a6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906134d3565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110e2611e70565b73ffffffffffffffffffffffffffffffffffffffff166111006116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d906134d3565b60405180910390fd5b60004790506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111a390613908565b60006040518083038185875af1925050503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b5050905080611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613969565b60405180910390fd5b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461127d5761127c33611f02565b5b61129884848460405180602001604052806000815250611a32565b50505050565b6112a781611406565b73ffffffffffffffffffffffffffffffffffffffff166112c5611e70565b73ffffffffffffffffffffffffffffffffffffffff16146112e557600080fd5b6112ee816123f1565b50565b600c5481565b60016000611303611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661135457600080fd5b61135f838383612196565b505050565b600a60009054906101000a900460ff1681565b61137f611e70565b73ffffffffffffffffffffffffffffffffffffffff1661139d6116e2565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea906134d3565b60405180910390fd5b80600590816114029190613b2b565b5050565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613c49565b60405180910390fd5b80915050919050565b6114bf611e70565b73ffffffffffffffffffffffffffffffffffffffff166114dd6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906134d3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613cb5565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611636611e70565b73ffffffffffffffffffffffffffffffffffffffff166116546116e2565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906134d3565b60405180910390fd5b6116b46000612502565b565b600b5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461171a906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611746906136f6565b80156117935780601f1061176857610100808354040283529160200191611793565b820191906000526020600020905b81548152906001019060200180831161177657829003601f168201915b5050505050905090565b816117a781611f02565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90613d21565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31846040516119069190612df6565b60405180910390a3505050565b61191b611e70565b73ffffffffffffffffffffffffffffffffffffffff166119396116e2565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611986906134d3565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6119b4611e70565b73ffffffffffffffffffffffffffffffffffffffff166119d26116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906134d3565b60405180910390fd5b80600b8190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a7057611a6f33611f02565b5b611a7a33846120b8565b611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906138b7565b60405180910390fd5b611ac5858585856125c6565b5050505050565b6060611ad782611e96565b611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90613d8d565b60405180910390fd5b6060600a60009054906101000a900460ff16611b54576005604051602001611b3e9190613e87565b6040516020818303038152906040529050611b82565b6005611b5f84612622565b604051602001611b70929190613f26565b60405160208183030381529060405290505b80915050919050565b611b93611e70565b73ffffffffffffffffffffffffffffffffffffffff16611bb16116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906134d3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606005604051602001611c769190613fa1565b604051602081830303815290604052905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d26611e70565b73ffffffffffffffffffffffffffffffffffffffff16611d446116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906134d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e009061400f565b60405180910390fd5b611e1281612502565b50565b600066038d7ea4c68000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e69919061405e565b9050919050565b600033905090565b611e92828260405180602001604052806000815250612782565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611ffc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611f7992919061408f565b602060405180830381865afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fba91906140cd565b611ffb57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611ff29190612f2d565b60405180910390fd5b5b50565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661207283611406565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120c382611e96565b612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990614146565b60405180910390fd5b600061210d83611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061217c57508373ffffffffffffffffffffffffffffffffffffffff1661216484610c57565b73ffffffffffffffffffffffffffffffffffffffff16145b8061218d575061218c8185611c8a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121b682611406565b73ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906141b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122729061421e565b60405180910390fd5b6122868383836127dd565b612291600082611fff565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e1919061423e565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123389190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006123fc82611406565b905061240a816000846127dd565b612415600083611fff565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612465919061423e565b925050819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125d1848484612196565b6125dd848484846127e2565b61261c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612613906142be565b60405180910390fd5b50505050565b606060008203612669576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061277d565b600082905060005b6000821461269b5780806126849061367f565b915050600a82612694919061405e565b9150612671565b60008167ffffffffffffffff8111156126b7576126b6612b6c565b5b6040519080825280601f01601f1916602001820160405280156126e95781602001600182028036833780820191505090505b5090505b6000851461277657600182612702919061423e565b9150600a8561271191906142de565b603061271d9190613522565b60f81b81838151811061273357612732613650565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561276f919061405e565b94506126ed565b8093505050505b919050565b61278c8383612962565b61279960008484846127e2565b6127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906142be565b60405180910390fd5b505050565b505050565b60006128038473ffffffffffffffffffffffffffffffffffffffff16612b2f565b15612955578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016128479493929190614364565b6020604051808303816000875af192505050801561288357506040513d601f19601f8201168201806040525081019061288091906143c5565b60015b612905573d80600081146128b3576040519150601f19603f3d011682016040523d82523d6000602084013e6128b8565b606091505b5060008151036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906142be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89061443e565b60405180910390fd5b6129da81611e96565b15612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906144aa565b60405180910390fd5b612a26600083836127dd565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a769190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba482612b5b565b810181811067ffffffffffffffff82111715612bc357612bc2612b6c565b5b80604052505050565b6000612bd6612b42565b9050612be28282612b9b565b919050565b600067ffffffffffffffff821115612c0257612c01612b6c565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4382612c18565b9050919050565b612c5381612c38565b8114612c5e57600080fd5b50565b600081359050612c7081612c4a565b92915050565b6000612c89612c8484612be7565b612bcc565b90508083825260208201905060208402830185811115612cac57612cab612c13565b5b835b81811015612cd55780612cc18882612c61565b845260208401935050602081019050612cae565b5050509392505050565b600082601f830112612cf457612cf3612b56565b5b8135612d04848260208601612c76565b91505092915050565b600060208284031215612d2357612d22612b4c565b5b600082013567ffffffffffffffff811115612d4157612d40612b51565b5b612d4d84828501612cdf565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d8b81612d56565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600060208284031215612dc457612dc3612b4c565b5b6000612dd284828501612d99565b91505092915050565b60008115159050919050565b612df081612ddb565b82525050565b6000602082019050612e0b6000830184612de7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e4b578082015181840152602081019050612e30565b83811115612e5a576000848401525b50505050565b6000612e6b82612e11565b612e758185612e1c565b9350612e85818560208601612e2d565b612e8e81612b5b565b840191505092915050565b60006020820190508181036000830152612eb38184612e60565b905092915050565b6000819050919050565b612ece81612ebb565b8114612ed957600080fd5b50565b600081359050612eeb81612ec5565b92915050565b600060208284031215612f0757612f06612b4c565b5b6000612f1584828501612edc565b91505092915050565b612f2781612c38565b82525050565b6000602082019050612f426000830184612f1e565b92915050565b60008060408385031215612f5f57612f5e612b4c565b5b6000612f6d85828601612c61565b9250506020612f7e85828601612edc565b9150509250929050565b600080fd5b60008083601f840112612fa357612fa2612b56565b5b8235905067ffffffffffffffff811115612fc057612fbf612f88565b5b602083019150836001820283011115612fdc57612fdb612c13565b5b9250929050565b600080600080600060808688031215612fff57612ffe612b4c565b5b600061300d88828901612c61565b955050602061301e88828901612c61565b945050604061302f88828901612edc565b935050606086013567ffffffffffffffff8111156130505761304f612b51565b5b61305c88828901612f8d565b92509250509295509295909350565b61307481612d56565b82525050565b600060208201905061308f600083018461306b565b92915050565b61309e81612ebb565b82525050565b60006020820190506130b96000830184613095565b92915050565b6000806000606084860312156130d8576130d7612b4c565b5b60006130e686828701612c61565b93505060206130f786828701612c61565b925050604061310886828701612edc565b9150509250925092565b60006020828403121561312857613127612b4c565b5b600061313684828501612c61565b91505092915050565b6000819050919050565b600061316461315f61315a84612c18565b61313f565b612c18565b9050919050565b600061317682613149565b9050919050565b60006131888261316b565b9050919050565b6131988161317d565b82525050565b60006020820190506131b3600083018461318f565b92915050565b600080fd5b600067ffffffffffffffff8211156131d9576131d8612b6c565b5b6131e282612b5b565b9050602081019050919050565b82818337600083830152505050565b600061321161320c846131be565b612bcc565b90508281526020810184848401111561322d5761322c6131b9565b5b6132388482856131ef565b509392505050565b600082601f83011261325557613254612b56565b5b81356132658482602086016131fe565b91505092915050565b60006020828403121561328457613283612b4c565b5b600082013567ffffffffffffffff8111156132a2576132a1612b51565b5b6132ae84828501613240565b91505092915050565b6132c081612ddb565b81146132cb57600080fd5b50565b6000813590506132dd816132b7565b92915050565b600080604083850312156132fa576132f9612b4c565b5b600061330885828601612c61565b9250506020613319858286016132ce565b9150509250929050565b600067ffffffffffffffff82111561333e5761333d612b6c565b5b61334782612b5b565b9050602081019050919050565b600061336761336284613323565b612bcc565b905082815260208101848484011115613383576133826131b9565b5b61338e8482856131ef565b509392505050565b600082601f8301126133ab576133aa612b56565b5b81356133bb848260208601613354565b91505092915050565b600080600080608085870312156133de576133dd612b4c565b5b60006133ec87828801612c61565b94505060206133fd87828801612c61565b935050604061340e87828801612edc565b925050606085013567ffffffffffffffff81111561342f5761342e612b51565b5b61343b87828801613396565b91505092959194509250565b6000806040838503121561345e5761345d612b4c565b5b600061346c85828601612c61565b925050602061347d85828601612c61565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134bd602083612e1c565b91506134c882613487565b602082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061352d82612ebb565b915061353883612ebb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561356d5761356c6134f3565b5b828201905092915050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b60006135ae601383612e1c565b91506135b982613578565b602082019050919050565b600060208201905081810360008301526135dd816135a1565b9050919050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b600061361a601183612e1c565b9150613625826135e4565b602082019050919050565b600060208201905081810360008301526136498161360d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061368a82612ebb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136bc576136bb6134f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061370e57607f821691505b602082108103613721576137206136c7565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b600061375d602083612e1c565b915061376882613727565b602082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b60006137c9601e83612e1c565b91506137d482613793565b602082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b6000613835601f83612e1c565b9150613840826137ff565b602082019050919050565b6000602082019050818103600083015261386481613828565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b60006138a1601c83612e1c565b91506138ac8261386b565b602082019050919050565b600060208201905081810360008301526138d081613894565b9050919050565b600081905092915050565b50565b60006138f26000836138d7565b91506138fd826138e2565b600082019050919050565b6000613913826138e5565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613953601883612e1c565b915061395e8261391d565b602082019050919050565b6000602082019050818103600083015261398281613946565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139ae565b6139f586836139ae565b95508019841693508086168417925050509392505050565b6000613a28613a23613a1e84612ebb565b61313f565b612ebb565b9050919050565b6000819050919050565b613a4283613a0d565b613a56613a4e82613a2f565b8484546139bb565b825550505050565b600090565b613a6b613a5e565b613a76818484613a39565b505050565b5b81811015613a9a57613a8f600082613a63565b600181019050613a7c565b5050565b601f821115613adf57613ab081613989565b613ab98461399e565b81016020851015613ac8578190505b613adc613ad48561399e565b830182613a7b565b50505b505050565b600082821c905092915050565b6000613b0260001984600802613ae4565b1980831691505092915050565b6000613b1b8383613af1565b9150826002028217905092915050565b613b3482612e11565b67ffffffffffffffff811115613b4d57613b4c612b6c565b5b613b5782546136f6565b613b62828285613a9e565b600060209050601f831160018114613b955760008415613b83578287015190505b613b8d8582613b0f565b865550613bf5565b601f198416613ba386613989565b60005b82811015613bcb57848901518255600182019150602085019450602081019050613ba6565b86831015613be85784890151613be4601f891682613af1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000613c33601e83612e1c565b9150613c3e82613bfd565b602082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000613c9f602083612e1c565b9150613caa82613c69565b602082019050919050565b60006020820190508181036000830152613cce81613c92565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613d0b601983612e1c565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6000613d77601d83612e1c565b9150613d8282613d41565b602082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b600081905092915050565b60008154613dc5816136f6565b613dcf8186613dad565b94506001821660008114613dea5760018114613dff57613e32565b60ff1983168652811515820286019350613e32565b613e0885613989565b60005b83811015613e2a57815481890152600182019150602081019050613e0b565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b6000613e71600c83613dad565b9150613e7c82613e3b565b600c82019050919050565b6000613e938284613db8565b9150613e9e82613e64565b915081905092915050565b6000613eb482612e11565b613ebe8185613dad565b9350613ece818560208601612e2d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613f10600583613dad565b9150613f1b82613eda565b600582019050919050565b6000613f328285613db8565b9150613f3e8284613ea9565b9150613f4982613f03565b91508190509392505050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b6000613f8b600d83613dad565b9150613f9682613f55565b600d82019050919050565b6000613fad8284613db8565b9150613fb882613f7e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b6000613ff9602083612e1c565b915061400482613fc3565b602082019050919050565b6000602082019050818103600083015261402881613fec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061406982612ebb565b915061407483612ebb565b9250826140845761408361402f565b5b828204905092915050565b60006040820190506140a46000830185612f1e565b6140b16020830184612f1e565b9392505050565b6000815190506140c7816132b7565b92915050565b6000602082840312156140e3576140e2612b4c565b5b60006140f1848285016140b8565b91505092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000614130602083612e1c565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b600061419c601c83612e1c565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b6000614208601b83612e1c565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b600061424982612ebb565b915061425483612ebb565b925082821015614267576142666134f3565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b60006142a8601a83612e1c565b91506142b382614272565b602082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b60006142e982612ebb565b91506142f483612ebb565b9250826143045761430361402f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143368261430f565b614340818561431a565b9350614350818560208601612e2d565b61435981612b5b565b840191505092915050565b60006080820190506143796000830187612f1e565b6143866020830186612f1e565b6143936040830185613095565b81810360608301526143a5818461432b565b905095945050505050565b6000815190506143bf81612d82565b92915050565b6000602082840312156143db576143da612b4c565b5b60006143e9848285016143b0565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614428602083612e1c565b9150614433826143f2565b602082019050919050565b600060208201905081810360008301526144578161441b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614494601c83612e1c565b915061449f8261445e565b602082019050919050565b600060208201905081810360008301526144c381614487565b905091905056fea26469706673582212207bf1dd84c7159f2c36bcd4a7ea72e053f704a9f83ee12b9a73229497c0eea7b664736f6c634300080f003368747470733a2f2f6261667962656963326a796775716532676a627632756e33777678627136356772796b613571737337366a646a376b63796a6f747a65666a6473342e697066732e6e667473746f726167652e6c696e6b2f

Deployed Bytecode

0x60806040526004361061021d5760003560e01c806355f804b311610123578063a22cb465116100ab578063c89052251161006f578063c8905225146107ae578063e8a3d485146107d7578063e985e9c514610802578063f2fde38b1461083f578063f8b2cb4f1461086857610224565b8063a22cb465146106df578063a475b5dd14610708578063b0b922631461071f578063b88d4fde14610748578063c87b56dd1461077157610224565b8063715018a6116100f2578063715018a61461061c5780637e1c0c09146106335780638488bb4e1461065e5780638da5cb5b1461068957806395d89b41146106b457610224565b806355f804b3146105505780636352211e146105795780636b8f9c43146105b657806370a08231146105df57610224565b806329710388116101a657806342842e0e1161017557806342842e0e1461047f57806342966c68146104a857806349a772b5146104d15780634a92fb3a146104fc578063518302271461052557610224565b806329710388146103d75780633b479d58146104145780633ccfd60b1461043d57806341f434341461045457610224565b8063095ea7b3116101ed578063095ea7b3146102f4578063150b7a021461031d57806318160ddd1461035a5780631f471ad01461038557806323b872dd146103ae57610224565b8062b6849f1461022657806301ffc9a71461024f57806306fdde031461028c578063081812fc146102b757610224565b3661022457005b005b34801561023257600080fd5b5061024d60048036038101906102489190612d0d565b6108a5565b005b34801561025b57600080fd5b5061027660048036038101906102719190612dae565b610a3c565b6040516102839190612df6565b60405180910390f35b34801561029857600080fd5b506102a1610bc5565b6040516102ae9190612e99565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190612ef1565b610c57565b6040516102eb9190612f2d565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612f48565b610cdc565b005b34801561032957600080fd5b50610344600480360381019061033f9190612fe3565b610df0565b604051610351919061307a565b60405180910390f35b34801561036657600080fd5b5061036f610e05565b60405161037c91906130a4565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612f48565b610e0f565b005b3480156103ba57600080fd5b506103d560048036038101906103d091906130bf565b610f16565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613112565b610fae565b60405161040b9190612df6565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613112565b611004565b005b34801561044957600080fd5b506104526110da565b005b34801561046057600080fd5b5061046961122d565b604051610476919061319e565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a191906130bf565b61123f565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612ef1565b61129e565b005b3480156104dd57600080fd5b506104e66112f1565b6040516104f391906130a4565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e91906130bf565b6112f7565b005b34801561053157600080fd5b5061053a611364565b6040516105479190612df6565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061326e565b611377565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612ef1565b611406565b6040516105ad9190612f2d565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613112565b6114b7565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613112565b611577565b60405161061391906130a4565b60405180910390f35b34801561062857600080fd5b5061063161162e565b005b34801561063f57600080fd5b506106486116b6565b60405161065591906130a4565b60405180910390f35b34801561066a57600080fd5b506106736116bc565b6040516106809190612f2d565b60405180910390f35b34801561069557600080fd5b5061069e6116e2565b6040516106ab9190612f2d565b60405180910390f35b3480156106c057600080fd5b506106c961170b565b6040516106d69190612e99565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906132e3565b61179d565b005b34801561071457600080fd5b5061071d611913565b005b34801561072b57600080fd5b5061074660048036038101906107419190612ef1565b6119ac565b005b34801561075457600080fd5b5061076f600480360381019061076a91906133c4565b611a32565b005b34801561077d57600080fd5b5061079860048036038101906107939190612ef1565b611acc565b6040516107a59190612e99565b60405180910390f35b3480156107ba57600080fd5b506107d560048036038101906107d09190613112565b611b8b565b005b3480156107e357600080fd5b506107ec611c62565b6040516107f99190612e99565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613447565b611c8a565b6040516108369190612df6565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190613112565b611d1e565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613112565b611e15565b60405161089c91906130a4565b60405180910390f35b6108ad611e70565b73ffffffffffffffffffffffffffffffffffffffff166108cb6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614610921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610918906134d3565b60405180910390fd5b600081519050600c5481600c546109389190613522565b11610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096f906135c4565b60405180910390fd5b600b5481600c546109899190613522565b11156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613630565b60405180910390fd5b6000600c54905060005b82811015610a3657610a0b8482815181106109f2576109f1613650565b5b60200260200101518284610a069190613522565b611e78565b600c6000815480929190610a1e9061367f565b91905055508080610a2e9061367f565b9150506109d4565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b6f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bbe575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610bd4906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906136f6565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050505050905090565b6000610c6282611e96565b610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9890613773565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610ce681611f02565b6000610cf183611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906137df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610da15750610da08133611c8a565b5b610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd79061384b565b60405180910390fd5b610dea8484611fff565b50505050565b600063150b7a0260e01b905095945050505050565b6000600c54905090565b60016000610e1b611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e6c57600080fd5b600b5481600c54610e7d9190613522565b1115610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613630565b60405180910390fd5b6000600c54905060005b82811015610f1057610ee5848284610ee09190613522565b611e78565b600c6000815480929190610ef89061367f565b91905055508080610f089061367f565b915050610ec8565b50505050565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f5457610f5333611f02565b5b610f5e33836120b8565b610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f94906138b7565b60405180910390fd5b610fa8848484612196565b50505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61100c611e70565b73ffffffffffffffffffffffffffffffffffffffff1661102a6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906134d3565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110e2611e70565b73ffffffffffffffffffffffffffffffffffffffff166111006116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d906134d3565b60405180910390fd5b60004790506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111a390613908565b60006040518083038185875af1925050503d80600081146111e0576040519150601f19603f3d011682016040523d82523d6000602084013e6111e5565b606091505b5050905080611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613969565b60405180910390fd5b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461127d5761127c33611f02565b5b61129884848460405180602001604052806000815250611a32565b50505050565b6112a781611406565b73ffffffffffffffffffffffffffffffffffffffff166112c5611e70565b73ffffffffffffffffffffffffffffffffffffffff16146112e557600080fd5b6112ee816123f1565b50565b600c5481565b60016000611303611e70565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661135457600080fd5b61135f838383612196565b505050565b600a60009054906101000a900460ff1681565b61137f611e70565b73ffffffffffffffffffffffffffffffffffffffff1661139d6116e2565b73ffffffffffffffffffffffffffffffffffffffff16146113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea906134d3565b60405180910390fd5b80600590816114029190613b2b565b5050565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613c49565b60405180910390fd5b80915050919050565b6114bf611e70565b73ffffffffffffffffffffffffffffffffffffffff166114dd6116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a906134d3565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613cb5565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611636611e70565b73ffffffffffffffffffffffffffffffffffffffff166116546116e2565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906134d3565b60405180910390fd5b6116b46000612502565b565b600b5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461171a906136f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611746906136f6565b80156117935780601f1061176857610100808354040283529160200191611793565b820191906000526020600020905b81548152906001019060200180831161177657829003601f168201915b5050505050905090565b816117a781611f02565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90613d21565b60405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31846040516119069190612df6565b60405180910390a3505050565b61191b611e70565b73ffffffffffffffffffffffffffffffffffffffff166119396116e2565b73ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611986906134d3565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6119b4611e70565b73ffffffffffffffffffffffffffffffffffffffff166119d26116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906134d3565b60405180910390fd5b80600b8190555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a7057611a6f33611f02565b5b611a7a33846120b8565b611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab0906138b7565b60405180910390fd5b611ac5858585856125c6565b5050505050565b6060611ad782611e96565b611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90613d8d565b60405180910390fd5b6060600a60009054906101000a900460ff16611b54576005604051602001611b3e9190613e87565b6040516020818303038152906040529050611b82565b6005611b5f84612622565b604051602001611b70929190613f26565b60405160208183030381529060405290505b80915050919050565b611b93611e70565b73ffffffffffffffffffffffffffffffffffffffff16611bb16116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906134d3565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606005604051602001611c769190613fa1565b604051602081830303815290604052905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d26611e70565b73ffffffffffffffffffffffffffffffffffffffff16611d446116e2565b73ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d91906134d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e009061400f565b60405180910390fd5b611e1281612502565b50565b600066038d7ea4c68000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e69919061405e565b9050919050565b600033905090565b611e92828260405180602001604052806000815250612782565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611ffc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611f7992919061408f565b602060405180830381865afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fba91906140cd565b611ffb57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611ff29190612f2d565b60405180910390fd5b5b50565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661207283611406565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006120c382611e96565b612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990614146565b60405180910390fd5b600061210d83611406565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061217c57508373ffffffffffffffffffffffffffffffffffffffff1661216484610c57565b73ffffffffffffffffffffffffffffffffffffffff16145b8061218d575061218c8185611c8a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121b682611406565b73ffffffffffffffffffffffffffffffffffffffff161461220c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612203906141b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361227b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122729061421e565b60405180910390fd5b6122868383836127dd565b612291600082611fff565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e1919061423e565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123389190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006123fc82611406565b905061240a816000846127dd565b612415600083611fff565b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612465919061423e565b925050819055506006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125d1848484612196565b6125dd848484846127e2565b61261c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612613906142be565b60405180910390fd5b50505050565b606060008203612669576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061277d565b600082905060005b6000821461269b5780806126849061367f565b915050600a82612694919061405e565b9150612671565b60008167ffffffffffffffff8111156126b7576126b6612b6c565b5b6040519080825280601f01601f1916602001820160405280156126e95781602001600182028036833780820191505090505b5090505b6000851461277657600182612702919061423e565b9150600a8561271191906142de565b603061271d9190613522565b60f81b81838151811061273357612732613650565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561276f919061405e565b94506126ed565b8093505050505b919050565b61278c8383612962565b61279960008484846127e2565b6127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906142be565b60405180910390fd5b505050565b505050565b60006128038473ffffffffffffffffffffffffffffffffffffffff16612b2f565b15612955578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016128479493929190614364565b6020604051808303816000875af192505050801561288357506040513d601f19601f8201168201806040525081019061288091906143c5565b60015b612905573d80600081146128b3576040519150601f19603f3d011682016040523d82523d6000602084013e6128b8565b606091505b5060008151036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906142be565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061295a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89061443e565b60405180910390fd5b6129da81611e96565b15612a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a11906144aa565b60405180910390fd5b612a26600083836127dd565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a769190613522565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba482612b5b565b810181811067ffffffffffffffff82111715612bc357612bc2612b6c565b5b80604052505050565b6000612bd6612b42565b9050612be28282612b9b565b919050565b600067ffffffffffffffff821115612c0257612c01612b6c565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4382612c18565b9050919050565b612c5381612c38565b8114612c5e57600080fd5b50565b600081359050612c7081612c4a565b92915050565b6000612c89612c8484612be7565b612bcc565b90508083825260208201905060208402830185811115612cac57612cab612c13565b5b835b81811015612cd55780612cc18882612c61565b845260208401935050602081019050612cae565b5050509392505050565b600082601f830112612cf457612cf3612b56565b5b8135612d04848260208601612c76565b91505092915050565b600060208284031215612d2357612d22612b4c565b5b600082013567ffffffffffffffff811115612d4157612d40612b51565b5b612d4d84828501612cdf565b91505092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d8b81612d56565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600060208284031215612dc457612dc3612b4c565b5b6000612dd284828501612d99565b91505092915050565b60008115159050919050565b612df081612ddb565b82525050565b6000602082019050612e0b6000830184612de7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e4b578082015181840152602081019050612e30565b83811115612e5a576000848401525b50505050565b6000612e6b82612e11565b612e758185612e1c565b9350612e85818560208601612e2d565b612e8e81612b5b565b840191505092915050565b60006020820190508181036000830152612eb38184612e60565b905092915050565b6000819050919050565b612ece81612ebb565b8114612ed957600080fd5b50565b600081359050612eeb81612ec5565b92915050565b600060208284031215612f0757612f06612b4c565b5b6000612f1584828501612edc565b91505092915050565b612f2781612c38565b82525050565b6000602082019050612f426000830184612f1e565b92915050565b60008060408385031215612f5f57612f5e612b4c565b5b6000612f6d85828601612c61565b9250506020612f7e85828601612edc565b9150509250929050565b600080fd5b60008083601f840112612fa357612fa2612b56565b5b8235905067ffffffffffffffff811115612fc057612fbf612f88565b5b602083019150836001820283011115612fdc57612fdb612c13565b5b9250929050565b600080600080600060808688031215612fff57612ffe612b4c565b5b600061300d88828901612c61565b955050602061301e88828901612c61565b945050604061302f88828901612edc565b935050606086013567ffffffffffffffff8111156130505761304f612b51565b5b61305c88828901612f8d565b92509250509295509295909350565b61307481612d56565b82525050565b600060208201905061308f600083018461306b565b92915050565b61309e81612ebb565b82525050565b60006020820190506130b96000830184613095565b92915050565b6000806000606084860312156130d8576130d7612b4c565b5b60006130e686828701612c61565b93505060206130f786828701612c61565b925050604061310886828701612edc565b9150509250925092565b60006020828403121561312857613127612b4c565b5b600061313684828501612c61565b91505092915050565b6000819050919050565b600061316461315f61315a84612c18565b61313f565b612c18565b9050919050565b600061317682613149565b9050919050565b60006131888261316b565b9050919050565b6131988161317d565b82525050565b60006020820190506131b3600083018461318f565b92915050565b600080fd5b600067ffffffffffffffff8211156131d9576131d8612b6c565b5b6131e282612b5b565b9050602081019050919050565b82818337600083830152505050565b600061321161320c846131be565b612bcc565b90508281526020810184848401111561322d5761322c6131b9565b5b6132388482856131ef565b509392505050565b600082601f83011261325557613254612b56565b5b81356132658482602086016131fe565b91505092915050565b60006020828403121561328457613283612b4c565b5b600082013567ffffffffffffffff8111156132a2576132a1612b51565b5b6132ae84828501613240565b91505092915050565b6132c081612ddb565b81146132cb57600080fd5b50565b6000813590506132dd816132b7565b92915050565b600080604083850312156132fa576132f9612b4c565b5b600061330885828601612c61565b9250506020613319858286016132ce565b9150509250929050565b600067ffffffffffffffff82111561333e5761333d612b6c565b5b61334782612b5b565b9050602081019050919050565b600061336761336284613323565b612bcc565b905082815260208101848484011115613383576133826131b9565b5b61338e8482856131ef565b509392505050565b600082601f8301126133ab576133aa612b56565b5b81356133bb848260208601613354565b91505092915050565b600080600080608085870312156133de576133dd612b4c565b5b60006133ec87828801612c61565b94505060206133fd87828801612c61565b935050604061340e87828801612edc565b925050606085013567ffffffffffffffff81111561342f5761342e612b51565b5b61343b87828801613396565b91505092959194509250565b6000806040838503121561345e5761345d612b4c565b5b600061346c85828601612c61565b925050602061347d85828601612c61565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134bd602083612e1c565b91506134c882613487565b602082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061352d82612ebb565b915061353883612ebb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561356d5761356c6134f3565b5b828201905092915050565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b60006135ae601383612e1c565b91506135b982613578565b602082019050919050565b600060208201905081810360008301526135dd816135a1565b9050919050565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b600061361a601183612e1c565b9150613625826135e4565b602082019050919050565b600060208201905081810360008301526136498161360d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061368a82612ebb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136bc576136bb6134f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061370e57607f821691505b602082108103613721576137206136c7565b5b50919050565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b600061375d602083612e1c565b915061376882613727565b602082019050919050565b6000602082019050818103600083015261378c81613750565b9050919050565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b60006137c9601e83612e1c565b91506137d482613793565b602082019050919050565b600060208201905081810360008301526137f8816137bc565b9050919050565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b6000613835601f83612e1c565b9150613840826137ff565b602082019050919050565b6000602082019050818103600083015261386481613828565b9050919050565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b60006138a1601c83612e1c565b91506138ac8261386b565b602082019050919050565b600060208201905081810360008301526138d081613894565b9050919050565b600081905092915050565b50565b60006138f26000836138d7565b91506138fd826138e2565b600082019050919050565b6000613913826138e5565b9150819050919050565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b6000613953601883612e1c565b915061395e8261391d565b602082019050919050565b6000602082019050818103600083015261398281613946565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026139eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826139ae565b6139f586836139ae565b95508019841693508086168417925050509392505050565b6000613a28613a23613a1e84612ebb565b61313f565b612ebb565b9050919050565b6000819050919050565b613a4283613a0d565b613a56613a4e82613a2f565b8484546139bb565b825550505050565b600090565b613a6b613a5e565b613a76818484613a39565b505050565b5b81811015613a9a57613a8f600082613a63565b600181019050613a7c565b5050565b601f821115613adf57613ab081613989565b613ab98461399e565b81016020851015613ac8578190505b613adc613ad48561399e565b830182613a7b565b50505b505050565b600082821c905092915050565b6000613b0260001984600802613ae4565b1980831691505092915050565b6000613b1b8383613af1565b9150826002028217905092915050565b613b3482612e11565b67ffffffffffffffff811115613b4d57613b4c612b6c565b5b613b5782546136f6565b613b62828285613a9e565b600060209050601f831160018114613b955760008415613b83578287015190505b613b8d8582613b0f565b865550613bf5565b601f198416613ba386613989565b60005b82811015613bcb57848901518255600182019150602085019450602081019050613ba6565b86831015613be85784890151613be4601f891682613af1565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b6000613c33601e83612e1c565b9150613c3e82613bfd565b602082019050919050565b60006020820190508181036000830152613c6281613c26565b9050919050565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b6000613c9f602083612e1c565b9150613caa82613c69565b602082019050919050565b60006020820190508181036000830152613cce81613c92565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613d0b601983612e1c565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b6000613d77601d83612e1c565b9150613d8282613d41565b602082019050919050565b60006020820190508181036000830152613da681613d6a565b9050919050565b600081905092915050565b60008154613dc5816136f6565b613dcf8186613dad565b94506001821660008114613dea5760018114613dff57613e32565b60ff1983168652811515820286019350613e32565b613e0885613989565b60005b83811015613e2a57815481890152600182019150602081019050613e0b565b838801955050505b50505092915050565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b6000613e71600c83613dad565b9150613e7c82613e3b565b600c82019050919050565b6000613e938284613db8565b9150613e9e82613e64565b915081905092915050565b6000613eb482612e11565b613ebe8185613dad565b9350613ece818560208601612e2d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613f10600583613dad565b9150613f1b82613eda565b600582019050919050565b6000613f328285613db8565b9150613f3e8284613ea9565b9150613f4982613f03565b91508190509392505050565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b6000613f8b600d83613dad565b9150613f9682613f55565b600d82019050919050565b6000613fad8284613db8565b9150613fb882613f7e565b915081905092915050565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b6000613ff9602083612e1c565b915061400482613fc3565b602082019050919050565b6000602082019050818103600083015261402881613fec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061406982612ebb565b915061407483612ebb565b9250826140845761408361402f565b5b828204905092915050565b60006040820190506140a46000830185612f1e565b6140b16020830184612f1e565b9392505050565b6000815190506140c7816132b7565b92915050565b6000602082840312156140e3576140e2612b4c565b5b60006140f1848285016140b8565b91505092915050565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b6000614130602083612e1c565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b600061419c601c83612e1c565b91506141a782614166565b602082019050919050565b600060208201905081810360008301526141cb8161418f565b9050919050565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b6000614208601b83612e1c565b9150614213826141d2565b602082019050919050565b60006020820190508181036000830152614237816141fb565b9050919050565b600061424982612ebb565b915061425483612ebb565b925082821015614267576142666134f3565b5b828203905092915050565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b60006142a8601a83612e1c565b91506142b382614272565b602082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b60006142e982612ebb565b91506142f483612ebb565b9250826143045761430361402f565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006143368261430f565b614340818561431a565b9350614350818560208601612e2d565b61435981612b5b565b840191505092915050565b60006080820190506143796000830187612f1e565b6143866020830186612f1e565b6143936040830185613095565b81810360608301526143a5818461432b565b905095945050505050565b6000815190506143bf81612d82565b92915050565b6000602082840312156143db576143da612b4c565b5b60006143e9848285016143b0565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614428602083612e1c565b9150614433826143f2565b602082019050919050565b600060208201905081810360008301526144578161441b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614494601c83612e1c565b915061449f8261445e565b602082019050919050565b600060208201905081810360008301526144c381614487565b905091905056fea26469706673582212207bf1dd84c7159f2c36bcd4a7ea72e053f704a9f83ee12b9a73229497c0eea7b664736f6c634300080f0033

Deployed Bytecode Sourcemap

21686:17312:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23972:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23295:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37817:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27377:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26908:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36789:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25845:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24884:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28284:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20288:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20067:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23735:225;;;;;;;;;;;;;:::i;:::-;;2473:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28694:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24535:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22536:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24736:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22455:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25628:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26612:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25513:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26352:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19282:94;;;;;;;;;;;;;:::i;:::-;;22503:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22572:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18631:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37958:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27656:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25946:71;;;;;;;;;;;;;:::i;:::-;;25735:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28975:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38133:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38689:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28053:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19531:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26029:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:492;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24041:11:::1;24055:3;:10;24041:24;;24107:12;;24100:3;24085:12;;:18;;;;:::i;:::-;24084:35;24076:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24186:11;;24178:3;24163:12;;:18;;;;:::i;:::-;24162:35;;24154:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24240:21;24264:12;;24240:36;;24293:9;24289:168;24312:3;24308:1;:7;24289:168;;;24337:36;24347:3;24351:1;24347:6;;;;;;;;:::i;:::-;;;;;;;;24371:1;24355:13;:17;;;;:::i;:::-;24337:9;:36::i;:::-;24388:12;;:15;;;;;;;;;:::i;:::-;;;;;;24317:3;;;;;:::i;:::-;;;;24289:168;;;;24030:434;;23972:492:::0;:::o;23295:358::-;23380:4;23420:25;23405:40;;;:11;:40;;;;:109;;;;23481:33;23466:48;;;:11;:48;;;;23405:109;:170;;;;23550:25;23535:40;;;:11;:40;;;;23405:170;:240;;;;23611:34;;;23596:49;;;:11;:49;;;;23405:240;23397:248;;23295:358;;;:::o;37817:84::-;37856:13;37888:5;37881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37817:84;:::o;27377:207::-;27453:7;27481:16;27489:7;27481;:16::i;:::-;27473:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27552:15;:24;27568:7;27552:24;;;;;;;;;;;;;;;;;;;;;27545:31;;27377:207;;;:::o;26908:403::-;27006:2;3994:30;4015:8;3994:20;:30::i;:::-;27020:13:::1;27036:16;27044:7;27036;:16::i;:::-;27020:32;;27077:5;27071:11;;:2;:11;;::::0;27063:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27166:5;27152:19;;:10;:19;;;:58;;;;27175:35;27192:5;27199:10;27175:16;:35::i;:::-;27152:58;27130:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;27282:21;27291:2;27295:7;27282:8;:21::i;:::-;27009:302;26908:403:::0;;;:::o;36789:215::-;36906:6;36966:30;;;36959:37;;36789:215;;;;;;;:::o;25845:93::-;25891:7;25918:12;;25911:19;;25845:93;:::o;24884:413::-;20448:8;:22;20457:12;:10;:12::i;:::-;20448:22;;;;;;;;;;;;;;;;;;;;;;;;;20440:31;;;;;;25064:11:::1;;25055:4;25040:12;;:19;;;;:::i;:::-;25039:36;;25031:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25110:21;25134:12;;25110:36;;25161:9;25157:123;25180:4;25176:1;:8;25157:123;;;25206:33;25216:3;25237:1;25221:13;:17;;;;:::i;:::-;25206:9;:33::i;:::-;25254:12;;:14;;;;;;;;;:::i;:::-;;;;;;25186:3;;;;;:::i;:::-;;;;25157:123;;;;24951:346;24884:413:::0;;:::o;28284:339::-;28427:4;3822:10;3814:18;;:4;:18;;;3810:83;;3849:32;3870:10;3849:20;:32::i;:::-;3810:83;28504:39:::1;28523:10;28535:7;28504:18;:39::i;:::-;28496:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28587:28;28597:4;28603:2;28607:7;28587:9;:28::i;:::-;28284:339:::0;;;;:::o;20288:112::-;20348:4;20372:8;:20;20381:10;20372:20;;;;;;;;;;;;;;;;;;;;;;;;;20365:27;;20288:112;;;:::o;20067:102::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20157:4:::1;20136:8:::0;:18:::1;20145:8;20136:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;20067:102:::0;:::o;23735:225::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23785:18:::1;23806:21;23785:42;;23839:12;23857;;;;;;;;;;;:17;;23882:10;23857:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23838:59;;;23916:7;23908:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:186;;23735:225::o:0;2473:143::-;2573:42;2473:143;:::o;28694:210::-;28841:4;3822:10;3814:18;;:4;:18;;;3810:83;;3849:32;3870:10;3849:20;:32::i;:::-;3810:83;28857:39:::1;28874:4;28880:2;28884:7;28857:39;;;;;;;;;;;::::0;:16:::1;:39::i;:::-;28694:210:::0;;;;:::o;24535:125::-;24610:16;24618:7;24610;:16::i;:::-;24594:32;;:12;:10;:12::i;:::-;:32;;;24586:41;;;;;;24638:14;24644:7;24638:5;:14::i;:::-;24535:125;:::o;22536:27::-;;;;:::o;24736:140::-;20448:8;:22;20457:12;:10;:12::i;:::-;20448:22;;;;;;;;;;;;;;;;;;;;;;;;;20440:31;;;;;;24837::::1;24847:5;24854:3;24859:8;24837:9;:31::i;:::-;24736:140:::0;;;:::o;22455:20::-;;;;;;;;;;;;;:::o;25628:95::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25709:6:::1;25698:8;:17;;;;;;:::i;:::-;;25628:95:::0;:::o;26612:228::-;26684:7;26704:13;26720:7;:16;26728:7;26720:16;;;;;;;;;;;;;;;;;;;;;26704:32;;26772:1;26755:19;;:5;:19;;;26747:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26827:5;26820:12;;;26612:228;;;:::o;25513:103::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25599:9:::1;25584:12;;:24;;;;;;;;;;;;;;;;;;25513:103:::0;:::o;26352:198::-;26424:7;26469:1;26452:19;;:5;:19;;;26444:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26526:9;:16;26536:5;26526:16;;;;;;;;;;;;;;;;26519:23;;26352:198;;;:::o;19282:94::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19347:21:::1;19365:1;19347:9;:21::i;:::-;19282:94::o:0;22503:26::-;;;;:::o;22572:27::-;;;;;;;;;;;;;:::o;18631:87::-;18677:7;18704:6;;;;;;;;;;;18697:13;;18631:87;:::o;37958:88::-;37999:13;38031:7;38024:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37958:88;:::o;27656:326::-;27768:8;3994:30;4015:8;3994:20;:30::i;:::-;27808:10:::1;27796:22;;:8;:22;;::::0;27788:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27904:8;27861:18;:30;27880:10;27861:30;;;;;;;;;;;;;;;:40;27892:8;27861:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;27955:8;27928:46;;27943:10;27928:46;;;27965:8;27928:46;;;;;;:::i;:::-;;;;;;;;27656:326:::0;;;:::o;25946:71::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26005:4:::1;25994:8;;:15;;;;;;;;;;;;;;;;;;25946:71::o:0;25735:102::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25820:9:::1;25806:11;:23;;;;25735:102:::0;:::o;28975:330::-;29151:4;3822:10;3814:18;;:4;:18;;;3810:83;;3849:32;3870:10;3849:20;:32::i;:::-;3810:83;29175:39:::1;29194:10;29206:7;29175:18;:39::i;:::-;29167:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29258:39;29272:4;29278:2;29282:7;29291:5;29258:13;:39::i;:::-;28975:330:::0;;;;;:::o;38133:544::-;38191:13;38224:16;38232:7;38224;:16::i;:::-;38216:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38285:22;38333:8;;;;;;;;;;;38328:306;;38432:8;38415:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;38397:61;;38328:306;;;38584:8;38594:17;38603:7;38594:8;:17::i;:::-;38567:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38549:73;;38328:306;38661:8;38654:15;;;38133:544;;;:::o;20177:103::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20267:5:::1;20246:8;:18;20255:8;20246:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20177:103:::0;:::o;38689:139::-;38733:13;38794:8;38777:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;38763:57;;38689:139;:::o;28053:164::-;28150:4;28174:18;:25;28193:5;28174:25;;;;;;;;;;;;;;;:35;28200:8;28174:35;;;;;;;;;;;;;;;;;;;;;;;;;28167:42;;28053:164;;;;:::o;19531:186::-;18862:12;:10;:12::i;:::-;18851:23;;:7;:5;:7::i;:::-;:23;;;18843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19640:1:::1;19620:22;;:8;:22;;::::0;19612:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19690:19;19700:8;19690:9;:19::i;:::-;19531:186:::0;:::o;26029:259::-;26094:7;26236:6;26209:9;:23;26219:12;26209:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;26202:41;;26029:259;;;:::o;18014:98::-;18067:7;18094:10;18087:17;;18014:98;:::o;31756:110::-;31832:26;31842:2;31846:7;31832:26;;;;;;;;;;;;:9;:26::i;:::-;31756:110;;:::o;30791:127::-;30856:4;30908:1;30880:30;;:7;:16;30888:7;30880:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30873:37;;30791:127;;;:::o;4052:419::-;4291:1;2573:42;4243:45;;;:49;4239:225;;;2573:42;4314;;;4365:4;4372:8;4314:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4309:144;;4428:8;4409:28;;;;;;;;;;;:::i;:::-;;;;;;;;4309:144;4239:225;4052:419;:::o;34692:167::-;34794:2;34767:15;:24;34783:7;34767:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34843:7;34839:2;34812:39;;34821:16;34829:7;34821;:16::i;:::-;34812:39;;;;;;;;;;;;34692:167;;:::o;31085:329::-;31178:4;31203:16;31211:7;31203;:16::i;:::-;31195:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31267:13;31283:16;31291:7;31283;:16::i;:::-;31267:32;;31329:5;31318:16;;:7;:16;;;:51;;;;31362:7;31338:31;;:20;31350:7;31338:11;:20::i;:::-;:31;;;31318:51;:87;;;;31373:32;31390:5;31397:7;31373:16;:32::i;:::-;31318:87;31310:96;;;31085:329;;;;:::o;34027:547::-;34179:4;34159:24;;:16;34167:7;34159;:16::i;:::-;:24;;;34151:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34249:1;34235:16;;:2;:16;;;34227:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34294:39;34315:4;34321:2;34325:7;34294:20;:39::i;:::-;34398:29;34415:1;34419:7;34398:8;:29::i;:::-;34459:1;34440:9;:15;34450:4;34440:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34488:1;34471:9;:13;34481:2;34471:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34519:2;34500:7;:16;34508:7;34500:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34558:7;34554:2;34539:27;;34548:4;34539:27;;;;;;;;;;;;34027:547;;;:::o;33337:353::-;33397:13;33413:16;33421:7;33413;:16::i;:::-;33397:32;;33442:48;33463:5;33478:1;33482:7;33442:20;:48::i;:::-;33531:29;33548:1;33552:7;33531:8;:29::i;:::-;33593:1;33573:9;:16;33583:5;33573:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;33612:7;:16;33620:7;33612:16;;;;;;;;;;;;33605:23;;;;;;;;;;;33674:7;33670:1;33646:36;;33655:5;33646:36;;;;;;;;;;;;33386:304;33337:353;:::o;19725:173::-;19781:16;19800:6;;;;;;;;;;;19781:25;;19826:8;19817:6;;:17;;;;;;;;;;;;;;;;;;19881:8;19850:40;;19871:8;19850:40;;;;;;;;;;;;19770:128;19725:173;:::o;30187:291::-;30344:28;30354:4;30360:2;30364:7;30344:9;:28::i;:::-;30391:48;30414:4;30420:2;30424:7;30433:5;30391:22;:48::i;:::-;30383:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;30187:291;;;;:::o;20534:532::-;20590:13;20629:1;20620:5;:10;20616:53;;20647:10;;;;;;;;;;;;;;;;;;;;;20616:53;20679:12;20694:5;20679:20;;20710:14;20735:78;20750:1;20742:4;:9;20735:78;;20768:8;;;;;:::i;:::-;;;;20799:2;20791:10;;;;;:::i;:::-;;;20735:78;;;20823:19;20855:6;20845:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20823:39;;20873:154;20889:1;20880:5;:10;20873:154;;20917:1;20907:11;;;;;:::i;:::-;;;20984:2;20976:5;:10;;;;:::i;:::-;20963:2;:24;;;;:::i;:::-;20950:39;;20933:6;20940;20933:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;21013:2;21004:11;;;;;:::i;:::-;;;20873:154;;;21051:6;21037:21;;;;;20534:532;;;;:::o;32093:297::-;32223:18;32229:2;32233:7;32223:5;:18::i;:::-;32274:54;32305:1;32309:2;32313:7;32322:5;32274:22;:54::i;:::-;32252:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;32093:297;;;:::o;37576:98::-;;;;:::o;35424:777::-;35579:4;35600:15;:2;:13;;;:15::i;:::-;35596:598;;;35652:2;35636:36;;;35673:10;35685:4;35691:7;35700:5;35636:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35632:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35897:1;35880:6;:13;:18;35876:248;;35923:36;;;;;;;;;;:::i;:::-;;;;;;;;35876:248;36074:6;36068:13;36059:6;36055:2;36051:15;36044:38;35632:507;35767:45;;;35757:55;;;:6;:55;;;;35750:62;;;;;35596:598;36178:4;36171:11;;35424:777;;;;;;;:::o;32726:382::-;32820:1;32806:16;;:2;:16;;;32798:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32879:16;32887:7;32879;:16::i;:::-;32878:17;32870:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32941:45;32970:1;32974:2;32978:7;32941:20;:45::i;:::-;33016:1;32999:9;:13;33009:2;32999:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33047:2;33028:7;:16;33036:7;33028:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33092:7;33088:2;33067:33;;33084:1;33067:33;;;;;;;;;;;;32726:382;;:::o;10935:387::-;10995:4;11203:12;11270:7;11258:20;11250:28;;11313:1;11306:4;:8;11299:15;;;10935:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:311::-;1250:4;1340:18;1332:6;1329:30;1326:56;;;1362:18;;:::i;:::-;1326:56;1412:4;1404:6;1400:17;1392:25;;1472:4;1466;1462:15;1454:23;;1173:311;;;:::o;1490:117::-;1599:1;1596;1589:12;1613:126;1650:7;1690:42;1683:5;1679:54;1668:65;;1613:126;;;:::o;1745:96::-;1782:7;1811:24;1829:5;1811:24;:::i;:::-;1800:35;;1745:96;;;:::o;1847:122::-;1920:24;1938:5;1920:24;:::i;:::-;1913:5;1910:35;1900:63;;1959:1;1956;1949:12;1900:63;1847:122;:::o;1975:139::-;2021:5;2059:6;2046:20;2037:29;;2075:33;2102:5;2075:33;:::i;:::-;1975:139;;;;:::o;2137:710::-;2233:5;2258:81;2274:64;2331:6;2274:64;:::i;:::-;2258:81;:::i;:::-;2249:90;;2359:5;2388:6;2381:5;2374:21;2422:4;2415:5;2411:16;2404:23;;2475:4;2467:6;2463:17;2455:6;2451:30;2504:3;2496:6;2493:15;2490:122;;;2523:79;;:::i;:::-;2490:122;2638:6;2621:220;2655:6;2650:3;2647:15;2621:220;;;2730:3;2759:37;2792:3;2780:10;2759:37;:::i;:::-;2754:3;2747:50;2826:4;2821:3;2817:14;2810:21;;2697:144;2681:4;2676:3;2672:14;2665:21;;2621:220;;;2625:21;2239:608;;2137:710;;;;;:::o;2870:370::-;2941:5;2990:3;2983:4;2975:6;2971:17;2967:27;2957:122;;2998:79;;:::i;:::-;2957:122;3115:6;3102:20;3140:94;3230:3;3222:6;3215:4;3207:6;3203:17;3140:94;:::i;:::-;3131:103;;2947:293;2870:370;;;;:::o;3246:539::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3533:1;3522:9;3518:17;3505:31;3563:18;3555:6;3552:30;3549:117;;;3585:79;;:::i;:::-;3549:117;3690:78;3760:7;3751:6;3740:9;3736:22;3690:78;:::i;:::-;3680:88;;3476:302;3246:539;;;;:::o;3791:149::-;3827:7;3867:66;3860:5;3856:78;3845:89;;3791:149;;;:::o;3946:120::-;4018:23;4035:5;4018:23;:::i;:::-;4011:5;4008:34;3998:62;;4056:1;4053;4046:12;3998:62;3946:120;:::o;4072:137::-;4117:5;4155:6;4142:20;4133:29;;4171:32;4197:5;4171:32;:::i;:::-;4072:137;;;;:::o;4215:327::-;4273:6;4322:2;4310:9;4301:7;4297:23;4293:32;4290:119;;;4328:79;;:::i;:::-;4290:119;4448:1;4473:52;4517:7;4508:6;4497:9;4493:22;4473:52;:::i;:::-;4463:62;;4419:116;4215:327;;;;:::o;4548:90::-;4582:7;4625:5;4618:13;4611:21;4600:32;;4548:90;;;:::o;4644:109::-;4725:21;4740:5;4725:21;:::i;:::-;4720:3;4713:34;4644:109;;:::o;4759:210::-;4846:4;4884:2;4873:9;4869:18;4861:26;;4897:65;4959:1;4948:9;4944:17;4935:6;4897:65;:::i;:::-;4759:210;;;;:::o;4975:99::-;5027:6;5061:5;5055:12;5045:22;;4975:99;;;:::o;5080:169::-;5164:11;5198:6;5193:3;5186:19;5238:4;5233:3;5229:14;5214:29;;5080:169;;;;:::o;5255:307::-;5323:1;5333:113;5347:6;5344:1;5341:13;5333:113;;;5432:1;5427:3;5423:11;5417:18;5413:1;5408:3;5404:11;5397:39;5369:2;5366:1;5362:10;5357:15;;5333:113;;;5464:6;5461:1;5458:13;5455:101;;;5544:1;5535:6;5530:3;5526:16;5519:27;5455:101;5304:258;5255:307;;;:::o;5568:364::-;5656:3;5684:39;5717:5;5684:39;:::i;:::-;5739:71;5803:6;5798:3;5739:71;:::i;:::-;5732:78;;5819:52;5864:6;5859:3;5852:4;5845:5;5841:16;5819:52;:::i;:::-;5896:29;5918:6;5896:29;:::i;:::-;5891:3;5887:39;5880:46;;5660:272;5568:364;;;;:::o;5938:313::-;6051:4;6089:2;6078:9;6074:18;6066:26;;6138:9;6132:4;6128:20;6124:1;6113:9;6109:17;6102:47;6166:78;6239:4;6230:6;6166:78;:::i;:::-;6158:86;;5938:313;;;;:::o;6257:77::-;6294:7;6323:5;6312:16;;6257:77;;;:::o;6340:122::-;6413:24;6431:5;6413:24;:::i;:::-;6406:5;6403:35;6393:63;;6452:1;6449;6442:12;6393:63;6340:122;:::o;6468:139::-;6514:5;6552:6;6539:20;6530:29;;6568:33;6595:5;6568:33;:::i;:::-;6468:139;;;;:::o;6613:329::-;6672:6;6721:2;6709:9;6700:7;6696:23;6692:32;6689:119;;;6727:79;;:::i;:::-;6689:119;6847:1;6872:53;6917:7;6908:6;6897:9;6893:22;6872:53;:::i;:::-;6862:63;;6818:117;6613:329;;;;:::o;6948:118::-;7035:24;7053:5;7035:24;:::i;:::-;7030:3;7023:37;6948:118;;:::o;7072:222::-;7165:4;7203:2;7192:9;7188:18;7180:26;;7216:71;7284:1;7273:9;7269:17;7260:6;7216:71;:::i;:::-;7072:222;;;;:::o;7300:474::-;7368:6;7376;7425:2;7413:9;7404:7;7400:23;7396:32;7393:119;;;7431:79;;:::i;:::-;7393:119;7551:1;7576:53;7621:7;7612:6;7601:9;7597:22;7576:53;:::i;:::-;7566:63;;7522:117;7678:2;7704:53;7749:7;7740:6;7729:9;7725:22;7704:53;:::i;:::-;7694:63;;7649:118;7300:474;;;;;:::o;7780:117::-;7889:1;7886;7879:12;7916:552;7973:8;7983:6;8033:3;8026:4;8018:6;8014:17;8010:27;8000:122;;8041:79;;:::i;:::-;8000:122;8154:6;8141:20;8131:30;;8184:18;8176:6;8173:30;8170:117;;;8206:79;;:::i;:::-;8170:117;8320:4;8312:6;8308:17;8296:29;;8374:3;8366:4;8358:6;8354:17;8344:8;8340:32;8337:41;8334:128;;;8381:79;;:::i;:::-;8334:128;7916:552;;;;;:::o;8474:963::-;8571:6;8579;8587;8595;8603;8652:3;8640:9;8631:7;8627:23;8623:33;8620:120;;;8659:79;;:::i;:::-;8620:120;8779:1;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8750:117;8906:2;8932:53;8977:7;8968:6;8957:9;8953:22;8932:53;:::i;:::-;8922:63;;8877:118;9034:2;9060:53;9105:7;9096:6;9085:9;9081:22;9060:53;:::i;:::-;9050:63;;9005:118;9190:2;9179:9;9175:18;9162:32;9221:18;9213:6;9210:30;9207:117;;;9243:79;;:::i;:::-;9207:117;9356:64;9412:7;9403:6;9392:9;9388:22;9356:64;:::i;:::-;9338:82;;;;9133:297;8474:963;;;;;;;;:::o;9443:115::-;9528:23;9545:5;9528:23;:::i;:::-;9523:3;9516:36;9443:115;;:::o;9564:218::-;9655:4;9693:2;9682:9;9678:18;9670:26;;9706:69;9772:1;9761:9;9757:17;9748:6;9706:69;:::i;:::-;9564:218;;;;:::o;9788:118::-;9875:24;9893:5;9875:24;:::i;:::-;9870:3;9863:37;9788:118;;:::o;9912:222::-;10005:4;10043:2;10032:9;10028:18;10020:26;;10056:71;10124:1;10113:9;10109:17;10100:6;10056:71;:::i;:::-;9912:222;;;;:::o;10140:619::-;10217:6;10225;10233;10282:2;10270:9;10261:7;10257:23;10253:32;10250:119;;;10288:79;;:::i;:::-;10250:119;10408:1;10433:53;10478:7;10469:6;10458:9;10454:22;10433:53;:::i;:::-;10423:63;;10379:117;10535:2;10561:53;10606:7;10597:6;10586:9;10582:22;10561:53;:::i;:::-;10551:63;;10506:118;10663:2;10689:53;10734:7;10725:6;10714:9;10710:22;10689:53;:::i;:::-;10679:63;;10634:118;10140:619;;;;;:::o;10765:329::-;10824:6;10873:2;10861:9;10852:7;10848:23;10844:32;10841:119;;;10879:79;;:::i;:::-;10841:119;10999:1;11024:53;11069:7;11060:6;11049:9;11045:22;11024:53;:::i;:::-;11014:63;;10970:117;10765:329;;;;:::o;11100:60::-;11128:3;11149:5;11142:12;;11100:60;;;:::o;11166:142::-;11216:9;11249:53;11267:34;11276:24;11294:5;11276:24;:::i;:::-;11267:34;:::i;:::-;11249:53;:::i;:::-;11236:66;;11166:142;;;:::o;11314:126::-;11364:9;11397:37;11428:5;11397:37;:::i;:::-;11384:50;;11314:126;;;:::o;11446:157::-;11527:9;11560:37;11591:5;11560:37;:::i;:::-;11547:50;;11446:157;;;:::o;11609:193::-;11727:68;11789:5;11727:68;:::i;:::-;11722:3;11715:81;11609:193;;:::o;11808:284::-;11932:4;11970:2;11959:9;11955:18;11947:26;;11983:102;12082:1;12071:9;12067:17;12058:6;11983:102;:::i;:::-;11808:284;;;;:::o;12098:117::-;12207:1;12204;12197:12;12221:308;12283:4;12373:18;12365:6;12362:30;12359:56;;;12395:18;;:::i;:::-;12359:56;12433:29;12455:6;12433:29;:::i;:::-;12425:37;;12517:4;12511;12507:15;12499:23;;12221:308;;;:::o;12535:154::-;12619:6;12614:3;12609;12596:30;12681:1;12672:6;12667:3;12663:16;12656:27;12535:154;;;:::o;12695:412::-;12773:5;12798:66;12814:49;12856:6;12814:49;:::i;:::-;12798:66;:::i;:::-;12789:75;;12887:6;12880:5;12873:21;12925:4;12918:5;12914:16;12963:3;12954:6;12949:3;12945:16;12942:25;12939:112;;;12970:79;;:::i;:::-;12939:112;13060:41;13094:6;13089:3;13084;13060:41;:::i;:::-;12779:328;12695:412;;;;;:::o;13127:340::-;13183:5;13232:3;13225:4;13217:6;13213:17;13209:27;13199:122;;13240:79;;:::i;:::-;13199:122;13357:6;13344:20;13382:79;13457:3;13449:6;13442:4;13434:6;13430:17;13382:79;:::i;:::-;13373:88;;13189:278;13127:340;;;;:::o;13473:509::-;13542:6;13591:2;13579:9;13570:7;13566:23;13562:32;13559:119;;;13597:79;;:::i;:::-;13559:119;13745:1;13734:9;13730:17;13717:31;13775:18;13767:6;13764:30;13761:117;;;13797:79;;:::i;:::-;13761:117;13902:63;13957:7;13948:6;13937:9;13933:22;13902:63;:::i;:::-;13892:73;;13688:287;13473:509;;;;:::o;13988:116::-;14058:21;14073:5;14058:21;:::i;:::-;14051:5;14048:32;14038:60;;14094:1;14091;14084:12;14038:60;13988:116;:::o;14110:133::-;14153:5;14191:6;14178:20;14169:29;;14207:30;14231:5;14207:30;:::i;:::-;14110:133;;;;:::o;14249:468::-;14314:6;14322;14371:2;14359:9;14350:7;14346:23;14342:32;14339:119;;;14377:79;;:::i;:::-;14339:119;14497:1;14522:53;14567:7;14558:6;14547:9;14543:22;14522:53;:::i;:::-;14512:63;;14468:117;14624:2;14650:50;14692:7;14683:6;14672:9;14668:22;14650:50;:::i;:::-;14640:60;;14595:115;14249:468;;;;;:::o;14723:307::-;14784:4;14874:18;14866:6;14863:30;14860:56;;;14896:18;;:::i;:::-;14860:56;14934:29;14956:6;14934:29;:::i;:::-;14926:37;;15018:4;15012;15008:15;15000:23;;14723:307;;;:::o;15036:410::-;15113:5;15138:65;15154:48;15195:6;15154:48;:::i;:::-;15138:65;:::i;:::-;15129:74;;15226:6;15219:5;15212:21;15264:4;15257:5;15253:16;15302:3;15293:6;15288:3;15284:16;15281:25;15278:112;;;15309:79;;:::i;:::-;15278:112;15399:41;15433:6;15428:3;15423;15399:41;:::i;:::-;15119:327;15036:410;;;;;:::o;15465:338::-;15520:5;15569:3;15562:4;15554:6;15550:17;15546:27;15536:122;;15577:79;;:::i;:::-;15536:122;15694:6;15681:20;15719:78;15793:3;15785:6;15778:4;15770:6;15766:17;15719:78;:::i;:::-;15710:87;;15526:277;15465:338;;;;:::o;15809:943::-;15904:6;15912;15920;15928;15977:3;15965:9;15956:7;15952:23;15948:33;15945:120;;;15984:79;;:::i;:::-;15945:120;16104:1;16129:53;16174:7;16165:6;16154:9;16150:22;16129:53;:::i;:::-;16119:63;;16075:117;16231:2;16257:53;16302:7;16293:6;16282:9;16278:22;16257:53;:::i;:::-;16247:63;;16202:118;16359:2;16385:53;16430:7;16421:6;16410:9;16406:22;16385:53;:::i;:::-;16375:63;;16330:118;16515:2;16504:9;16500:18;16487:32;16546:18;16538:6;16535:30;16532:117;;;16568:79;;:::i;:::-;16532:117;16673:62;16727:7;16718:6;16707:9;16703:22;16673:62;:::i;:::-;16663:72;;16458:287;15809:943;;;;;;;:::o;16758:474::-;16826:6;16834;16883:2;16871:9;16862:7;16858:23;16854:32;16851:119;;;16889:79;;:::i;:::-;16851:119;17009:1;17034:53;17079:7;17070:6;17059:9;17055:22;17034:53;:::i;:::-;17024:63;;16980:117;17136:2;17162:53;17207:7;17198:6;17187:9;17183:22;17162:53;:::i;:::-;17152:63;;17107:118;16758:474;;;;;:::o;17238:182::-;17378:34;17374:1;17366:6;17362:14;17355:58;17238:182;:::o;17426:366::-;17568:3;17589:67;17653:2;17648:3;17589:67;:::i;:::-;17582:74;;17665:93;17754:3;17665:93;:::i;:::-;17783:2;17778:3;17774:12;17767:19;;17426:366;;;:::o;17798:419::-;17964:4;18002:2;17991:9;17987:18;17979:26;;18051:9;18045:4;18041:20;18037:1;18026:9;18022:17;18015:47;18079:131;18205:4;18079:131;:::i;:::-;18071:139;;17798:419;;;:::o;18223:180::-;18271:77;18268:1;18261:88;18368:4;18365:1;18358:15;18392:4;18389:1;18382:15;18409:305;18449:3;18468:20;18486:1;18468:20;:::i;:::-;18463:25;;18502:20;18520:1;18502:20;:::i;:::-;18497:25;;18656:1;18588:66;18584:74;18581:1;18578:81;18575:107;;;18662:18;;:::i;:::-;18575:107;18706:1;18703;18699:9;18692:16;;18409:305;;;;:::o;18720:169::-;18860:21;18856:1;18848:6;18844:14;18837:45;18720:169;:::o;18895:366::-;19037:3;19058:67;19122:2;19117:3;19058:67;:::i;:::-;19051:74;;19134:93;19223:3;19134:93;:::i;:::-;19252:2;19247:3;19243:12;19236:19;;18895:366;;;:::o;19267:419::-;19433:4;19471:2;19460:9;19456:18;19448:26;;19520:9;19514:4;19510:20;19506:1;19495:9;19491:17;19484:47;19548:131;19674:4;19548:131;:::i;:::-;19540:139;;19267:419;;;:::o;19692:167::-;19832:19;19828:1;19820:6;19816:14;19809:43;19692:167;:::o;19865:366::-;20007:3;20028:67;20092:2;20087:3;20028:67;:::i;:::-;20021:74;;20104:93;20193:3;20104:93;:::i;:::-;20222:2;20217:3;20213:12;20206:19;;19865:366;;;:::o;20237:419::-;20403:4;20441:2;20430:9;20426:18;20418:26;;20490:9;20484:4;20480:20;20476:1;20465:9;20461:17;20454:47;20518:131;20644:4;20518:131;:::i;:::-;20510:139;;20237:419;;;:::o;20662:180::-;20710:77;20707:1;20700:88;20807:4;20804:1;20797:15;20831:4;20828:1;20821:15;20848:233;20887:3;20910:24;20928:5;20910:24;:::i;:::-;20901:33;;20956:66;20949:5;20946:77;20943:103;;21026:18;;:::i;:::-;20943:103;21073:1;21066:5;21062:13;21055:20;;20848:233;;;:::o;21087:180::-;21135:77;21132:1;21125:88;21232:4;21229:1;21222:15;21256:4;21253:1;21246:15;21273:320;21317:6;21354:1;21348:4;21344:12;21334:22;;21401:1;21395:4;21391:12;21422:18;21412:81;;21478:4;21470:6;21466:17;21456:27;;21412:81;21540:2;21532:6;21529:14;21509:18;21506:38;21503:84;;21559:18;;:::i;:::-;21503:84;21324:269;21273:320;;;:::o;21599:182::-;21739:34;21735:1;21727:6;21723:14;21716:58;21599:182;:::o;21787:366::-;21929:3;21950:67;22014:2;22009:3;21950:67;:::i;:::-;21943:74;;22026:93;22115:3;22026:93;:::i;:::-;22144:2;22139:3;22135:12;22128:19;;21787:366;;;:::o;22159:419::-;22325:4;22363:2;22352:9;22348:18;22340:26;;22412:9;22406:4;22402:20;22398:1;22387:9;22383:17;22376:47;22440:131;22566:4;22440:131;:::i;:::-;22432:139;;22159:419;;;:::o;22584:180::-;22724:32;22720:1;22712:6;22708:14;22701:56;22584:180;:::o;22770:366::-;22912:3;22933:67;22997:2;22992:3;22933:67;:::i;:::-;22926:74;;23009:93;23098:3;23009:93;:::i;:::-;23127:2;23122:3;23118:12;23111:19;;22770:366;;;:::o;23142:419::-;23308:4;23346:2;23335:9;23331:18;23323:26;;23395:9;23389:4;23385:20;23381:1;23370:9;23366:17;23359:47;23423:131;23549:4;23423:131;:::i;:::-;23415:139;;23142:419;;;:::o;23567:181::-;23707:33;23703:1;23695:6;23691:14;23684:57;23567:181;:::o;23754:366::-;23896:3;23917:67;23981:2;23976:3;23917:67;:::i;:::-;23910:74;;23993:93;24082:3;23993:93;:::i;:::-;24111:2;24106:3;24102:12;24095:19;;23754:366;;;:::o;24126:419::-;24292:4;24330:2;24319:9;24315:18;24307:26;;24379:9;24373:4;24369:20;24365:1;24354:9;24350:17;24343:47;24407:131;24533:4;24407:131;:::i;:::-;24399:139;;24126:419;;;:::o;24551:178::-;24691:30;24687:1;24679:6;24675:14;24668:54;24551:178;:::o;24735:366::-;24877:3;24898:67;24962:2;24957:3;24898:67;:::i;:::-;24891:74;;24974:93;25063:3;24974:93;:::i;:::-;25092:2;25087:3;25083:12;25076:19;;24735:366;;;:::o;25107:419::-;25273:4;25311:2;25300:9;25296:18;25288:26;;25360:9;25354:4;25350:20;25346:1;25335:9;25331:17;25324:47;25388:131;25514:4;25388:131;:::i;:::-;25380:139;;25107:419;;;:::o;25532:147::-;25633:11;25670:3;25655:18;;25532:147;;;;:::o;25685:114::-;;:::o;25805:398::-;25964:3;25985:83;26066:1;26061:3;25985:83;:::i;:::-;25978:90;;26077:93;26166:3;26077:93;:::i;:::-;26195:1;26190:3;26186:11;26179:18;;25805:398;;;:::o;26209:379::-;26393:3;26415:147;26558:3;26415:147;:::i;:::-;26408:154;;26579:3;26572:10;;26209:379;;;:::o;26594:174::-;26734:26;26730:1;26722:6;26718:14;26711:50;26594:174;:::o;26774:366::-;26916:3;26937:67;27001:2;26996:3;26937:67;:::i;:::-;26930:74;;27013:93;27102:3;27013:93;:::i;:::-;27131:2;27126:3;27122:12;27115:19;;26774:366;;;:::o;27146:419::-;27312:4;27350:2;27339:9;27335:18;27327:26;;27399:9;27393:4;27389:20;27385:1;27374:9;27370:17;27363:47;27427:131;27553:4;27427:131;:::i;:::-;27419:139;;27146:419;;;:::o;27571:141::-;27620:4;27643:3;27635:11;;27666:3;27663:1;27656:14;27700:4;27697:1;27687:18;27679:26;;27571:141;;;:::o;27718:93::-;27755:6;27802:2;27797;27790:5;27786:14;27782:23;27772:33;;27718:93;;;:::o;27817:107::-;27861:8;27911:5;27905:4;27901:16;27880:37;;27817:107;;;;:::o;27930:393::-;27999:6;28049:1;28037:10;28033:18;28072:97;28102:66;28091:9;28072:97;:::i;:::-;28190:39;28220:8;28209:9;28190:39;:::i;:::-;28178:51;;28262:4;28258:9;28251:5;28247:21;28238:30;;28311:4;28301:8;28297:19;28290:5;28287:30;28277:40;;28006:317;;27930:393;;;;;:::o;28329:142::-;28379:9;28412:53;28430:34;28439:24;28457:5;28439:24;:::i;:::-;28430:34;:::i;:::-;28412:53;:::i;:::-;28399:66;;28329:142;;;:::o;28477:75::-;28520:3;28541:5;28534:12;;28477:75;;;:::o;28558:269::-;28668:39;28699:7;28668:39;:::i;:::-;28729:91;28778:41;28802:16;28778:41;:::i;:::-;28770:6;28763:4;28757:11;28729:91;:::i;:::-;28723:4;28716:105;28634:193;28558:269;;;:::o;28833:73::-;28878:3;28833:73;:::o;28912:189::-;28989:32;;:::i;:::-;29030:65;29088:6;29080;29074:4;29030:65;:::i;:::-;28965:136;28912:189;;:::o;29107:186::-;29167:120;29184:3;29177:5;29174:14;29167:120;;;29238:39;29275:1;29268:5;29238:39;:::i;:::-;29211:1;29204:5;29200:13;29191:22;;29167:120;;;29107:186;;:::o;29299:543::-;29400:2;29395:3;29392:11;29389:446;;;29434:38;29466:5;29434:38;:::i;:::-;29518:29;29536:10;29518:29;:::i;:::-;29508:8;29504:44;29701:2;29689:10;29686:18;29683:49;;;29722:8;29707:23;;29683:49;29745:80;29801:22;29819:3;29801:22;:::i;:::-;29791:8;29787:37;29774:11;29745:80;:::i;:::-;29404:431;;29389:446;29299:543;;;:::o;29848:117::-;29902:8;29952:5;29946:4;29942:16;29921:37;;29848:117;;;;:::o;29971:169::-;30015:6;30048:51;30096:1;30092:6;30084:5;30081:1;30077:13;30048:51;:::i;:::-;30044:56;30129:4;30123;30119:15;30109:25;;30022:118;29971:169;;;;:::o;30145:295::-;30221:4;30367:29;30392:3;30386:4;30367:29;:::i;:::-;30359:37;;30429:3;30426:1;30422:11;30416:4;30413:21;30405:29;;30145:295;;;;:::o;30445:1395::-;30562:37;30595:3;30562:37;:::i;:::-;30664:18;30656:6;30653:30;30650:56;;;30686:18;;:::i;:::-;30650:56;30730:38;30762:4;30756:11;30730:38;:::i;:::-;30815:67;30875:6;30867;30861:4;30815:67;:::i;:::-;30909:1;30933:4;30920:17;;30965:2;30957:6;30954:14;30982:1;30977:618;;;;31639:1;31656:6;31653:77;;;31705:9;31700:3;31696:19;31690:26;31681:35;;31653:77;31756:67;31816:6;31809:5;31756:67;:::i;:::-;31750:4;31743:81;31612:222;30947:887;;30977:618;31029:4;31025:9;31017:6;31013:22;31063:37;31095:4;31063:37;:::i;:::-;31122:1;31136:208;31150:7;31147:1;31144:14;31136:208;;;31229:9;31224:3;31220:19;31214:26;31206:6;31199:42;31280:1;31272:6;31268:14;31258:24;;31327:2;31316:9;31312:18;31299:31;;31173:4;31170:1;31166:12;31161:17;;31136:208;;;31372:6;31363:7;31360:19;31357:179;;;31430:9;31425:3;31421:19;31415:26;31473:48;31515:4;31507:6;31503:17;31492:9;31473:48;:::i;:::-;31465:6;31458:64;31380:156;31357:179;31582:1;31578;31570:6;31566:14;31562:22;31556:4;31549:36;30984:611;;;30947:887;;30537:1303;;;30445:1395;;:::o;31846:180::-;31986:32;31982:1;31974:6;31970:14;31963:56;31846:180;:::o;32032:366::-;32174:3;32195:67;32259:2;32254:3;32195:67;:::i;:::-;32188:74;;32271:93;32360:3;32271:93;:::i;:::-;32389:2;32384:3;32380:12;32373:19;;32032:366;;;:::o;32404:419::-;32570:4;32608:2;32597:9;32593:18;32585:26;;32657:9;32651:4;32647:20;32643:1;32632:9;32628:17;32621:47;32685:131;32811:4;32685:131;:::i;:::-;32677:139;;32404:419;;;:::o;32829:182::-;32969:34;32965:1;32957:6;32953:14;32946:58;32829:182;:::o;33017:366::-;33159:3;33180:67;33244:2;33239:3;33180:67;:::i;:::-;33173:74;;33256:93;33345:3;33256:93;:::i;:::-;33374:2;33369:3;33365:12;33358:19;;33017:366;;;:::o;33389:419::-;33555:4;33593:2;33582:9;33578:18;33570:26;;33642:9;33636:4;33632:20;33628:1;33617:9;33613:17;33606:47;33670:131;33796:4;33670:131;:::i;:::-;33662:139;;33389:419;;;:::o;33814:175::-;33954:27;33950:1;33942:6;33938:14;33931:51;33814:175;:::o;33995:366::-;34137:3;34158:67;34222:2;34217:3;34158:67;:::i;:::-;34151:74;;34234:93;34323:3;34234:93;:::i;:::-;34352:2;34347:3;34343:12;34336:19;;33995:366;;;:::o;34367:419::-;34533:4;34571:2;34560:9;34556:18;34548:26;;34620:9;34614:4;34610:20;34606:1;34595:9;34591:17;34584:47;34648:131;34774:4;34648:131;:::i;:::-;34640:139;;34367:419;;;:::o;34792:179::-;34932:31;34928:1;34920:6;34916:14;34909:55;34792:179;:::o;34977:366::-;35119:3;35140:67;35204:2;35199:3;35140:67;:::i;:::-;35133:74;;35216:93;35305:3;35216:93;:::i;:::-;35334:2;35329:3;35325:12;35318:19;;34977:366;;;:::o;35349:419::-;35515:4;35553:2;35542:9;35538:18;35530:26;;35602:9;35596:4;35592:20;35588:1;35577:9;35573:17;35566:47;35630:131;35756:4;35630:131;:::i;:::-;35622:139;;35349:419;;;:::o;35774:148::-;35876:11;35913:3;35898:18;;35774:148;;;;:::o;35952:874::-;36055:3;36092:5;36086:12;36121:36;36147:9;36121:36;:::i;:::-;36173:89;36255:6;36250:3;36173:89;:::i;:::-;36166:96;;36293:1;36282:9;36278:17;36309:1;36304:166;;;;36484:1;36479:341;;;;36271:549;;36304:166;36388:4;36384:9;36373;36369:25;36364:3;36357:38;36450:6;36443:14;36436:22;36428:6;36424:35;36419:3;36415:45;36408:52;;36304:166;;36479:341;36546:38;36578:5;36546:38;:::i;:::-;36606:1;36620:154;36634:6;36631:1;36628:13;36620:154;;;36708:7;36702:14;36698:1;36693:3;36689:11;36682:35;36758:1;36749:7;36745:15;36734:26;;36656:4;36653:1;36649:12;36644:17;;36620:154;;;36803:6;36798:3;36794:16;36787:23;;36486:334;;36271:549;;36059:767;;35952:874;;;;:::o;36832:162::-;36972:14;36968:1;36960:6;36956:14;36949:38;36832:162;:::o;37000:402::-;37160:3;37181:85;37263:2;37258:3;37181:85;:::i;:::-;37174:92;;37275:93;37364:3;37275:93;:::i;:::-;37393:2;37388:3;37384:12;37377:19;;37000:402;;;:::o;37408:535::-;37638:3;37660:92;37748:3;37739:6;37660:92;:::i;:::-;37653:99;;37769:148;37913:3;37769:148;:::i;:::-;37762:155;;37934:3;37927:10;;37408:535;;;;:::o;37949:377::-;38055:3;38083:39;38116:5;38083:39;:::i;:::-;38138:89;38220:6;38215:3;38138:89;:::i;:::-;38131:96;;38236:52;38281:6;38276:3;38269:4;38262:5;38258:16;38236:52;:::i;:::-;38313:6;38308:3;38304:16;38297:23;;38059:267;37949:377;;;;:::o;38332:155::-;38472:7;38468:1;38460:6;38456:14;38449:31;38332:155;:::o;38493:400::-;38653:3;38674:84;38756:1;38751:3;38674:84;:::i;:::-;38667:91;;38767:93;38856:3;38767:93;:::i;:::-;38885:1;38880:3;38876:11;38869:18;;38493:400;;;:::o;38899:695::-;39177:3;39199:92;39287:3;39278:6;39199:92;:::i;:::-;39192:99;;39308:95;39399:3;39390:6;39308:95;:::i;:::-;39301:102;;39420:148;39564:3;39420:148;:::i;:::-;39413:155;;39585:3;39578:10;;38899:695;;;;;:::o;39600:163::-;39740:15;39736:1;39728:6;39724:14;39717:39;39600:163;:::o;39769:402::-;39929:3;39950:85;40032:2;40027:3;39950:85;:::i;:::-;39943:92;;40044:93;40133:3;40044:93;:::i;:::-;40162:2;40157:3;40153:12;40146:19;;39769:402;;;:::o;40177:535::-;40407:3;40429:92;40517:3;40508:6;40429:92;:::i;:::-;40422:99;;40538:148;40682:3;40538:148;:::i;:::-;40531:155;;40703:3;40696:10;;40177:535;;;;:::o;40718:182::-;40858:34;40854:1;40846:6;40842:14;40835:58;40718:182;:::o;40906:366::-;41048:3;41069:67;41133:2;41128:3;41069:67;:::i;:::-;41062:74;;41145:93;41234:3;41145:93;:::i;:::-;41263:2;41258:3;41254:12;41247:19;;40906:366;;;:::o;41278:419::-;41444:4;41482:2;41471:9;41467:18;41459:26;;41531:9;41525:4;41521:20;41517:1;41506:9;41502:17;41495:47;41559:131;41685:4;41559:131;:::i;:::-;41551:139;;41278:419;;;:::o;41703:180::-;41751:77;41748:1;41741:88;41848:4;41845:1;41838:15;41872:4;41869:1;41862:15;41889:185;41929:1;41946:20;41964:1;41946:20;:::i;:::-;41941:25;;41980:20;41998:1;41980:20;:::i;:::-;41975:25;;42019:1;42009:35;;42024:18;;:::i;:::-;42009:35;42066:1;42063;42059:9;42054:14;;41889:185;;;;:::o;42080:332::-;42201:4;42239:2;42228:9;42224:18;42216:26;;42252:71;42320:1;42309:9;42305:17;42296:6;42252:71;:::i;:::-;42333:72;42401:2;42390:9;42386:18;42377:6;42333:72;:::i;:::-;42080:332;;;;;:::o;42418:137::-;42472:5;42503:6;42497:13;42488:22;;42519:30;42543:5;42519:30;:::i;:::-;42418:137;;;;:::o;42561:345::-;42628:6;42677:2;42665:9;42656:7;42652:23;42648:32;42645:119;;;42683:79;;:::i;:::-;42645:119;42803:1;42828:61;42881:7;42872:6;42861:9;42857:22;42828:61;:::i;:::-;42818:71;;42774:125;42561:345;;;;:::o;42912:182::-;43052:34;43048:1;43040:6;43036:14;43029:58;42912:182;:::o;43100:366::-;43242:3;43263:67;43327:2;43322:3;43263:67;:::i;:::-;43256:74;;43339:93;43428:3;43339:93;:::i;:::-;43457:2;43452:3;43448:12;43441:19;;43100:366;;;:::o;43472:419::-;43638:4;43676:2;43665:9;43661:18;43653:26;;43725:9;43719:4;43715:20;43711:1;43700:9;43696:17;43689:47;43753:131;43879:4;43753:131;:::i;:::-;43745:139;;43472:419;;;:::o;43897:178::-;44037:30;44033:1;44025:6;44021:14;44014:54;43897:178;:::o;44081:366::-;44223:3;44244:67;44308:2;44303:3;44244:67;:::i;:::-;44237:74;;44320:93;44409:3;44320:93;:::i;:::-;44438:2;44433:3;44429:12;44422:19;;44081:366;;;:::o;44453:419::-;44619:4;44657:2;44646:9;44642:18;44634:26;;44706:9;44700:4;44696:20;44692:1;44681:9;44677:17;44670:47;44734:131;44860:4;44734:131;:::i;:::-;44726:139;;44453:419;;;:::o;44878:177::-;45018:29;45014:1;45006:6;45002:14;44995:53;44878:177;:::o;45061:366::-;45203:3;45224:67;45288:2;45283:3;45224:67;:::i;:::-;45217:74;;45300:93;45389:3;45300:93;:::i;:::-;45418:2;45413:3;45409:12;45402:19;;45061:366;;;:::o;45433:419::-;45599:4;45637:2;45626:9;45622:18;45614:26;;45686:9;45680:4;45676:20;45672:1;45661:9;45657:17;45650:47;45714:131;45840:4;45714:131;:::i;:::-;45706:139;;45433:419;;;:::o;45858:191::-;45898:4;45918:20;45936:1;45918:20;:::i;:::-;45913:25;;45952:20;45970:1;45952:20;:::i;:::-;45947:25;;45991:1;45988;45985:8;45982:34;;;45996:18;;:::i;:::-;45982:34;46041:1;46038;46034:9;46026:17;;45858:191;;;;:::o;46055:176::-;46195:28;46191:1;46183:6;46179:14;46172:52;46055:176;:::o;46237:366::-;46379:3;46400:67;46464:2;46459:3;46400:67;:::i;:::-;46393:74;;46476:93;46565:3;46476:93;:::i;:::-;46594:2;46589:3;46585:12;46578:19;;46237:366;;;:::o;46609:419::-;46775:4;46813:2;46802:9;46798:18;46790:26;;46862:9;46856:4;46852:20;46848:1;46837:9;46833:17;46826:47;46890:131;47016:4;46890:131;:::i;:::-;46882:139;;46609:419;;;:::o;47034:176::-;47066:1;47083:20;47101:1;47083:20;:::i;:::-;47078:25;;47117:20;47135:1;47117:20;:::i;:::-;47112:25;;47156:1;47146:35;;47161:18;;:::i;:::-;47146:35;47202:1;47199;47195:9;47190:14;;47034:176;;;;:::o;47216:98::-;47267:6;47301:5;47295:12;47285:22;;47216:98;;;:::o;47320:168::-;47403:11;47437:6;47432:3;47425:19;47477:4;47472:3;47468:14;47453:29;;47320:168;;;;:::o;47494:360::-;47580:3;47608:38;47640:5;47608:38;:::i;:::-;47662:70;47725:6;47720:3;47662:70;:::i;:::-;47655:77;;47741:52;47786:6;47781:3;47774:4;47767:5;47763:16;47741:52;:::i;:::-;47818:29;47840:6;47818:29;:::i;:::-;47813:3;47809:39;47802:46;;47584:270;47494:360;;;;:::o;47860:640::-;48055:4;48093:3;48082:9;48078:19;48070:27;;48107:71;48175:1;48164:9;48160:17;48151:6;48107:71;:::i;:::-;48188:72;48256:2;48245:9;48241:18;48232:6;48188:72;:::i;:::-;48270;48338:2;48327:9;48323:18;48314:6;48270:72;:::i;:::-;48389:9;48383:4;48379:20;48374:2;48363:9;48359:18;48352:48;48417:76;48488:4;48479:6;48417:76;:::i;:::-;48409:84;;47860:640;;;;;;;:::o;48506:141::-;48562:5;48593:6;48587:13;48578:22;;48609:32;48635:5;48609:32;:::i;:::-;48506:141;;;;:::o;48653:349::-;48722:6;48771:2;48759:9;48750:7;48746:23;48742:32;48739:119;;;48777:79;;:::i;:::-;48739:119;48897:1;48922:63;48977:7;48968:6;48957:9;48953:22;48922:63;:::i;:::-;48912:73;;48868:127;48653:349;;;;:::o;49008:182::-;49148:34;49144:1;49136:6;49132:14;49125:58;49008:182;:::o;49196:366::-;49338:3;49359:67;49423:2;49418:3;49359:67;:::i;:::-;49352:74;;49435:93;49524:3;49435:93;:::i;:::-;49553:2;49548:3;49544:12;49537:19;;49196:366;;;:::o;49568:419::-;49734:4;49772:2;49761:9;49757:18;49749:26;;49821:9;49815:4;49811:20;49807:1;49796:9;49792:17;49785:47;49849:131;49975:4;49849:131;:::i;:::-;49841:139;;49568:419;;;:::o;49993:178::-;50133:30;50129:1;50121:6;50117:14;50110:54;49993:178;:::o;50177:366::-;50319:3;50340:67;50404:2;50399:3;50340:67;:::i;:::-;50333:74;;50416:93;50505:3;50416:93;:::i;:::-;50534:2;50529:3;50525:12;50518:19;;50177:366;;;:::o;50549:419::-;50715:4;50753:2;50742:9;50738:18;50730:26;;50802:9;50796:4;50792:20;50788:1;50777:9;50773:17;50766:47;50830:131;50956:4;50830:131;:::i;:::-;50822:139;;50549:419;;;:::o

Swarm Source

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