ETH Price: $3,591.21 (-2.80%)

Token

ERC-20: OmniToadz (omnitdz)
 

Overview

Max Total Supply

0 omnitdz

Holders

323

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 omnitdz
0x5e6e6b14dfb15f1ea75e2f4695bdef69d198574a
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:
OmniToadz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicense

pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(
        uint16 _version,
        uint16 _chainId,
        uint256 _configType,
        bytes calldata _config
    ) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress)
        external;
}

pragma solidity >=0.5.0;

interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(
        uint16 _dstChainId,
        bytes calldata _destination,
        bytes calldata _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes calldata _adapterParams
    ) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        address _dstAddress,
        uint64 _nonce,
        uint256 _gasLimit,
        bytes calldata _payload
    ) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress)
        external
        view
        returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(
        uint16 _dstChainId,
        address _userApplication,
        bytes calldata _payload,
        bool _payInZRO,
        bytes calldata _adapterParam
    ) external view returns (uint256 nativeFee, uint256 zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        bytes calldata _payload
    ) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(
        uint16 _version,
        uint16 _chainId,
        address _userApplication,
        uint256 _configType
    ) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication)
        external
        view
        returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication)
        external
        view
        returns (uint16);
}

pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external;
}


pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

library Address {
    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;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

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

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

interface IERC165 {

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

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

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

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

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

    function approve(address to, uint256 tokenId) external;

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

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

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

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

pragma solidity ^0.8.0;

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

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

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _operatorApprovals[owner][operator];
    }

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

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

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

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");

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

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

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

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try
                IERC721Receiver(to).onERC721Received(
                    _msgSender(),
                    from,
                    tokenId,
                    _data
                )
            returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(
                        "ERC721: transfer to non ERC721Receiver implementer"
                    );
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.6;

abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {
    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint256 payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint256 => FailedMessages)))
        public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;

    event MessageFailed(
        uint16 _srcChainId,
        bytes _srcAddress,
        uint64 _nonce,
        bytes _payload
    );

    function lzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(
            _srcAddress.length == trustedRemoteLookup[_srcChainId].length &&
                keccak256(_srcAddress) ==
                keccak256(trustedRemoteLookup[_srcChainId]),
            "NonblockingReceiver: invalid source sending contract"
        );

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(
                _payload.length,
                keccak256(_payload)
            );
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) public {
        // only internal transaction
        require(
            msg.sender == address(this),
            "NonblockingReceiver: caller must be Bridge."
        );

        // handle incoming message
        _LzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    // abstract function
    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal virtual;

    function _lzSend(
        uint16 _dstChainId,
        bytes memory _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes memory _txParam
    ) internal {
        endpoint.send{value: msg.value}(
            _dstChainId,
            trustedRemoteLookup[_dstChainId],
            _payload,
            _refundAddress,
            _zroPaymentAddress,
            _txParam
        );
    }

    function retryMessage(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][
            _srcAddress
        ][_nonce];
        require(
            failedMsg.payloadHash != bytes32(0),
            "NonblockingReceiver: no stored message"
        );
        require(
            _payload.length == failedMsg.payloadLength &&
                keccak256(_payload) == failedMsg.payloadHash,
            "LayerZero: invalid payload"
        );
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote)
        external
        onlyOwner
    {
        trustedRemoteLookup[_chainId] = _trustedRemote;
    }
}

pragma solidity ^0.8.7;

contract OmniToadz is Ownable, ERC721, NonblockingReceiver {
    address public _owner;
    string private baseURI;
    uint256 nextTokenId = 0;
    uint256 MAX_NETWORK_MINT = 0;
    uint256 private price = 0;

    uint256 gasForDestinationLzReceive = 350000;

    constructor(string memory baseURI_, address _layerZeroEndpoint, uint256 _nextTokenId, uint256 _maxTokenId, uint256 _price)
        ERC721("OmniToadz", "omnitdz")
    {
        _owner = msg.sender;
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        baseURI = baseURI_;
        nextTokenId = _nextTokenId;
        MAX_NETWORK_MINT = _maxTokenId;
        price = _price;
    }

    function mint(uint8 numTokens) external payable {
        require(msg.value >= numTokens * price, "OmniToadz: msg.value too low");
        require(numTokens < 3, "OmniToadz: Max 2 NFTs per transaction");
        require(
            nextTokenId + numTokens <= MAX_NETWORK_MINT,
            "OmniToadz: Mint exceeds supply for this network"
        );
        // require(balanceOf(msg.sender) + numTokens <= MAX_OWNERSHIP, "OmniToadz: Max mint per wallet amount reached");
        for (uint8 i = 0; i < numTokens; i++) {
            _safeMint(msg.sender, ++nextTokenId);
        }
    }

    function traverseChains(uint16 _chainId, uint256 tokenId) public payable {
        require(
            msg.sender == ownerOf(tokenId),
            "You must own the token to traverse"
        );
        require(
            trustedRemoteLookup[_chainId].length > 0,
            "This chain is currently unavailable for travel"
        );

        // burn NFT, eliminating it from circulation on src chain
        _burn(tokenId);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, tokenId);

        // encode adapterParams to specify more gas for the destination
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(
            version,
            gasForDestinationLzReceive
        );

        // get the fees we need to pay to LayerZero + Relayer to cover message delivery
        // you will be refunded for extra gas paid
        (uint256 messageFee, ) = endpoint.estimateFees(
            _chainId,
            address(this),
            payload,
            false,
            adapterParams
        );

        require(
            msg.value >= messageFee,
            "OmniToadz: msg.value not enough to cover messageFee. Send gas for message fees"
        );

        endpoint.send{value: msg.value}(
            _chainId, // destination chainId
            trustedRemoteLookup[_chainId], // destination address of nft contract
            payload, // abi.encoded()'ed bytes
            payable(msg.sender), // refund address
            address(0x0), // 'zroPaymentAddress' unused for this
            adapterParams // txParameters
        );
    }

    function setBaseURI(string memory URI) external onlyOwner {
        baseURI = URI;
    }

    function withdraw(uint256 amt) external onlyOwner {
        (bool sent, ) = payable(_owner).call{value: amt}("");
        require(sent, "OmniToadz: Failed to withdraw funds");
    }

    function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner {
        gasForDestinationLzReceive = newVal;
    }

    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal override {
        // decode
        (address toAddr, uint256 tokenId) = abi.decode(
            _payload,
            (address, uint256)
        );

        // mint the tokens back into existence on destination chain
        _safeMint(toAddr, tokenId);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"},{"internalType":"uint256","name":"_nextTokenId","type":"uint256"},{"internalType":"uint256","name":"_maxTokenId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","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":[{"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":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600c556000600d556000600e5562055730600f553480156200002757600080fd5b50604051620054c6380380620054c683398181016040528101906200004d9190620003f0565b6040518060400160405280600981526020017f4f6d6e69546f61647a00000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f6f6d6e6974647a00000000000000000000000000000000000000000000000000815250620000d9620000cd620001c860201b60201c565b620001d060201b60201c565b8160019080519060200190620000f192919062000294565b5080600290805190602001906200010a92919062000294565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600b9080519060200190620001a792919062000294565b5082600c8190555081600d8190555080600e8190555050505050506200068d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a2906200056a565b90600052602060002090601f016020900481019282620002c6576000855562000312565b82601f10620002e157805160ff191683800117855562000312565b8280016001018555821562000312579182015b8281111562000311578251825591602001919060010190620002f4565b5b50905062000321919062000325565b5090565b5b808211156200034057600081600090555060010162000326565b5090565b60006200035b6200035584620004c0565b62000497565b9050828152602081018484840111156200037a576200037962000639565b5b6200038784828562000534565b509392505050565b600081519050620003a08162000659565b92915050565b600082601f830112620003be57620003bd62000634565b5b8151620003d084826020860162000344565b91505092915050565b600081519050620003ea8162000673565b92915050565b600080600080600060a086880312156200040f576200040e62000643565b5b600086015167ffffffffffffffff81111562000430576200042f6200063e565b5b6200043e88828901620003a6565b955050602062000451888289016200038f565b94505060406200046488828901620003d9565b93505060606200047788828901620003d9565b92505060806200048a88828901620003d9565b9150509295509295909350565b6000620004a3620004b6565b9050620004b18282620005a0565b919050565b6000604051905090565b600067ffffffffffffffff821115620004de57620004dd62000605565b5b620004e98262000648565b9050602081019050919050565b600062000503826200050a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200055457808201518184015260208101905062000537565b8381111562000564576000848401525b50505050565b600060028204905060018216806200058357607f821691505b602082108114156200059a5762000599620005d6565b5b50919050565b620005ab8262000648565b810181811067ffffffffffffffff82111715620005cd57620005cc62000605565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066481620004f6565b81146200067057600080fd5b50565b6200067e816200052a565b81146200068a57600080fd5b50565b614e29806200069d6000396000f3fe6080604052600436106101b65760003560e01c80637533d788116100ec578063b88d4fde1161008a578063d1deba1f11610064578063d1deba1f146105fc578063e985e9c514610618578063eb8d72b714610655578063f2fde38b1461067e576101b6565b8063b88d4fde1461057a578063c87b56dd146105a3578063cf89fa03146105e0576101b6565b8063943fb872116100c6578063943fb872146104d257806395d89b41146104fb578063a22cb46514610526578063b2bdfa7b1461054f576101b6565b80637533d7881461042c5780638da5cb5b146104695780638ee7491214610494576101b6565b80632e1a7d4d116101595780636352211e116101335780636352211e1461037f5780636ecd2306146103bc57806370a08231146103d8578063715018a614610415576101b6565b80632e1a7d4d1461030457806342842e0e1461032d57806355f804b314610356576101b6565b8063081812fc11610195578063081812fc1461024c578063095ea7b3146102895780631c37a822146102b257806323b872dd146102db576101b6565b80621d3567146101bb57806301ffc9a7146101e457806306fdde0314610221575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd91906131fc565b6106a7565b005b3480156101f057600080fd5b5061020b60048036038101906102069190612fb9565b6108e9565b6040516102189190613b1e565b60405180910390f35b34801561022d57600080fd5b506102366109cb565b6040516102439190613b5b565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e91906132db565b610a5d565b6040516102809190613a8e565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612f79565b610ae2565b005b3480156102be57600080fd5b506102d960048036038101906102d491906131fc565b610bfa565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190612e63565b610c7a565b005b34801561031057600080fd5b5061032b600480360381019061032691906132db565b610cda565b005b34801561033957600080fd5b50610354600480360381019061034f9190612e63565b610e28565b005b34801561036257600080fd5b5061037d60048036038101906103789190613013565b610e48565b005b34801561038b57600080fd5b506103a660048036038101906103a191906132db565b610ede565b6040516103b39190613a8e565b60405180910390f35b6103d660048036038101906103d19190613348565b610f90565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612db6565b6110c4565b60405161040c919061403c565b60405180910390f35b34801561042157600080fd5b5061042a61117c565b005b34801561043857600080fd5b50610453600480360381019061044e919061305c565b611204565b6040516104609190613b39565b60405180910390f35b34801561047557600080fd5b5061047e6112a4565b60405161048b9190613a8e565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906130e9565b6112cd565b6040516104c9929190614057565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906132db565b611321565b005b34801561050757600080fd5b506105106113a7565b60405161051d9190613b5b565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612f39565b611439565b005b34801561055b57600080fd5b5061056461144f565b6040516105719190613a8e565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612eb6565b611475565b005b3480156105af57600080fd5b506105ca60048036038101906105c591906132db565b6114d7565b6040516105d79190613b5b565b60405180910390f35b6105fa60048036038101906105f5919061329b565b61157e565b005b61061660048036038101906106119190613158565b611871565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612e23565b611a11565b60405161064c9190613b1e565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190613089565b611aa5565b005b34801561068a57600080fd5b506106a560048036038101906106a09190612db6565b611b51565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070157600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461072790614380565b9050835114801561076d5750600960008561ffff1661ffff16815260200190815260200160002060405161075b9190613a12565b60405180910390208380519060200120145b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390613d9d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016107eb9493929190613f73565b600060405180830381600087803b15801561080557600080fd5b505af1925050508015610816575060015b6108e2576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161086091906139fb565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108d59493929190613f73565b60405180910390a16108e3565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c457506109c382611c49565b5b9050919050565b6060600180546109da90614380565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0690614380565b8015610a535780601f10610a2857610100808354040283529160200191610a53565b820191906000526020600020905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b6000610a6882611cb3565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613d3d565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aed82610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613e1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7d611d1f565b73ffffffffffffffffffffffffffffffffffffffff161480610bac5750610bab81610ba6611d1f565b611a11565b5b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613c7d565b60405180910390fd5b610bf58383611d27565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90613cfd565b60405180910390fd5b610c7484848484611de0565b50505050565b610c8b610c85611d1f565b82611e0d565b610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613e3d565b60405180910390fd5b610cd5838383611eeb565b505050565b610ce2611d1f565b73ffffffffffffffffffffffffffffffffffffffff16610d006112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613d7d565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d9e90613a4d565b60006040518083038185875af1925050503d8060008114610ddb576040519150601f19603f3d011682016040523d82523d6000602084013e610de0565b606091505b5050905080610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613dbd565b60405180910390fd5b5050565b610e4383838360405180602001604052806000815250611475565b505050565b610e50611d1f565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613d7d565b60405180910390fd5b80600b9080519060200190610eda929190612a85565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613cbd565b60405180910390fd5b80915050919050565b600e548160ff16610fa191906141f1565b341015610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613cdd565b60405180910390fd5b60038160ff1610611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613e9d565b60405180910390fd5b600d548160ff16600c5461103d919061416a565b111561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590613d5d565b60405180910390fd5b60005b8160ff168160ff1610156110c0576110ad33600c600081546110a2906143e3565b919050819055612147565b80806110b89061442c565b915050611081565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90613c9d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611184611d1f565b73ffffffffffffffffffffffffffffffffffffffff166111a26112a4565b73ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ef90613d7d565b60405180910390fd5b6112026000612165565b565b6009602052806000526040600020600091509050805461122390614380565b80601f016020809104026020016040519081016040528092919081815260200182805461124f90614380565b801561129c5780601f106112715761010080835404028352916020019161129c565b820191906000526020600020905b81548152906001019060200180831161127f57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b611329611d1f565b73ffffffffffffffffffffffffffffffffffffffff166113476112a4565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490613d7d565b60405180910390fd5b80600f8190555050565b6060600280546113b690614380565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290614380565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b5050505050905090565b61144b611444611d1f565b8383612229565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611486611480611d1f565b83611e0d565b6114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613e3d565b60405180910390fd5b6114d184848484612396565b50505050565b60606114e282611cb3565b611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151890613dfd565b60405180910390fd5b600061152b6123f2565b9050600081511161154b5760405180602001604052806000815250611576565b8061155584612484565b604051602001611566929190613a29565b6040516020818303038152906040525b915050919050565b61158781610ede565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90613c3d565b60405180910390fd5b6000600960008461ffff1661ffff168152602001908152602001600020805461161c90614380565b90501161165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590613bfd565b60405180910390fd5b611667816125e5565b6000338260405160200161167c929190613af5565b6040516020818303038152906040529050600060019050600081600f546040516020016116aa929190613a62565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b8152600401611721959493929190613ebd565b604080518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117709190613308565b509050803410156117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90613e7d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b815260040161183796959493929190613fc6565b6000604051808303818588803b15801561185057600080fd5b505af1158015611864573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161189c91906139fb565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b81600101541415611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890613e5d565b60405180910390fd5b8060000154838390501480156119415750806001015483836040516119379291906139e2565b6040518091039020145b611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613c1d565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b81526004016119d7959493929190613f1e565b600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aad611d1f565b73ffffffffffffffffffffffffffffffffffffffff16611acb6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890613d7d565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b4b929190612b0b565b50505050565b611b59611d1f565b73ffffffffffffffffffffffffffffffffffffffff16611b776112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490613d7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613b9d565b60405180910390fd5b611c4681612165565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d9a83610ede565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611df79190612de3565b91509150611e058282612147565b505050505050565b6000611e1882611cb3565b611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613c5d565b60405180910390fd5b6000611e6283610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ed157508373ffffffffffffffffffffffffffffffffffffffff16611eb984610a5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ee25750611ee18185611a11565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f0b82610ede565b73ffffffffffffffffffffffffffffffffffffffff1614611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613ddd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613bbd565b60405180910390fd5b611fdc8383836126f6565b611fe7600082611d27565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612037919061424b565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208e919061416a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121618282604051806020016040528060008152506126fb565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228f90613bdd565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123899190613b1e565b60405180910390a3505050565b6123a1848484611eeb565b6123ad84848484612756565b6123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390613b7d565b60405180910390fd5b50505050565b6060600b805461240190614380565b80601f016020809104026020016040519081016040528092919081815260200182805461242d90614380565b801561247a5780601f1061244f5761010080835404028352916020019161247a565b820191906000526020600020905b81548152906001019060200180831161245d57829003601f168201915b5050505050905090565b606060008214156124cc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125e0565b600082905060005b600082146124fe5780806124e7906143e3565b915050600a826124f791906141c0565b91506124d4565b60008167ffffffffffffffff81111561251a5761251961455f565b5b6040519080825280601f01601f19166020018201604052801561254c5781602001600182028036833780820191505090505b5090505b600085146125d957600182612565919061424b565b9150600a856125749190614472565b6030612580919061416a565b60f81b81838151811061259657612595614530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125d291906141c0565b9450612550565b8093505050505b919050565b60006125f082610ede565b90506125fe816000846126f6565b612609600083611d27565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612659919061424b565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b61270583836128ed565b6127126000848484612756565b612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274890613b7d565b60405180910390fd5b505050565b60006127778473ffffffffffffffffffffffffffffffffffffffff16612a72565b156128e0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a0611d1f565b8786866040518563ffffffff1660e01b81526004016127c29493929190613aa9565b602060405180830381600087803b1580156127dc57600080fd5b505af192505050801561280d57506040513d601f19601f8201168201806040525081019061280a9190612fe6565b60015b612890573d806000811461283d576040519150601f19603f3d011682016040523d82523d6000602084013e612842565b606091505b50600081511415612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90613b7d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128e5565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561295d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295490613d1d565b60405180910390fd5b612969600083836126f6565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b9919061416a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a9190614380565b90600052602060002090601f016020900481019282612ab35760008555612afa565b82601f10612acc57805160ff1916838001178555612afa565b82800160010185558215612afa579182015b82811115612af9578251825591602001919060010190612ade565b5b509050612b079190612b91565b5090565b828054612b1790614380565b90600052602060002090601f016020900481019282612b395760008555612b80565b82601f10612b5257803560ff1916838001178555612b80565b82800160010185558215612b80579182015b82811115612b7f578235825591602001919060010190612b64565b5b509050612b8d9190612b91565b5090565b5b80821115612baa576000816000905550600101612b92565b5090565b6000612bc1612bbc846140a5565b614080565b905082815260208101848484011115612bdd57612bdc61459d565b5b612be884828561433e565b509392505050565b6000612c03612bfe846140d6565b614080565b905082815260208101848484011115612c1f57612c1e61459d565b5b612c2a84828561433e565b509392505050565b600081359050612c4181614d3b565b92915050565b600081519050612c5681614d52565b92915050565b600081359050612c6b81614d69565b92915050565b600081359050612c8081614d80565b92915050565b600081519050612c9581614d80565b92915050565b60008083601f840112612cb157612cb0614593565b5b8235905067ffffffffffffffff811115612cce57612ccd61458e565b5b602083019150836001820283011115612cea57612ce9614598565b5b9250929050565b600082601f830112612d0657612d05614593565b5b8135612d16848260208601612bae565b91505092915050565b600082601f830112612d3457612d33614593565b5b8135612d44848260208601612bf0565b91505092915050565b600081359050612d5c81614d97565b92915050565b600081359050612d7181614dae565b92915050565b600081519050612d8681614dae565b92915050565b600081359050612d9b81614dc5565b92915050565b600081359050612db081614ddc565b92915050565b600060208284031215612dcc57612dcb6145a7565b5b6000612dda84828501612c32565b91505092915050565b60008060408385031215612dfa57612df96145a7565b5b6000612e0885828601612c47565b9250506020612e1985828601612d77565b9150509250929050565b60008060408385031215612e3a57612e396145a7565b5b6000612e4885828601612c32565b9250506020612e5985828601612c32565b9150509250929050565b600080600060608486031215612e7c57612e7b6145a7565b5b6000612e8a86828701612c32565b9350506020612e9b86828701612c32565b9250506040612eac86828701612d62565b9150509250925092565b60008060008060808587031215612ed057612ecf6145a7565b5b6000612ede87828801612c32565b9450506020612eef87828801612c32565b9350506040612f0087828801612d62565b925050606085013567ffffffffffffffff811115612f2157612f206145a2565b5b612f2d87828801612cf1565b91505092959194509250565b60008060408385031215612f5057612f4f6145a7565b5b6000612f5e85828601612c32565b9250506020612f6f85828601612c5c565b9150509250929050565b60008060408385031215612f9057612f8f6145a7565b5b6000612f9e85828601612c32565b9250506020612faf85828601612d62565b9150509250929050565b600060208284031215612fcf57612fce6145a7565b5b6000612fdd84828501612c71565b91505092915050565b600060208284031215612ffc57612ffb6145a7565b5b600061300a84828501612c86565b91505092915050565b600060208284031215613029576130286145a7565b5b600082013567ffffffffffffffff811115613047576130466145a2565b5b61305384828501612d1f565b91505092915050565b600060208284031215613072576130716145a7565b5b600061308084828501612d4d565b91505092915050565b6000806000604084860312156130a2576130a16145a7565b5b60006130b086828701612d4d565b935050602084013567ffffffffffffffff8111156130d1576130d06145a2565b5b6130dd86828701612c9b565b92509250509250925092565b600080600060608486031215613102576131016145a7565b5b600061311086828701612d4d565b935050602084013567ffffffffffffffff811115613131576131306145a2565b5b61313d86828701612cf1565b925050604061314e86828701612d62565b9150509250925092565b600080600080600060808688031215613174576131736145a7565b5b600061318288828901612d4d565b955050602086013567ffffffffffffffff8111156131a3576131a26145a2565b5b6131af88828901612cf1565b94505060406131c088828901612d8c565b935050606086013567ffffffffffffffff8111156131e1576131e06145a2565b5b6131ed88828901612c9b565b92509250509295509295909350565b60008060008060808587031215613216576132156145a7565b5b600061322487828801612d4d565b945050602085013567ffffffffffffffff811115613245576132446145a2565b5b61325187828801612cf1565b935050604061326287828801612d8c565b925050606085013567ffffffffffffffff811115613283576132826145a2565b5b61328f87828801612cf1565b91505092959194509250565b600080604083850312156132b2576132b16145a7565b5b60006132c085828601612d4d565b92505060206132d185828601612d62565b9150509250929050565b6000602082840312156132f1576132f06145a7565b5b60006132ff84828501612d62565b91505092915050565b6000806040838503121561331f5761331e6145a7565b5b600061332d85828601612d77565b925050602061333e85828601612d77565b9150509250929050565b60006020828403121561335e5761335d6145a7565b5b600061336c84828501612da1565b91505092915050565b61337e81614291565b82525050565b61338d8161427f565b82525050565b61339c816142a3565b82525050565b6133ab816142af565b82525050565b60006133bd8385614132565b93506133ca83858461433e565b6133d3836145ac565b840190509392505050565b60006133ea8385614143565b93506133f783858461433e565b82840190509392505050565b600061340e8261411c565b6134188185614132565b935061342881856020860161434d565b613431816145ac565b840191505092915050565b60006134478261411c565b6134518185614143565b935061346181856020860161434d565b80840191505092915050565b6000815461347a81614380565b6134848186614132565b9450600182166000811461349f57600181146134b1576134e4565b60ff19831686526020860193506134e4565b6134ba85614107565b60005b838110156134dc578154818901526001820191506020810190506134bd565b808801955050505b50505092915050565b600081546134fa81614380565b6135048186614143565b9450600182166000811461351f576001811461353057613563565b60ff19831686528186019350613563565b61353985614107565b60005b8381101561355b5781548189015260018201915060208101905061353c565b838801955050505b50505092915050565b600061357782614127565b613581818561414e565b935061359181856020860161434d565b61359a816145ac565b840191505092915050565b60006135b082614127565b6135ba818561415f565b93506135ca81856020860161434d565b80840191505092915050565b60006135e360328361414e565b91506135ee826145ca565b604082019050919050565b600061360660268361414e565b915061361182614619565b604082019050919050565b600061362960248361414e565b915061363482614668565b604082019050919050565b600061364c60198361414e565b9150613657826146b7565b602082019050919050565b600061366f602e8361414e565b915061367a826146e0565b604082019050919050565b6000613692601a8361414e565b915061369d8261472f565b602082019050919050565b60006136b560228361414e565b91506136c082614758565b604082019050919050565b60006136d8602c8361414e565b91506136e3826147a7565b604082019050919050565b60006136fb60388361414e565b9150613706826147f6565b604082019050919050565b600061371e602a8361414e565b915061372982614845565b604082019050919050565b600061374160298361414e565b915061374c82614894565b604082019050919050565b6000613764601c8361414e565b915061376f826148e3565b602082019050919050565b6000613787602b8361414e565b91506137928261490c565b604082019050919050565b60006137aa60208361414e565b91506137b58261495b565b602082019050919050565b60006137cd602c8361414e565b91506137d882614984565b604082019050919050565b60006137f0602f8361414e565b91506137fb826149d3565b604082019050919050565b600061381360208361414e565b915061381e82614a22565b602082019050919050565b600061383660348361414e565b915061384182614a4b565b604082019050919050565b600061385960238361414e565b915061386482614a9a565b604082019050919050565b600061387c60298361414e565b915061388782614ae9565b604082019050919050565b600061389f602f8361414e565b91506138aa82614b38565b604082019050919050565b60006138c260218361414e565b91506138cd82614b87565b604082019050919050565b60006138e5600083614143565b91506138f082614bd6565b600082019050919050565b600061390860318361414e565b915061391382614bd9565b604082019050919050565b600061392b60268361414e565b915061393682614c28565b604082019050919050565b600061394e604e8361414e565b915061395982614c77565b606082019050919050565b600061397160258361414e565b915061397c82614cec565b604082019050919050565b613990816142e5565b82525050565b6139a76139a2826142e5565b614456565b82525050565b6139b681614313565b82525050565b6139cd6139c882614313565b614468565b82525050565b6139dc8161431d565b82525050565b60006139ef8284866133de565b91508190509392505050565b6000613a07828461343c565b915081905092915050565b6000613a1e82846134ed565b915081905092915050565b6000613a3582856135a5565b9150613a4182846135a5565b91508190509392505050565b6000613a58826138d8565b9150819050919050565b6000613a6e8285613996565b600282019150613a7e82846139bc565b6020820191508190509392505050565b6000602082019050613aa36000830184613384565b92915050565b6000608082019050613abe6000830187613384565b613acb6020830186613384565b613ad860408301856139ad565b8181036060830152613aea8184613403565b905095945050505050565b6000604082019050613b0a6000830185613384565b613b1760208301846139ad565b9392505050565b6000602082019050613b336000830184613393565b92915050565b60006020820190508181036000830152613b538184613403565b905092915050565b60006020820190508181036000830152613b75818461356c565b905092915050565b60006020820190508181036000830152613b96816135d6565b9050919050565b60006020820190508181036000830152613bb6816135f9565b9050919050565b60006020820190508181036000830152613bd68161361c565b9050919050565b60006020820190508181036000830152613bf68161363f565b9050919050565b60006020820190508181036000830152613c1681613662565b9050919050565b60006020820190508181036000830152613c3681613685565b9050919050565b60006020820190508181036000830152613c56816136a8565b9050919050565b60006020820190508181036000830152613c76816136cb565b9050919050565b60006020820190508181036000830152613c96816136ee565b9050919050565b60006020820190508181036000830152613cb681613711565b9050919050565b60006020820190508181036000830152613cd681613734565b9050919050565b60006020820190508181036000830152613cf681613757565b9050919050565b60006020820190508181036000830152613d168161377a565b9050919050565b60006020820190508181036000830152613d368161379d565b9050919050565b60006020820190508181036000830152613d56816137c0565b9050919050565b60006020820190508181036000830152613d76816137e3565b9050919050565b60006020820190508181036000830152613d9681613806565b9050919050565b60006020820190508181036000830152613db681613829565b9050919050565b60006020820190508181036000830152613dd68161384c565b9050919050565b60006020820190508181036000830152613df68161386f565b9050919050565b60006020820190508181036000830152613e1681613892565b9050919050565b60006020820190508181036000830152613e36816138b5565b9050919050565b60006020820190508181036000830152613e56816138fb565b9050919050565b60006020820190508181036000830152613e768161391e565b9050919050565b60006020820190508181036000830152613e9681613941565b9050919050565b60006020820190508181036000830152613eb681613964565b9050919050565b600060a082019050613ed26000830188613987565b613edf6020830187613384565b8181036040830152613ef18186613403565b9050613f006060830185613393565b8181036080830152613f128184613403565b90509695505050505050565b6000608082019050613f336000830188613987565b8181036020830152613f458187613403565b9050613f5460408301866139d3565b8181036060830152613f678184866133b1565b90509695505050505050565b6000608082019050613f886000830187613987565b8181036020830152613f9a8186613403565b9050613fa960408301856139d3565b8181036060830152613fbb8184613403565b905095945050505050565b600060c082019050613fdb6000830189613987565b8181036020830152613fed818861346d565b905081810360408301526140018187613403565b90506140106060830186613375565b61401d6080830185613384565b81810360a083015261402f8184613403565b9050979650505050505050565b600060208201905061405160008301846139ad565b92915050565b600060408201905061406c60008301856139ad565b61407960208301846133a2565b9392505050565b600061408a61409b565b905061409682826143b2565b919050565b6000604051905090565b600067ffffffffffffffff8211156140c0576140bf61455f565b5b6140c9826145ac565b9050602081019050919050565b600067ffffffffffffffff8211156140f1576140f061455f565b5b6140fa826145ac565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061417582614313565b915061418083614313565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141b5576141b46144a3565b5b828201905092915050565b60006141cb82614313565b91506141d683614313565b9250826141e6576141e56144d2565b5b828204905092915050565b60006141fc82614313565b915061420783614313565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142405761423f6144a3565b5b828202905092915050565b600061425682614313565b915061426183614313565b925082821015614274576142736144a3565b5b828203905092915050565b600061428a826142f3565b9050919050565b600061429c826142f3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561436b578082015181840152602081019050614350565b8381111561437a576000848401525b50505050565b6000600282049050600182168061439857607f821691505b602082108114156143ac576143ab614501565b5b50919050565b6143bb826145ac565b810181811067ffffffffffffffff821117156143da576143d961455f565b5b80604052505050565b60006143ee82614313565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614421576144206144a3565b5b600182019050919050565b600061443782614331565b915060ff82141561444b5761444a6144a3565b5b600182019050919050565b6000614461826145bd565b9050919050565b6000819050919050565b600061447d82614313565b915061448883614313565b925082614498576144976144d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a206d73672e76616c756520746f6f206c6f7700000000600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a204d696e74206578636565647320737570706c79206660008201527f6f722074686973206e6574776f726b0000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a204661696c656420746f20776974686472617720667560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a206d73672e76616c7565206e6f7420656e6f7567682060008201527f746f20636f766572206d6573736167654665652e2053656e642067617320666f60208201527f72206d6573736167652066656573000000000000000000000000000000000000604082015250565b7f4f6d6e69546f61647a3a204d61782032204e46547320706572207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b614d448161427f565b8114614d4f57600080fd5b50565b614d5b81614291565b8114614d6657600080fd5b50565b614d72816142a3565b8114614d7d57600080fd5b50565b614d89816142b9565b8114614d9457600080fd5b50565b614da0816142e5565b8114614dab57600080fd5b50565b614db781614313565b8114614dc257600080fd5b50565b614dce8161431d565b8114614dd957600080fd5b50565b614de581614331565b8114614df057600080fd5b5056fea2646970667358221220e682335d2f871d971675f56b2ba4edbfe5497bb6d14417636be1ad94504cfecf64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000019c80000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000aa87bee538000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6433616d30376372766e7472302e636c6f756466726f6e742e6e65742f000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b65760003560e01c80637533d788116100ec578063b88d4fde1161008a578063d1deba1f11610064578063d1deba1f146105fc578063e985e9c514610618578063eb8d72b714610655578063f2fde38b1461067e576101b6565b8063b88d4fde1461057a578063c87b56dd146105a3578063cf89fa03146105e0576101b6565b8063943fb872116100c6578063943fb872146104d257806395d89b41146104fb578063a22cb46514610526578063b2bdfa7b1461054f576101b6565b80637533d7881461042c5780638da5cb5b146104695780638ee7491214610494576101b6565b80632e1a7d4d116101595780636352211e116101335780636352211e1461037f5780636ecd2306146103bc57806370a08231146103d8578063715018a614610415576101b6565b80632e1a7d4d1461030457806342842e0e1461032d57806355f804b314610356576101b6565b8063081812fc11610195578063081812fc1461024c578063095ea7b3146102895780631c37a822146102b257806323b872dd146102db576101b6565b80621d3567146101bb57806301ffc9a7146101e457806306fdde0314610221575b600080fd5b3480156101c757600080fd5b506101e260048036038101906101dd91906131fc565b6106a7565b005b3480156101f057600080fd5b5061020b60048036038101906102069190612fb9565b6108e9565b6040516102189190613b1e565b60405180910390f35b34801561022d57600080fd5b506102366109cb565b6040516102439190613b5b565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e91906132db565b610a5d565b6040516102809190613a8e565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612f79565b610ae2565b005b3480156102be57600080fd5b506102d960048036038101906102d491906131fc565b610bfa565b005b3480156102e757600080fd5b5061030260048036038101906102fd9190612e63565b610c7a565b005b34801561031057600080fd5b5061032b600480360381019061032691906132db565b610cda565b005b34801561033957600080fd5b50610354600480360381019061034f9190612e63565b610e28565b005b34801561036257600080fd5b5061037d60048036038101906103789190613013565b610e48565b005b34801561038b57600080fd5b506103a660048036038101906103a191906132db565b610ede565b6040516103b39190613a8e565b60405180910390f35b6103d660048036038101906103d19190613348565b610f90565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612db6565b6110c4565b60405161040c919061403c565b60405180910390f35b34801561042157600080fd5b5061042a61117c565b005b34801561043857600080fd5b50610453600480360381019061044e919061305c565b611204565b6040516104609190613b39565b60405180910390f35b34801561047557600080fd5b5061047e6112a4565b60405161048b9190613a8e565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906130e9565b6112cd565b6040516104c9929190614057565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906132db565b611321565b005b34801561050757600080fd5b506105106113a7565b60405161051d9190613b5b565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612f39565b611439565b005b34801561055b57600080fd5b5061056461144f565b6040516105719190613a8e565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190612eb6565b611475565b005b3480156105af57600080fd5b506105ca60048036038101906105c591906132db565b6114d7565b6040516105d79190613b5b565b60405180910390f35b6105fa60048036038101906105f5919061329b565b61157e565b005b61061660048036038101906106119190613158565b611871565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612e23565b611a11565b60405161064c9190613b1e565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190613089565b611aa5565b005b34801561068a57600080fd5b506106a560048036038101906106a09190612db6565b611b51565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461070157600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461072790614380565b9050835114801561076d5750600960008561ffff1661ffff16815260200190815260200160002060405161075b9190613a12565b60405180910390208380519060200120145b6107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390613d9d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016107eb9493929190613f73565b600060405180830381600087803b15801561080557600080fd5b505af1925050508015610816575060015b6108e2576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161086091906139fb565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108d59493929190613f73565b60405180910390a16108e3565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c457506109c382611c49565b5b9050919050565b6060600180546109da90614380565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0690614380565b8015610a535780601f10610a2857610100808354040283529160200191610a53565b820191906000526020600020905b815481529060010190602001808311610a3657829003601f168201915b5050505050905090565b6000610a6882611cb3565b610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90613d3d565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aed82610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5590613e1d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7d611d1f565b73ffffffffffffffffffffffffffffffffffffffff161480610bac5750610bab81610ba6611d1f565b611a11565b5b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613c7d565b60405180910390fd5b610bf58383611d27565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f90613cfd565b60405180910390fd5b610c7484848484611de0565b50505050565b610c8b610c85611d1f565b82611e0d565b610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190613e3d565b60405180910390fd5b610cd5838383611eeb565b505050565b610ce2611d1f565b73ffffffffffffffffffffffffffffffffffffffff16610d006112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613d7d565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610d9e90613a4d565b60006040518083038185875af1925050503d8060008114610ddb576040519150601f19603f3d011682016040523d82523d6000602084013e610de0565b606091505b5050905080610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90613dbd565b60405180910390fd5b5050565b610e4383838360405180602001604052806000815250611475565b505050565b610e50611d1f565b73ffffffffffffffffffffffffffffffffffffffff16610e6e6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90613d7d565b60405180910390fd5b80600b9080519060200190610eda929190612a85565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90613cbd565b60405180910390fd5b80915050919050565b600e548160ff16610fa191906141f1565b341015610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613cdd565b60405180910390fd5b60038160ff1610611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613e9d565b60405180910390fd5b600d548160ff16600c5461103d919061416a565b111561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590613d5d565b60405180910390fd5b60005b8160ff168160ff1610156110c0576110ad33600c600081546110a2906143e3565b919050819055612147565b80806110b89061442c565b915050611081565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90613c9d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611184611d1f565b73ffffffffffffffffffffffffffffffffffffffff166111a26112a4565b73ffffffffffffffffffffffffffffffffffffffff16146111f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ef90613d7d565b60405180910390fd5b6112026000612165565b565b6009602052806000526040600020600091509050805461122390614380565b80601f016020809104026020016040519081016040528092919081815260200182805461124f90614380565b801561129c5780601f106112715761010080835404028352916020019161129c565b820191906000526020600020905b81548152906001019060200180831161127f57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b611329611d1f565b73ffffffffffffffffffffffffffffffffffffffff166113476112a4565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490613d7d565b60405180910390fd5b80600f8190555050565b6060600280546113b690614380565b80601f01602080910402602001604051908101604052809291908181526020018280546113e290614380565b801561142f5780601f106114045761010080835404028352916020019161142f565b820191906000526020600020905b81548152906001019060200180831161141257829003601f168201915b5050505050905090565b61144b611444611d1f565b8383612229565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611486611480611d1f565b83611e0d565b6114c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bc90613e3d565b60405180910390fd5b6114d184848484612396565b50505050565b60606114e282611cb3565b611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151890613dfd565b60405180910390fd5b600061152b6123f2565b9050600081511161154b5760405180602001604052806000815250611576565b8061155584612484565b604051602001611566929190613a29565b6040516020818303038152906040525b915050919050565b61158781610ede565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90613c3d565b60405180910390fd5b6000600960008461ffff1661ffff168152602001908152602001600020805461161c90614380565b90501161165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590613bfd565b60405180910390fd5b611667816125e5565b6000338260405160200161167c929190613af5565b6040516020818303038152906040529050600060019050600081600f546040516020016116aa929190613a62565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b8152600401611721959493929190613ebd565b604080518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117709190613308565b509050803410156117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad90613e7d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b815260040161183796959493929190613fc6565b6000604051808303818588803b15801561185057600080fd5b505af1158015611864573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161189c91906139fb565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b81600101541415611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190890613e5d565b60405180910390fd5b8060000154838390501480156119415750806001015483836040516119379291906139e2565b6040518091039020145b611980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197790613c1d565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b81526004016119d7959493929190613f1e565b600060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aad611d1f565b73ffffffffffffffffffffffffffffffffffffffff16611acb6112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1890613d7d565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b4b929190612b0b565b50505050565b611b59611d1f565b73ffffffffffffffffffffffffffffffffffffffff16611b776112a4565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490613d7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613b9d565b60405180910390fd5b611c4681612165565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d9a83610ede565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611df79190612de3565b91509150611e058282612147565b505050505050565b6000611e1882611cb3565b611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613c5d565b60405180910390fd5b6000611e6283610ede565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ed157508373ffffffffffffffffffffffffffffffffffffffff16611eb984610a5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ee25750611ee18185611a11565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f0b82610ede565b73ffffffffffffffffffffffffffffffffffffffff1614611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5890613ddd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613bbd565b60405180910390fd5b611fdc8383836126f6565b611fe7600082611d27565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612037919061424b565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208e919061416a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6121618282604051806020016040528060008152506126fb565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228f90613bdd565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123899190613b1e565b60405180910390a3505050565b6123a1848484611eeb565b6123ad84848484612756565b6123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390613b7d565b60405180910390fd5b50505050565b6060600b805461240190614380565b80601f016020809104026020016040519081016040528092919081815260200182805461242d90614380565b801561247a5780601f1061244f5761010080835404028352916020019161247a565b820191906000526020600020905b81548152906001019060200180831161245d57829003601f168201915b5050505050905090565b606060008214156124cc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506125e0565b600082905060005b600082146124fe5780806124e7906143e3565b915050600a826124f791906141c0565b91506124d4565b60008167ffffffffffffffff81111561251a5761251961455f565b5b6040519080825280601f01601f19166020018201604052801561254c5781602001600182028036833780820191505090505b5090505b600085146125d957600182612565919061424b565b9150600a856125749190614472565b6030612580919061416a565b60f81b81838151811061259657612595614530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125d291906141c0565b9450612550565b8093505050505b919050565b60006125f082610ede565b90506125fe816000846126f6565b612609600083611d27565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612659919061424b565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b61270583836128ed565b6127126000848484612756565b612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274890613b7d565b60405180910390fd5b505050565b60006127778473ffffffffffffffffffffffffffffffffffffffff16612a72565b156128e0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127a0611d1f565b8786866040518563ffffffff1660e01b81526004016127c29493929190613aa9565b602060405180830381600087803b1580156127dc57600080fd5b505af192505050801561280d57506040513d601f19601f8201168201806040525081019061280a9190612fe6565b60015b612890573d806000811461283d576040519150601f19603f3d011682016040523d82523d6000602084013e612842565b606091505b50600081511415612888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287f90613b7d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128e5565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561295d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295490613d1d565b60405180910390fd5b612969600083836126f6565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b9919061416a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a9190614380565b90600052602060002090601f016020900481019282612ab35760008555612afa565b82601f10612acc57805160ff1916838001178555612afa565b82800160010185558215612afa579182015b82811115612af9578251825591602001919060010190612ade565b5b509050612b079190612b91565b5090565b828054612b1790614380565b90600052602060002090601f016020900481019282612b395760008555612b80565b82601f10612b5257803560ff1916838001178555612b80565b82800160010185558215612b80579182015b82811115612b7f578235825591602001919060010190612b64565b5b509050612b8d9190612b91565b5090565b5b80821115612baa576000816000905550600101612b92565b5090565b6000612bc1612bbc846140a5565b614080565b905082815260208101848484011115612bdd57612bdc61459d565b5b612be884828561433e565b509392505050565b6000612c03612bfe846140d6565b614080565b905082815260208101848484011115612c1f57612c1e61459d565b5b612c2a84828561433e565b509392505050565b600081359050612c4181614d3b565b92915050565b600081519050612c5681614d52565b92915050565b600081359050612c6b81614d69565b92915050565b600081359050612c8081614d80565b92915050565b600081519050612c9581614d80565b92915050565b60008083601f840112612cb157612cb0614593565b5b8235905067ffffffffffffffff811115612cce57612ccd61458e565b5b602083019150836001820283011115612cea57612ce9614598565b5b9250929050565b600082601f830112612d0657612d05614593565b5b8135612d16848260208601612bae565b91505092915050565b600082601f830112612d3457612d33614593565b5b8135612d44848260208601612bf0565b91505092915050565b600081359050612d5c81614d97565b92915050565b600081359050612d7181614dae565b92915050565b600081519050612d8681614dae565b92915050565b600081359050612d9b81614dc5565b92915050565b600081359050612db081614ddc565b92915050565b600060208284031215612dcc57612dcb6145a7565b5b6000612dda84828501612c32565b91505092915050565b60008060408385031215612dfa57612df96145a7565b5b6000612e0885828601612c47565b9250506020612e1985828601612d77565b9150509250929050565b60008060408385031215612e3a57612e396145a7565b5b6000612e4885828601612c32565b9250506020612e5985828601612c32565b9150509250929050565b600080600060608486031215612e7c57612e7b6145a7565b5b6000612e8a86828701612c32565b9350506020612e9b86828701612c32565b9250506040612eac86828701612d62565b9150509250925092565b60008060008060808587031215612ed057612ecf6145a7565b5b6000612ede87828801612c32565b9450506020612eef87828801612c32565b9350506040612f0087828801612d62565b925050606085013567ffffffffffffffff811115612f2157612f206145a2565b5b612f2d87828801612cf1565b91505092959194509250565b60008060408385031215612f5057612f4f6145a7565b5b6000612f5e85828601612c32565b9250506020612f6f85828601612c5c565b9150509250929050565b60008060408385031215612f9057612f8f6145a7565b5b6000612f9e85828601612c32565b9250506020612faf85828601612d62565b9150509250929050565b600060208284031215612fcf57612fce6145a7565b5b6000612fdd84828501612c71565b91505092915050565b600060208284031215612ffc57612ffb6145a7565b5b600061300a84828501612c86565b91505092915050565b600060208284031215613029576130286145a7565b5b600082013567ffffffffffffffff811115613047576130466145a2565b5b61305384828501612d1f565b91505092915050565b600060208284031215613072576130716145a7565b5b600061308084828501612d4d565b91505092915050565b6000806000604084860312156130a2576130a16145a7565b5b60006130b086828701612d4d565b935050602084013567ffffffffffffffff8111156130d1576130d06145a2565b5b6130dd86828701612c9b565b92509250509250925092565b600080600060608486031215613102576131016145a7565b5b600061311086828701612d4d565b935050602084013567ffffffffffffffff811115613131576131306145a2565b5b61313d86828701612cf1565b925050604061314e86828701612d62565b9150509250925092565b600080600080600060808688031215613174576131736145a7565b5b600061318288828901612d4d565b955050602086013567ffffffffffffffff8111156131a3576131a26145a2565b5b6131af88828901612cf1565b94505060406131c088828901612d8c565b935050606086013567ffffffffffffffff8111156131e1576131e06145a2565b5b6131ed88828901612c9b565b92509250509295509295909350565b60008060008060808587031215613216576132156145a7565b5b600061322487828801612d4d565b945050602085013567ffffffffffffffff811115613245576132446145a2565b5b61325187828801612cf1565b935050604061326287828801612d8c565b925050606085013567ffffffffffffffff811115613283576132826145a2565b5b61328f87828801612cf1565b91505092959194509250565b600080604083850312156132b2576132b16145a7565b5b60006132c085828601612d4d565b92505060206132d185828601612d62565b9150509250929050565b6000602082840312156132f1576132f06145a7565b5b60006132ff84828501612d62565b91505092915050565b6000806040838503121561331f5761331e6145a7565b5b600061332d85828601612d77565b925050602061333e85828601612d77565b9150509250929050565b60006020828403121561335e5761335d6145a7565b5b600061336c84828501612da1565b91505092915050565b61337e81614291565b82525050565b61338d8161427f565b82525050565b61339c816142a3565b82525050565b6133ab816142af565b82525050565b60006133bd8385614132565b93506133ca83858461433e565b6133d3836145ac565b840190509392505050565b60006133ea8385614143565b93506133f783858461433e565b82840190509392505050565b600061340e8261411c565b6134188185614132565b935061342881856020860161434d565b613431816145ac565b840191505092915050565b60006134478261411c565b6134518185614143565b935061346181856020860161434d565b80840191505092915050565b6000815461347a81614380565b6134848186614132565b9450600182166000811461349f57600181146134b1576134e4565b60ff19831686526020860193506134e4565b6134ba85614107565b60005b838110156134dc578154818901526001820191506020810190506134bd565b808801955050505b50505092915050565b600081546134fa81614380565b6135048186614143565b9450600182166000811461351f576001811461353057613563565b60ff19831686528186019350613563565b61353985614107565b60005b8381101561355b5781548189015260018201915060208101905061353c565b838801955050505b50505092915050565b600061357782614127565b613581818561414e565b935061359181856020860161434d565b61359a816145ac565b840191505092915050565b60006135b082614127565b6135ba818561415f565b93506135ca81856020860161434d565b80840191505092915050565b60006135e360328361414e565b91506135ee826145ca565b604082019050919050565b600061360660268361414e565b915061361182614619565b604082019050919050565b600061362960248361414e565b915061363482614668565b604082019050919050565b600061364c60198361414e565b9150613657826146b7565b602082019050919050565b600061366f602e8361414e565b915061367a826146e0565b604082019050919050565b6000613692601a8361414e565b915061369d8261472f565b602082019050919050565b60006136b560228361414e565b91506136c082614758565b604082019050919050565b60006136d8602c8361414e565b91506136e3826147a7565b604082019050919050565b60006136fb60388361414e565b9150613706826147f6565b604082019050919050565b600061371e602a8361414e565b915061372982614845565b604082019050919050565b600061374160298361414e565b915061374c82614894565b604082019050919050565b6000613764601c8361414e565b915061376f826148e3565b602082019050919050565b6000613787602b8361414e565b91506137928261490c565b604082019050919050565b60006137aa60208361414e565b91506137b58261495b565b602082019050919050565b60006137cd602c8361414e565b91506137d882614984565b604082019050919050565b60006137f0602f8361414e565b91506137fb826149d3565b604082019050919050565b600061381360208361414e565b915061381e82614a22565b602082019050919050565b600061383660348361414e565b915061384182614a4b565b604082019050919050565b600061385960238361414e565b915061386482614a9a565b604082019050919050565b600061387c60298361414e565b915061388782614ae9565b604082019050919050565b600061389f602f8361414e565b91506138aa82614b38565b604082019050919050565b60006138c260218361414e565b91506138cd82614b87565b604082019050919050565b60006138e5600083614143565b91506138f082614bd6565b600082019050919050565b600061390860318361414e565b915061391382614bd9565b604082019050919050565b600061392b60268361414e565b915061393682614c28565b604082019050919050565b600061394e604e8361414e565b915061395982614c77565b606082019050919050565b600061397160258361414e565b915061397c82614cec565b604082019050919050565b613990816142e5565b82525050565b6139a76139a2826142e5565b614456565b82525050565b6139b681614313565b82525050565b6139cd6139c882614313565b614468565b82525050565b6139dc8161431d565b82525050565b60006139ef8284866133de565b91508190509392505050565b6000613a07828461343c565b915081905092915050565b6000613a1e82846134ed565b915081905092915050565b6000613a3582856135a5565b9150613a4182846135a5565b91508190509392505050565b6000613a58826138d8565b9150819050919050565b6000613a6e8285613996565b600282019150613a7e82846139bc565b6020820191508190509392505050565b6000602082019050613aa36000830184613384565b92915050565b6000608082019050613abe6000830187613384565b613acb6020830186613384565b613ad860408301856139ad565b8181036060830152613aea8184613403565b905095945050505050565b6000604082019050613b0a6000830185613384565b613b1760208301846139ad565b9392505050565b6000602082019050613b336000830184613393565b92915050565b60006020820190508181036000830152613b538184613403565b905092915050565b60006020820190508181036000830152613b75818461356c565b905092915050565b60006020820190508181036000830152613b96816135d6565b9050919050565b60006020820190508181036000830152613bb6816135f9565b9050919050565b60006020820190508181036000830152613bd68161361c565b9050919050565b60006020820190508181036000830152613bf68161363f565b9050919050565b60006020820190508181036000830152613c1681613662565b9050919050565b60006020820190508181036000830152613c3681613685565b9050919050565b60006020820190508181036000830152613c56816136a8565b9050919050565b60006020820190508181036000830152613c76816136cb565b9050919050565b60006020820190508181036000830152613c96816136ee565b9050919050565b60006020820190508181036000830152613cb681613711565b9050919050565b60006020820190508181036000830152613cd681613734565b9050919050565b60006020820190508181036000830152613cf681613757565b9050919050565b60006020820190508181036000830152613d168161377a565b9050919050565b60006020820190508181036000830152613d368161379d565b9050919050565b60006020820190508181036000830152613d56816137c0565b9050919050565b60006020820190508181036000830152613d76816137e3565b9050919050565b60006020820190508181036000830152613d9681613806565b9050919050565b60006020820190508181036000830152613db681613829565b9050919050565b60006020820190508181036000830152613dd68161384c565b9050919050565b60006020820190508181036000830152613df68161386f565b9050919050565b60006020820190508181036000830152613e1681613892565b9050919050565b60006020820190508181036000830152613e36816138b5565b9050919050565b60006020820190508181036000830152613e56816138fb565b9050919050565b60006020820190508181036000830152613e768161391e565b9050919050565b60006020820190508181036000830152613e9681613941565b9050919050565b60006020820190508181036000830152613eb681613964565b9050919050565b600060a082019050613ed26000830188613987565b613edf6020830187613384565b8181036040830152613ef18186613403565b9050613f006060830185613393565b8181036080830152613f128184613403565b90509695505050505050565b6000608082019050613f336000830188613987565b8181036020830152613f458187613403565b9050613f5460408301866139d3565b8181036060830152613f678184866133b1565b90509695505050505050565b6000608082019050613f886000830187613987565b8181036020830152613f9a8186613403565b9050613fa960408301856139d3565b8181036060830152613fbb8184613403565b905095945050505050565b600060c082019050613fdb6000830189613987565b8181036020830152613fed818861346d565b905081810360408301526140018187613403565b90506140106060830186613375565b61401d6080830185613384565b81810360a083015261402f8184613403565b9050979650505050505050565b600060208201905061405160008301846139ad565b92915050565b600060408201905061406c60008301856139ad565b61407960208301846133a2565b9392505050565b600061408a61409b565b905061409682826143b2565b919050565b6000604051905090565b600067ffffffffffffffff8211156140c0576140bf61455f565b5b6140c9826145ac565b9050602081019050919050565b600067ffffffffffffffff8211156140f1576140f061455f565b5b6140fa826145ac565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061417582614313565b915061418083614313565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141b5576141b46144a3565b5b828201905092915050565b60006141cb82614313565b91506141d683614313565b9250826141e6576141e56144d2565b5b828204905092915050565b60006141fc82614313565b915061420783614313565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142405761423f6144a3565b5b828202905092915050565b600061425682614313565b915061426183614313565b925082821015614274576142736144a3565b5b828203905092915050565b600061428a826142f3565b9050919050565b600061429c826142f3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561436b578082015181840152602081019050614350565b8381111561437a576000848401525b50505050565b6000600282049050600182168061439857607f821691505b602082108114156143ac576143ab614501565b5b50919050565b6143bb826145ac565b810181811067ffffffffffffffff821117156143da576143d961455f565b5b80604052505050565b60006143ee82614313565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614421576144206144a3565b5b600182019050919050565b600061443782614331565b915060ff82141561444b5761444a6144a3565b5b600182019050919050565b6000614461826145bd565b9050919050565b6000819050919050565b600061447d82614313565b915061448883614313565b925082614498576144976144d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160f01b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a206d73672e76616c756520746f6f206c6f7700000000600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a204d696e74206578636565647320737570706c79206660008201527f6f722074686973206e6574776f726b0000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a204661696c656420746f20776974686472617720667560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b7f4f6d6e69546f61647a3a206d73672e76616c7565206e6f7420656e6f7567682060008201527f746f20636f766572206d6573736167654665652e2053656e642067617320666f60208201527f72206d6573736167652066656573000000000000000000000000000000000000604082015250565b7f4f6d6e69546f61647a3a204d61782032204e46547320706572207472616e736160008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b614d448161427f565b8114614d4f57600080fd5b50565b614d5b81614291565b8114614d6657600080fd5b50565b614d72816142a3565b8114614d7d57600080fd5b50565b614d89816142b9565b8114614d9457600080fd5b50565b614da0816142e5565b8114614dab57600080fd5b50565b614db781614313565b8114614dc257600080fd5b50565b614dce8161431d565b8114614dd957600080fd5b50565b614de581614331565b8114614df057600080fd5b5056fea2646970667358221220e682335d2f871d971675f56b2ba4edbfe5497bb6d14417636be1ad94504cfecf64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000019c80000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000aa87bee538000000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f6433616d30376372766e7472302e636c6f756466726f6e742e6e65742f000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://d3am07crvntr0.cloudfront.net/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
Arg [2] : _nextTokenId (uint256): 6600
Arg [3] : _maxTokenId (uint256): 10000
Arg [4] : _price (uint256): 3000000000000000

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 00000000000000000000000000000000000000000000000000000000000019c8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [4] : 000000000000000000000000000000000000000000000000000aa87bee538000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [6] : 68747470733a2f2f6433616d30376372766e7472302e636c6f756466726f6e74
Arg [7] : 2e6e65742f000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

32110:3952:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28770:1098;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19972:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22189:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21770:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29876:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22922:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35199:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23306:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35101:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20638:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32790:596;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20335:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11608:103;;;;;;;;;;;;;:::i;:::-;;28569:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10957:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28460:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35391:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21080:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22505:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32176:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23499:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21192:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33394:1699;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30971:916;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22700:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31895:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11866:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28770:1098;28975:8;;;;;;;;;;;28953:31;;:10;:31;;;28945:40;;;;;;29110:19;:32;29130:11;29110:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;29088:11;:18;:61;:168;;;;;29223:19;:32;29243:11;29223:32;;;;;;;;;;;;;;;29213:43;;;;;;:::i;:::-;;;;;;;;29180:11;29170:22;;;;;;:86;29088:168;29066:270;;;;;;;;;;;;:::i;:::-;;;;;;;;;29464:4;:16;;;29481:11;29494;29507:6;29515:8;29464:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29460:401;;29671:101;;;;;;;;29704:8;:15;29671:101;;;;29748:8;29738:19;;;;;;29671:101;;;29620:14;:27;29635:11;29620:27;;;;;;;;;;;;;;;29648:11;29620:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;29661:6;29620:48;;;;;;;;;;;;;:152;;;;;;;;;;;;;;;;;;;29792:57;29806:11;29819;29832:6;29840:8;29792:57;;;;;;;;;:::i;:::-;;;;;;;;29460:401;;;;28770:1098;;;;:::o;19972:355::-;20119:4;20176:25;20161:40;;;:11;:40;;;;:105;;;;20233:33;20218:48;;;:11;:48;;;;20161:105;:158;;;;20283:36;20307:11;20283:23;:36::i;:::-;20161:158;20141:178;;19972:355;;;:::o;20972:100::-;21026:13;21059:5;21052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20972:100;:::o;22189:308::-;22310:7;22357:16;22365:7;22357;:16::i;:::-;22335:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22465:15;:24;22481:7;22465:24;;;;;;;;;;;;;;;;;;;;;22458:31;;22189:308;;;:::o;21770:411::-;21851:13;21867:23;21882:7;21867:14;:23::i;:::-;21851:39;;21915:5;21909:11;;:2;:11;;;;21901:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22009:5;21993:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22018:37;22035:5;22042:12;:10;:12::i;:::-;22018:16;:37::i;:::-;21993:62;21971:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22152:21;22161:2;22165:7;22152:8;:21::i;:::-;21840:341;21770:411;;:::o;29876:435::-;30124:4;30102:27;;:10;:27;;;30080:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30249:54;30260:11;30273;30286:6;30294:8;30249:10;:54::i;:::-;29876:435;;;;:::o;22922:376::-;23131:41;23150:12;:10;:12::i;:::-;23164:7;23131:18;:41::i;:::-;23109:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23262:28;23272:4;23278:2;23282:7;23262:9;:28::i;:::-;22922:376;;;:::o;35199:184::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35261:9:::1;35284:6;;;;;;;;;;;35276:20;;35304:3;35276:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35260:52;;;35331:4;35323:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;35249:134;35199:184:::0;:::o;23306:185::-;23444:39;23461:4;23467:2;23471:7;23444:39;;;;;;;;;;;;:16;:39::i;:::-;23306:185;;;:::o;35101:90::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35180:3:::1;35170:7;:13;;;;;;;;;;;;:::i;:::-;;35101:90:::0;:::o;20638:326::-;20755:7;20780:13;20796:7;:16;20804:7;20796:16;;;;;;;;;;;;;;;;;;;;;20780:32;;20862:1;20845:19;;:5;:19;;;;20823:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20951:5;20944:12;;;20638:326;;;:::o;32790:596::-;32882:5;;32870:9;:17;;;;;;:::i;:::-;32857:9;:30;;32849:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32951:1;32939:9;:13;;;32931:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33054:16;;33041:9;33027:23;;:11;;:23;;;;:::i;:::-;:43;;33005:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33283:7;33278:101;33300:9;33296:13;;:1;:13;;;33278:101;;;33331:36;33341:10;33355:11;;33353:13;;;;;:::i;:::-;;;;;;;33331:9;:36::i;:::-;33311:3;;;;;:::i;:::-;;;;33278:101;;;;32790:596;:::o;20335:295::-;20452:7;20516:1;20499:19;;:5;:19;;;;20477:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20606:9;:16;20616:5;20606:16;;;;;;;;;;;;;;;;20599:23;;20335:295;;;:::o;11608:103::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11673:30:::1;11700:1;11673:18;:30::i;:::-;11608:103::o:0;28569:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10957:87::-;11003:7;11030:6;;;;;;;;;;;11023:13;;10957:87;:::o;28460:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35391:128::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35505:6:::1;35476:26;:35;;;;35391:128:::0;:::o;21080:104::-;21136:13;21169:7;21162:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21080:104;:::o;22505:187::-;22632:52;22651:12;:10;:12::i;:::-;22665:8;22675;22632:18;:52::i;:::-;22505:187;;:::o;32176:21::-;;;;;;;;;;;;;:::o;23499:365::-;23688:41;23707:12;:10;:12::i;:::-;23721:7;23688:18;:41::i;:::-;23666:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23817:39;23831:4;23837:2;23841:7;23850:5;23817:13;:39::i;:::-;23499:365;;;;:::o;21192:468::-;21310:13;21363:16;21371:7;21363;:16::i;:::-;21341:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;21467:21;21491:10;:8;:10::i;:::-;21467:34;;21556:1;21538:7;21532:21;:25;:120;;;;;;;;;;;;;;;;;21601:7;21610:18;:7;:16;:18::i;:::-;21584:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21532:120;21512:140;;;21192:468;;;:::o;33394:1699::-;33514:16;33522:7;33514;:16::i;:::-;33500:30;;:10;:30;;;33478:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33664:1;33625:19;:29;33645:8;33625:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;33603:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;33819:14;33825:7;33819:5;:14::i;:::-;33907:20;33941:10;33953:7;33930:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33907:54;;34047:14;34064:1;34047:18;;34076:26;34136:7;34158:26;;34105:90;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34076:119;;34350:18;34374:8;;;;;;;;;;;:21;;;34410:8;34441:4;34461:7;34483:5;34503:13;34374:153;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34349:178;;;34575:10;34562:9;:23;;34540:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;34704:8;;;;;;;;;;;:13;;;34725:9;34750:8;34796:19;:29;34816:8;34796:29;;;;;;;;;;;;;;;34879:7;34935:10;34987:3;35045:13;34704:381;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33467:1626;;;;33394:1699;;:::o;30971:916::-;31195:32;31230:14;:27;31245:11;31230:27;;;;;;;;;;;;;;;31272:11;31230:64;;;;;;:::i;:::-;;;;;;;;;;;;;:72;31295:6;31230:72;;;;;;;;;;;;;31195:107;;31368:1;31360:10;;31335:9;:21;;;:35;;31313:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;31488:9;:23;;;31469:8;;:15;;:42;:107;;;;;31555:9;:21;;;31542:8;;31532:19;;;;;;;:::i;:::-;;;;;;;;:44;31469:107;31447:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;31704:1;31678:9;:23;;:27;;;;31748:1;31740:10;;31716:9;:21;;:34;;;;31819:4;:16;;;31836:11;31849;31862:6;31870:8;;31819:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31139:748;30971:916;;;;;:::o;22700:214::-;22842:4;22871:18;:25;22890:5;22871:25;;;;;;;;;;;;;;;:35;22897:8;22871:35;;;;;;;;;;;;;;;;;;;;;;;;;22864:42;;22700:214;;;;:::o;31895:181::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:14:::1;;32022:19;:29;32042:8;32022:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;31895:181:::0;;;:::o;11866:238::-;11188:12;:10;:12::i;:::-;11177:23;;:7;:5;:7::i;:::-;:23;;;11169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11989:1:::1;11969:22;;:8;:22;;;;11947:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12068:28;12087:8;12068:18;:28::i;:::-;11866:238:::0;:::o;17285:207::-;17415:4;17459:25;17444:40;;;:11;:40;;;;17437:47;;17285:207;;;:::o;24232:127::-;24297:4;24349:1;24321:30;;:7;:16;24329:7;24321:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24314:37;;24232:127;;;:::o;10279:98::-;10332:7;10359:10;10352:17;;10279:98;:::o;26586:174::-;26688:2;26661:15;:24;26677:7;26661:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26744:7;26740:2;26706:46;;26715:23;26730:7;26715:14;:23::i;:::-;26706:46;;;;;;;;;;;;26586:174;;:::o;35527:424::-;35723:14;35739:15;35783:8;35758:77;;;;;;;;;;;;:::i;:::-;35722:113;;;;35917:26;35927:6;35935:7;35917:9;:26::i;:::-;35692:259;;35527:424;;;;:::o;24367:452::-;24496:4;24540:16;24548:7;24540;:16::i;:::-;24518:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24639:13;24655:23;24670:7;24655:14;:23::i;:::-;24639:39;;24708:5;24697:16;;:7;:16;;;:64;;;;24754:7;24730:31;;:20;24742:7;24730:11;:20::i;:::-;:31;;;24697:64;:113;;;;24778:32;24795:5;24802:7;24778:16;:32::i;:::-;24697:113;24689:122;;;24367:452;;;;:::o;25963:615::-;26136:4;26109:31;;:23;26124:7;26109:14;:23::i;:::-;:31;;;26087:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;26242:1;26228:16;;:2;:16;;;;26220:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26298:39;26319:4;26325:2;26329:7;26298:20;:39::i;:::-;26402:29;26419:1;26423:7;26402:8;:29::i;:::-;26463:1;26444:9;:15;26454:4;26444:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;26492:1;26475:9;:13;26485:2;26475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26523:2;26504:7;:16;26512:7;26504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26562:7;26558:2;26543:27;;26552:4;26543:27;;;;;;;;;;;;25963:615;;;:::o;24827:110::-;24903:26;24913:2;24917:7;24903:26;;;;;;;;;;;;:9;:26::i;:::-;24827:110;;:::o;12264:191::-;12338:16;12357:6;;;;;;;;;;;12338:25;;12383:8;12374:6;;:17;;;;;;;;;;;;;;;;;;12438:8;12407:40;;12428:8;12407:40;;;;;;;;;;;;12327:128;12264:191;:::o;26768:315::-;26923:8;26914:17;;:5;:17;;;;26906:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27010:8;26972:18;:25;26991:5;26972:25;;;;;;;;;;;;;;;:35;26998:8;26972:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27056:8;27034:41;;27049:5;27034:41;;;27066:8;27034:41;;;;;;:::i;:::-;;;;;;;;26768:315;;;:::o;23872:352::-;24029:28;24039:4;24045:2;24049:7;24029:9;:28::i;:::-;24090:48;24113:4;24119:2;24123:7;24132:5;24090:22;:48::i;:::-;24068:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;23872:352;;;;:::o;35959:100::-;36011:13;36044:7;36037:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35959:100;:::o;8428:723::-;8484:13;8714:1;8705:5;:10;8701:53;;;8732:10;;;;;;;;;;;;;;;;;;;;;8701:53;8764:12;8779:5;8764:20;;8795:14;8820:78;8835:1;8827:4;:9;8820:78;;8853:8;;;;;:::i;:::-;;;;8884:2;8876:10;;;;;:::i;:::-;;;8820:78;;;8908:19;8940:6;8930:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8908:39;;8958:154;8974:1;8965:5;:10;8958:154;;9002:1;8992:11;;;;;:::i;:::-;;;9069:2;9061:5;:10;;;;:::i;:::-;9048:2;:24;;;;:::i;:::-;9035:39;;9018:6;9025;9018:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9098:2;9089:11;;;;;:::i;:::-;;;8958:154;;;9136:6;9122:21;;;;;8428:723;;;;:::o;25595:360::-;25655:13;25671:23;25686:7;25671:14;:23::i;:::-;25655:39;;25707:48;25728:5;25743:1;25747:7;25707:20;:48::i;:::-;25796:29;25813:1;25817:7;25796:8;:29::i;:::-;25858:1;25838:9;:16;25848:5;25838:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;25877:7;:16;25885:7;25877:16;;;;;;;;;;;;25870:23;;;;;;;;;;;25939:7;25935:1;25911:36;;25920:5;25911:36;;;;;;;;;;;;25644:311;25595:360;:::o;28079:126::-;;;;:::o;24945:321::-;25075:18;25081:2;25085:7;25075:5;:18::i;:::-;25126:54;25157:1;25161:2;25165:7;25174:5;25126:22;:54::i;:::-;25104:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24945:321;;;:::o;27091:980::-;27246:4;27267:15;:2;:13;;;:15::i;:::-;27263:801;;;27336:2;27320:36;;;27379:12;:10;:12::i;:::-;27414:4;27441:7;27471:5;27320:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;27299:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:1;27678:6;:13;:18;27674:320;;;27721:108;;;;;;;;;;:::i;:::-;;;;;;;;27674:320;27944:6;27938:13;27929:6;27925:2;27921:15;27914:38;27299:710;27569:41;;;27559:51;;;:6;:51;;;;27552:58;;;;;27263:801;28048:4;28041:11;;27091:980;;;;;;;:::o;25274:313::-;25368:1;25354:16;;:2;:16;;;;25346:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25420:45;25449:1;25453:2;25457:7;25420:20;:45::i;:::-;25495:1;25478:9;:13;25488:2;25478:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;25526:2;25507:7;:16;25515:7;25507:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25571:7;25567:2;25546:33;;25563:1;25546:33;;;;;;;;;;;;25274:313;;:::o;12512:387::-;12572:4;12780:12;12847:7;12835:20;12827:28;;12890:1;12883:4;:8;12876:15;;;12512:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:159::-;1051:5;1082:6;1076:13;1067:22;;1098:41;1133:5;1098:41;:::i;:::-;986:159;;;;:::o;1151:133::-;1194:5;1232:6;1219:20;1210:29;;1248:30;1272:5;1248:30;:::i;:::-;1151:133;;;;:::o;1290:137::-;1335:5;1373:6;1360:20;1351:29;;1389:32;1415:5;1389:32;:::i;:::-;1290:137;;;;:::o;1433:141::-;1489:5;1520:6;1514:13;1505:22;;1536:32;1562:5;1536:32;:::i;:::-;1433:141;;;;:::o;1593:552::-;1650:8;1660:6;1710:3;1703:4;1695:6;1691:17;1687:27;1677:122;;1718:79;;:::i;:::-;1677:122;1831:6;1818:20;1808:30;;1861:18;1853:6;1850:30;1847:117;;;1883:79;;:::i;:::-;1847:117;1997:4;1989:6;1985:17;1973:29;;2051:3;2043:4;2035:6;2031:17;2021:8;2017:32;2014:41;2011:128;;;2058:79;;:::i;:::-;2011:128;1593:552;;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:143::-;3213:5;3244:6;3238:13;3229:22;;3260:33;3287:5;3260:33;:::i;:::-;3156:143;;;;:::o;3305:137::-;3350:5;3388:6;3375:20;3366:29;;3404:32;3430:5;3404:32;:::i;:::-;3305:137;;;;:::o;3448:135::-;3492:5;3530:6;3517:20;3508:29;;3546:31;3571:5;3546:31;:::i;:::-;3448:135;;;;:::o;3589:329::-;3648:6;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3589:329;;;;:::o;3924:523::-;4011:6;4019;4068:2;4056:9;4047:7;4043:23;4039:32;4036:119;;;4074:79;;:::i;:::-;4036:119;4194:1;4219:72;4283:7;4274:6;4263:9;4259:22;4219:72;:::i;:::-;4209:82;;4165:136;4340:2;4366:64;4422:7;4413:6;4402:9;4398:22;4366:64;:::i;:::-;4356:74;;4311:129;3924:523;;;;;:::o;4453:474::-;4521:6;4529;4578:2;4566:9;4557:7;4553:23;4549:32;4546:119;;;4584:79;;:::i;:::-;4546:119;4704:1;4729:53;4774:7;4765:6;4754:9;4750:22;4729:53;:::i;:::-;4719:63;;4675:117;4831:2;4857:53;4902:7;4893:6;4882:9;4878:22;4857:53;:::i;:::-;4847:63;;4802:118;4453:474;;;;;:::o;4933:619::-;5010:6;5018;5026;5075:2;5063:9;5054:7;5050:23;5046:32;5043:119;;;5081:79;;:::i;:::-;5043:119;5201:1;5226:53;5271:7;5262:6;5251:9;5247:22;5226:53;:::i;:::-;5216:63;;5172:117;5328:2;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5299:118;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;4933:619;;;;;:::o;5558:943::-;5653:6;5661;5669;5677;5726:3;5714:9;5705:7;5701:23;5697:33;5694:120;;;5733:79;;:::i;:::-;5694:120;5853:1;5878:53;5923:7;5914:6;5903:9;5899:22;5878:53;:::i;:::-;5868:63;;5824:117;5980:2;6006:53;6051:7;6042:6;6031:9;6027:22;6006:53;:::i;:::-;5996:63;;5951:118;6108:2;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6079:118;6264:2;6253:9;6249:18;6236:32;6295:18;6287:6;6284:30;6281:117;;;6317:79;;:::i;:::-;6281:117;6422:62;6476:7;6467:6;6456:9;6452:22;6422:62;:::i;:::-;6412:72;;6207:287;5558:943;;;;;;;:::o;6507:468::-;6572:6;6580;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:53;6825:7;6816:6;6805:9;6801:22;6780:53;:::i;:::-;6770:63;;6726:117;6882:2;6908:50;6950:7;6941:6;6930:9;6926:22;6908:50;:::i;:::-;6898:60;;6853:115;6507:468;;;;;:::o;6981:474::-;7049:6;7057;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;7359:2;7385:53;7430:7;7421:6;7410:9;7406:22;7385:53;:::i;:::-;7375:63;;7330:118;6981:474;;;;;:::o;7461:327::-;7519:6;7568:2;7556:9;7547:7;7543:23;7539:32;7536:119;;;7574:79;;:::i;:::-;7536:119;7694:1;7719:52;7763:7;7754:6;7743:9;7739:22;7719:52;:::i;:::-;7709:62;;7665:116;7461:327;;;;:::o;7794:349::-;7863:6;7912:2;7900:9;7891:7;7887:23;7883:32;7880:119;;;7918:79;;:::i;:::-;7880:119;8038:1;8063:63;8118:7;8109:6;8098:9;8094:22;8063:63;:::i;:::-;8053:73;;8009:127;7794:349;;;;:::o;8149:509::-;8218:6;8267:2;8255:9;8246:7;8242:23;8238:32;8235:119;;;8273:79;;:::i;:::-;8235:119;8421:1;8410:9;8406:17;8393:31;8451:18;8443:6;8440:30;8437:117;;;8473:79;;:::i;:::-;8437:117;8578:63;8633:7;8624:6;8613:9;8609:22;8578:63;:::i;:::-;8568:73;;8364:287;8149:509;;;;:::o;8664:327::-;8722:6;8771:2;8759:9;8750:7;8746:23;8742:32;8739:119;;;8777:79;;:::i;:::-;8739:119;8897:1;8922:52;8966:7;8957:6;8946:9;8942:22;8922:52;:::i;:::-;8912:62;;8868:116;8664:327;;;;:::o;8997:670::-;9075:6;9083;9091;9140:2;9128:9;9119:7;9115:23;9111:32;9108:119;;;9146:79;;:::i;:::-;9108:119;9266:1;9291:52;9335:7;9326:6;9315:9;9311:22;9291:52;:::i;:::-;9281:62;;9237:116;9420:2;9409:9;9405:18;9392:32;9451:18;9443:6;9440:30;9437:117;;;9473:79;;:::i;:::-;9437:117;9586:64;9642:7;9633:6;9622:9;9618:22;9586:64;:::i;:::-;9568:82;;;;9363:297;8997:670;;;;;:::o;9673:795::-;9758:6;9766;9774;9823:2;9811:9;9802:7;9798:23;9794:32;9791:119;;;9829:79;;:::i;:::-;9791:119;9949:1;9974:52;10018:7;10009:6;9998:9;9994:22;9974:52;:::i;:::-;9964:62;;9920:116;10103:2;10092:9;10088:18;10075:32;10134:18;10126:6;10123:30;10120:117;;;10156:79;;:::i;:::-;10120:117;10261:62;10315:7;10306:6;10295:9;10291:22;10261:62;:::i;:::-;10251:72;;10046:287;10372:2;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10343:118;9673:795;;;;;:::o;10474:1137::-;10578:6;10586;10594;10602;10610;10659:3;10647:9;10638:7;10634:23;10630:33;10627:120;;;10666:79;;:::i;:::-;10627:120;10786:1;10811:52;10855:7;10846:6;10835:9;10831:22;10811:52;:::i;:::-;10801:62;;10757:116;10940:2;10929:9;10925:18;10912:32;10971:18;10963:6;10960:30;10957:117;;;10993:79;;:::i;:::-;10957:117;11098:62;11152:7;11143:6;11132:9;11128:22;11098:62;:::i;:::-;11088:72;;10883:287;11209:2;11235:52;11279:7;11270:6;11259:9;11255:22;11235:52;:::i;:::-;11225:62;;11180:117;11364:2;11353:9;11349:18;11336:32;11395:18;11387:6;11384:30;11381:117;;;11417:79;;:::i;:::-;11381:117;11530:64;11586:7;11577:6;11566:9;11562:22;11530:64;:::i;:::-;11512:82;;;;11307:297;10474:1137;;;;;;;;:::o;11617:1117::-;11719:6;11727;11735;11743;11792:3;11780:9;11771:7;11767:23;11763:33;11760:120;;;11799:79;;:::i;:::-;11760:120;11919:1;11944:52;11988:7;11979:6;11968:9;11964:22;11944:52;:::i;:::-;11934:62;;11890:116;12073:2;12062:9;12058:18;12045:32;12104:18;12096:6;12093:30;12090:117;;;12126:79;;:::i;:::-;12090:117;12231:62;12285:7;12276:6;12265:9;12261:22;12231:62;:::i;:::-;12221:72;;12016:287;12342:2;12368:52;12412:7;12403:6;12392:9;12388:22;12368:52;:::i;:::-;12358:62;;12313:117;12497:2;12486:9;12482:18;12469:32;12528:18;12520:6;12517:30;12514:117;;;12550:79;;:::i;:::-;12514:117;12655:62;12709:7;12700:6;12689:9;12685:22;12655:62;:::i;:::-;12645:72;;12440:287;11617:1117;;;;;;;:::o;12740:472::-;12807:6;12815;12864:2;12852:9;12843:7;12839:23;12835:32;12832:119;;;12870:79;;:::i;:::-;12832:119;12990:1;13015:52;13059:7;13050:6;13039:9;13035:22;13015:52;:::i;:::-;13005:62;;12961:116;13116:2;13142:53;13187:7;13178:6;13167:9;13163:22;13142:53;:::i;:::-;13132:63;;13087:118;12740:472;;;;;:::o;13218:329::-;13277:6;13326:2;13314:9;13305:7;13301:23;13297:32;13294:119;;;13332:79;;:::i;:::-;13294:119;13452:1;13477:53;13522:7;13513:6;13502:9;13498:22;13477:53;:::i;:::-;13467:63;;13423:117;13218:329;;;;:::o;13553:507::-;13632:6;13640;13689:2;13677:9;13668:7;13664:23;13660:32;13657:119;;;13695:79;;:::i;:::-;13657:119;13815:1;13840:64;13896:7;13887:6;13876:9;13872:22;13840:64;:::i;:::-;13830:74;;13786:128;13953:2;13979:64;14035:7;14026:6;14015:9;14011:22;13979:64;:::i;:::-;13969:74;;13924:129;13553:507;;;;;:::o;14066:325::-;14123:6;14172:2;14160:9;14151:7;14147:23;14143:32;14140:119;;;14178:79;;:::i;:::-;14140:119;14298:1;14323:51;14366:7;14357:6;14346:9;14342:22;14323:51;:::i;:::-;14313:61;;14269:115;14066:325;;;;:::o;14397:142::-;14500:32;14526:5;14500:32;:::i;:::-;14495:3;14488:45;14397:142;;:::o;14545:118::-;14632:24;14650:5;14632:24;:::i;:::-;14627:3;14620:37;14545:118;;:::o;14669:109::-;14750:21;14765:5;14750:21;:::i;:::-;14745:3;14738:34;14669:109;;:::o;14784:118::-;14871:24;14889:5;14871:24;:::i;:::-;14866:3;14859:37;14784:118;;:::o;14930:301::-;15026:3;15047:70;15110:6;15105:3;15047:70;:::i;:::-;15040:77;;15127:43;15163:6;15158:3;15151:5;15127:43;:::i;:::-;15195:29;15217:6;15195:29;:::i;:::-;15190:3;15186:39;15179:46;;14930:301;;;;;:::o;15259:314::-;15373:3;15394:88;15475:6;15470:3;15394:88;:::i;:::-;15387:95;;15492:43;15528:6;15523:3;15516:5;15492:43;:::i;:::-;15560:6;15555:3;15551:16;15544:23;;15259:314;;;;;:::o;15579:360::-;15665:3;15693:38;15725:5;15693:38;:::i;:::-;15747:70;15810:6;15805:3;15747:70;:::i;:::-;15740:77;;15826:52;15871:6;15866:3;15859:4;15852:5;15848:16;15826:52;:::i;:::-;15903:29;15925:6;15903:29;:::i;:::-;15898:3;15894:39;15887:46;;15669:270;15579:360;;;;:::o;15945:373::-;16049:3;16077:38;16109:5;16077:38;:::i;:::-;16131:88;16212:6;16207:3;16131:88;:::i;:::-;16124:95;;16228:52;16273:6;16268:3;16261:4;16254:5;16250:16;16228:52;:::i;:::-;16305:6;16300:3;16296:16;16289:23;;16053:265;15945:373;;;;:::o;16346:798::-;16429:3;16466:5;16460:12;16495:36;16521:9;16495:36;:::i;:::-;16547:70;16610:6;16605:3;16547:70;:::i;:::-;16540:77;;16648:1;16637:9;16633:17;16664:1;16659:135;;;;16808:1;16803:335;;;;16626:512;;16659:135;16743:4;16739:9;16728;16724:25;16719:3;16712:38;16779:4;16774:3;16770:14;16763:21;;16659:135;;16803:335;16870:37;16901:5;16870:37;:::i;:::-;16929:1;16943:154;16957:6;16954:1;16951:13;16943:154;;;17031:7;17025:14;17021:1;17016:3;17012:11;17005:35;17081:1;17072:7;17068:15;17057:26;;16979:4;16976:1;16972:12;16967:17;;16943:154;;;17126:1;17121:3;17117:11;17110:18;;16810:328;;16626:512;;16433:711;;16346:798;;;;:::o;17172:841::-;17273:3;17310:5;17304:12;17339:36;17365:9;17339:36;:::i;:::-;17391:88;17472:6;17467:3;17391:88;:::i;:::-;17384:95;;17510:1;17499:9;17495:17;17526:1;17521:137;;;;17672:1;17667:340;;;;17488:519;;17521:137;17605:4;17601:9;17590;17586:25;17581:3;17574:38;17641:6;17636:3;17632:16;17625:23;;17521:137;;17667:340;17734:37;17765:5;17734:37;:::i;:::-;17793:1;17807:154;17821:6;17818:1;17815:13;17807:154;;;17895:7;17889:14;17885:1;17880:3;17876:11;17869:35;17945:1;17936:7;17932:15;17921:26;;17843:4;17840:1;17836:12;17831:17;;17807:154;;;17990:6;17985:3;17981:16;17974:23;;17674:333;;17488:519;;17277:736;;17172:841;;;;:::o;18019:364::-;18107:3;18135:39;18168:5;18135:39;:::i;:::-;18190:71;18254:6;18249:3;18190:71;:::i;:::-;18183:78;;18270:52;18315:6;18310:3;18303:4;18296:5;18292:16;18270:52;:::i;:::-;18347:29;18369:6;18347:29;:::i;:::-;18342:3;18338:39;18331:46;;18111:272;18019:364;;;;:::o;18389:377::-;18495:3;18523:39;18556:5;18523:39;:::i;:::-;18578:89;18660:6;18655:3;18578:89;:::i;:::-;18571:96;;18676:52;18721:6;18716:3;18709:4;18702:5;18698:16;18676:52;:::i;:::-;18753:6;18748:3;18744:16;18737:23;;18499:267;18389:377;;;;:::o;18772:366::-;18914:3;18935:67;18999:2;18994:3;18935:67;:::i;:::-;18928:74;;19011:93;19100:3;19011:93;:::i;:::-;19129:2;19124:3;19120:12;19113:19;;18772:366;;;:::o;19144:::-;19286:3;19307:67;19371:2;19366:3;19307:67;:::i;:::-;19300:74;;19383:93;19472:3;19383:93;:::i;:::-;19501:2;19496:3;19492:12;19485:19;;19144:366;;;:::o;19516:::-;19658:3;19679:67;19743:2;19738:3;19679:67;:::i;:::-;19672:74;;19755:93;19844:3;19755:93;:::i;:::-;19873:2;19868:3;19864:12;19857:19;;19516:366;;;:::o;19888:::-;20030:3;20051:67;20115:2;20110:3;20051:67;:::i;:::-;20044:74;;20127:93;20216:3;20127:93;:::i;:::-;20245:2;20240:3;20236:12;20229:19;;19888:366;;;:::o;20260:::-;20402:3;20423:67;20487:2;20482:3;20423:67;:::i;:::-;20416:74;;20499:93;20588:3;20499:93;:::i;:::-;20617:2;20612:3;20608:12;20601:19;;20260:366;;;:::o;20632:::-;20774:3;20795:67;20859:2;20854:3;20795:67;:::i;:::-;20788:74;;20871:93;20960:3;20871:93;:::i;:::-;20989:2;20984:3;20980:12;20973:19;;20632:366;;;:::o;21004:::-;21146:3;21167:67;21231:2;21226:3;21167:67;:::i;:::-;21160:74;;21243:93;21332:3;21243:93;:::i;:::-;21361:2;21356:3;21352:12;21345:19;;21004:366;;;:::o;21376:::-;21518:3;21539:67;21603:2;21598:3;21539:67;:::i;:::-;21532:74;;21615:93;21704:3;21615:93;:::i;:::-;21733:2;21728:3;21724:12;21717:19;;21376:366;;;:::o;21748:::-;21890:3;21911:67;21975:2;21970:3;21911:67;:::i;:::-;21904:74;;21987:93;22076:3;21987:93;:::i;:::-;22105:2;22100:3;22096:12;22089:19;;21748:366;;;:::o;22120:::-;22262:3;22283:67;22347:2;22342:3;22283:67;:::i;:::-;22276:74;;22359:93;22448:3;22359:93;:::i;:::-;22477:2;22472:3;22468:12;22461:19;;22120:366;;;:::o;22492:::-;22634:3;22655:67;22719:2;22714:3;22655:67;:::i;:::-;22648:74;;22731:93;22820:3;22731:93;:::i;:::-;22849:2;22844:3;22840:12;22833:19;;22492:366;;;:::o;22864:::-;23006:3;23027:67;23091:2;23086:3;23027:67;:::i;:::-;23020:74;;23103:93;23192:3;23103:93;:::i;:::-;23221:2;23216:3;23212:12;23205:19;;22864:366;;;:::o;23236:::-;23378:3;23399:67;23463:2;23458:3;23399:67;:::i;:::-;23392:74;;23475:93;23564:3;23475:93;:::i;:::-;23593:2;23588:3;23584:12;23577:19;;23236:366;;;:::o;23608:::-;23750:3;23771:67;23835:2;23830:3;23771:67;:::i;:::-;23764:74;;23847:93;23936:3;23847:93;:::i;:::-;23965:2;23960:3;23956:12;23949:19;;23608:366;;;:::o;23980:::-;24122:3;24143:67;24207:2;24202:3;24143:67;:::i;:::-;24136:74;;24219:93;24308:3;24219:93;:::i;:::-;24337:2;24332:3;24328:12;24321:19;;23980:366;;;:::o;24352:::-;24494:3;24515:67;24579:2;24574:3;24515:67;:::i;:::-;24508:74;;24591:93;24680:3;24591:93;:::i;:::-;24709:2;24704:3;24700:12;24693:19;;24352:366;;;:::o;24724:::-;24866:3;24887:67;24951:2;24946:3;24887:67;:::i;:::-;24880:74;;24963:93;25052:3;24963:93;:::i;:::-;25081:2;25076:3;25072:12;25065:19;;24724:366;;;:::o;25096:::-;25238:3;25259:67;25323:2;25318:3;25259:67;:::i;:::-;25252:74;;25335:93;25424:3;25335:93;:::i;:::-;25453:2;25448:3;25444:12;25437:19;;25096:366;;;:::o;25468:::-;25610:3;25631:67;25695:2;25690:3;25631:67;:::i;:::-;25624:74;;25707:93;25796:3;25707:93;:::i;:::-;25825:2;25820:3;25816:12;25809:19;;25468:366;;;:::o;25840:::-;25982:3;26003:67;26067:2;26062:3;26003:67;:::i;:::-;25996:74;;26079:93;26168:3;26079:93;:::i;:::-;26197:2;26192:3;26188:12;26181:19;;25840:366;;;:::o;26212:::-;26354:3;26375:67;26439:2;26434:3;26375:67;:::i;:::-;26368:74;;26451:93;26540:3;26451:93;:::i;:::-;26569:2;26564:3;26560:12;26553:19;;26212:366;;;:::o;26584:::-;26726:3;26747:67;26811:2;26806:3;26747:67;:::i;:::-;26740:74;;26823:93;26912:3;26823:93;:::i;:::-;26941:2;26936:3;26932:12;26925:19;;26584:366;;;:::o;26956:398::-;27115:3;27136:83;27217:1;27212:3;27136:83;:::i;:::-;27129:90;;27228:93;27317:3;27228:93;:::i;:::-;27346:1;27341:3;27337:11;27330:18;;26956:398;;;:::o;27360:366::-;27502:3;27523:67;27587:2;27582:3;27523:67;:::i;:::-;27516:74;;27599:93;27688:3;27599:93;:::i;:::-;27717:2;27712:3;27708:12;27701:19;;27360:366;;;:::o;27732:::-;27874:3;27895:67;27959:2;27954:3;27895:67;:::i;:::-;27888:74;;27971:93;28060:3;27971:93;:::i;:::-;28089:2;28084:3;28080:12;28073:19;;27732:366;;;:::o;28104:::-;28246:3;28267:67;28331:2;28326:3;28267:67;:::i;:::-;28260:74;;28343:93;28432:3;28343:93;:::i;:::-;28461:2;28456:3;28452:12;28445:19;;28104:366;;;:::o;28476:::-;28618:3;28639:67;28703:2;28698:3;28639:67;:::i;:::-;28632:74;;28715:93;28804:3;28715:93;:::i;:::-;28833:2;28828:3;28824:12;28817:19;;28476:366;;;:::o;28848:115::-;28933:23;28950:5;28933:23;:::i;:::-;28928:3;28921:36;28848:115;;:::o;28969:153::-;29072:43;29091:23;29108:5;29091:23;:::i;:::-;29072:43;:::i;:::-;29067:3;29060:56;28969:153;;:::o;29128:118::-;29215:24;29233:5;29215:24;:::i;:::-;29210:3;29203:37;29128:118;;:::o;29252:157::-;29357:45;29377:24;29395:5;29377:24;:::i;:::-;29357:45;:::i;:::-;29352:3;29345:58;29252:157;;:::o;29415:115::-;29500:23;29517:5;29500:23;:::i;:::-;29495:3;29488:36;29415:115;;:::o;29536:291::-;29676:3;29698:103;29797:3;29788:6;29780;29698:103;:::i;:::-;29691:110;;29818:3;29811:10;;29536:291;;;;;:::o;29833:271::-;29963:3;29985:93;30074:3;30065:6;29985:93;:::i;:::-;29978:100;;30095:3;30088:10;;29833:271;;;;:::o;30110:265::-;30237:3;30259:90;30345:3;30336:6;30259:90;:::i;:::-;30252:97;;30366:3;30359:10;;30110:265;;;;:::o;30381:435::-;30561:3;30583:95;30674:3;30665:6;30583:95;:::i;:::-;30576:102;;30695:95;30786:3;30777:6;30695:95;:::i;:::-;30688:102;;30807:3;30800:10;;30381:435;;;;;:::o;30822:379::-;31006:3;31028:147;31171:3;31028:147;:::i;:::-;31021:154;;31192:3;31185:10;;30822:379;;;:::o;31207:392::-;31345:3;31360:73;31429:3;31420:6;31360:73;:::i;:::-;31458:1;31453:3;31449:11;31442:18;;31470:75;31541:3;31532:6;31470:75;:::i;:::-;31570:2;31565:3;31561:12;31554:19;;31590:3;31583:10;;31207:392;;;;;:::o;31605:222::-;31698:4;31736:2;31725:9;31721:18;31713:26;;31749:71;31817:1;31806:9;31802:17;31793:6;31749:71;:::i;:::-;31605:222;;;;:::o;31833:640::-;32028:4;32066:3;32055:9;32051:19;32043:27;;32080:71;32148:1;32137:9;32133:17;32124:6;32080:71;:::i;:::-;32161:72;32229:2;32218:9;32214:18;32205:6;32161:72;:::i;:::-;32243;32311:2;32300:9;32296:18;32287:6;32243:72;:::i;:::-;32362:9;32356:4;32352:20;32347:2;32336:9;32332:18;32325:48;32390:76;32461:4;32452:6;32390:76;:::i;:::-;32382:84;;31833:640;;;;;;;:::o;32479:332::-;32600:4;32638:2;32627:9;32623:18;32615:26;;32651:71;32719:1;32708:9;32704:17;32695:6;32651:71;:::i;:::-;32732:72;32800:2;32789:9;32785:18;32776:6;32732:72;:::i;:::-;32479:332;;;;;:::o;32817:210::-;32904:4;32942:2;32931:9;32927:18;32919:26;;32955:65;33017:1;33006:9;33002:17;32993:6;32955:65;:::i;:::-;32817:210;;;;:::o;33033:309::-;33144:4;33182:2;33171:9;33167:18;33159:26;;33231:9;33225:4;33221:20;33217:1;33206:9;33202:17;33195:47;33259:76;33330:4;33321:6;33259:76;:::i;:::-;33251:84;;33033:309;;;;:::o;33348:313::-;33461:4;33499:2;33488:9;33484:18;33476:26;;33548:9;33542:4;33538:20;33534:1;33523:9;33519:17;33512:47;33576:78;33649:4;33640:6;33576:78;:::i;:::-;33568:86;;33348:313;;;;:::o;33667:419::-;33833:4;33871:2;33860:9;33856:18;33848:26;;33920:9;33914:4;33910:20;33906:1;33895:9;33891:17;33884:47;33948:131;34074:4;33948:131;:::i;:::-;33940:139;;33667:419;;;:::o;34092:::-;34258:4;34296:2;34285:9;34281:18;34273:26;;34345:9;34339:4;34335:20;34331:1;34320:9;34316:17;34309:47;34373:131;34499:4;34373:131;:::i;:::-;34365:139;;34092:419;;;:::o;34517:::-;34683:4;34721:2;34710:9;34706:18;34698:26;;34770:9;34764:4;34760:20;34756:1;34745:9;34741:17;34734:47;34798:131;34924:4;34798:131;:::i;:::-;34790:139;;34517:419;;;:::o;34942:::-;35108:4;35146:2;35135:9;35131:18;35123:26;;35195:9;35189:4;35185:20;35181:1;35170:9;35166:17;35159:47;35223:131;35349:4;35223:131;:::i;:::-;35215:139;;34942:419;;;:::o;35367:::-;35533:4;35571:2;35560:9;35556:18;35548:26;;35620:9;35614:4;35610:20;35606:1;35595:9;35591:17;35584:47;35648:131;35774:4;35648:131;:::i;:::-;35640:139;;35367:419;;;:::o;35792:::-;35958:4;35996:2;35985:9;35981:18;35973:26;;36045:9;36039:4;36035:20;36031:1;36020:9;36016:17;36009:47;36073:131;36199:4;36073:131;:::i;:::-;36065:139;;35792:419;;;:::o;36217:::-;36383:4;36421:2;36410:9;36406:18;36398:26;;36470:9;36464:4;36460:20;36456:1;36445:9;36441:17;36434:47;36498:131;36624:4;36498:131;:::i;:::-;36490:139;;36217:419;;;:::o;36642:::-;36808:4;36846:2;36835:9;36831:18;36823:26;;36895:9;36889:4;36885:20;36881:1;36870:9;36866:17;36859:47;36923:131;37049:4;36923:131;:::i;:::-;36915:139;;36642:419;;;:::o;37067:::-;37233:4;37271:2;37260:9;37256:18;37248:26;;37320:9;37314:4;37310:20;37306:1;37295:9;37291:17;37284:47;37348:131;37474:4;37348:131;:::i;:::-;37340:139;;37067:419;;;:::o;37492:::-;37658:4;37696:2;37685:9;37681:18;37673:26;;37745:9;37739:4;37735:20;37731:1;37720:9;37716:17;37709:47;37773:131;37899:4;37773:131;:::i;:::-;37765:139;;37492:419;;;:::o;37917:::-;38083:4;38121:2;38110:9;38106:18;38098:26;;38170:9;38164:4;38160:20;38156:1;38145:9;38141:17;38134:47;38198:131;38324:4;38198:131;:::i;:::-;38190:139;;37917:419;;;:::o;38342:::-;38508:4;38546:2;38535:9;38531:18;38523:26;;38595:9;38589:4;38585:20;38581:1;38570:9;38566:17;38559:47;38623:131;38749:4;38623:131;:::i;:::-;38615:139;;38342:419;;;:::o;38767:::-;38933:4;38971:2;38960:9;38956:18;38948:26;;39020:9;39014:4;39010:20;39006:1;38995:9;38991:17;38984:47;39048:131;39174:4;39048:131;:::i;:::-;39040:139;;38767:419;;;:::o;39192:::-;39358:4;39396:2;39385:9;39381:18;39373:26;;39445:9;39439:4;39435:20;39431:1;39420:9;39416:17;39409:47;39473:131;39599:4;39473:131;:::i;:::-;39465:139;;39192:419;;;:::o;39617:::-;39783:4;39821:2;39810:9;39806:18;39798:26;;39870:9;39864:4;39860:20;39856:1;39845:9;39841:17;39834:47;39898:131;40024:4;39898:131;:::i;:::-;39890:139;;39617:419;;;:::o;40042:::-;40208:4;40246:2;40235:9;40231:18;40223:26;;40295:9;40289:4;40285:20;40281:1;40270:9;40266:17;40259:47;40323:131;40449:4;40323:131;:::i;:::-;40315:139;;40042:419;;;:::o;40467:::-;40633:4;40671:2;40660:9;40656:18;40648:26;;40720:9;40714:4;40710:20;40706:1;40695:9;40691:17;40684:47;40748:131;40874:4;40748:131;:::i;:::-;40740:139;;40467:419;;;:::o;40892:::-;41058:4;41096:2;41085:9;41081:18;41073:26;;41145:9;41139:4;41135:20;41131:1;41120:9;41116:17;41109:47;41173:131;41299:4;41173:131;:::i;:::-;41165:139;;40892:419;;;:::o;41317:::-;41483:4;41521:2;41510:9;41506:18;41498:26;;41570:9;41564:4;41560:20;41556:1;41545:9;41541:17;41534:47;41598:131;41724:4;41598:131;:::i;:::-;41590:139;;41317:419;;;:::o;41742:::-;41908:4;41946:2;41935:9;41931:18;41923:26;;41995:9;41989:4;41985:20;41981:1;41970:9;41966:17;41959:47;42023:131;42149:4;42023:131;:::i;:::-;42015:139;;41742:419;;;:::o;42167:::-;42333:4;42371:2;42360:9;42356:18;42348:26;;42420:9;42414:4;42410:20;42406:1;42395:9;42391:17;42384:47;42448:131;42574:4;42448:131;:::i;:::-;42440:139;;42167:419;;;:::o;42592:::-;42758:4;42796:2;42785:9;42781:18;42773:26;;42845:9;42839:4;42835:20;42831:1;42820:9;42816:17;42809:47;42873:131;42999:4;42873:131;:::i;:::-;42865:139;;42592:419;;;:::o;43017:::-;43183:4;43221:2;43210:9;43206:18;43198:26;;43270:9;43264:4;43260:20;43256:1;43245:9;43241:17;43234:47;43298:131;43424:4;43298:131;:::i;:::-;43290:139;;43017:419;;;:::o;43442:::-;43608:4;43646:2;43635:9;43631:18;43623:26;;43695:9;43689:4;43685:20;43681:1;43670:9;43666:17;43659:47;43723:131;43849:4;43723:131;:::i;:::-;43715:139;;43442:419;;;:::o;43867:::-;44033:4;44071:2;44060:9;44056:18;44048:26;;44120:9;44114:4;44110:20;44106:1;44095:9;44091:17;44084:47;44148:131;44274:4;44148:131;:::i;:::-;44140:139;;43867:419;;;:::o;44292:::-;44458:4;44496:2;44485:9;44481:18;44473:26;;44545:9;44539:4;44535:20;44531:1;44520:9;44516:17;44509:47;44573:131;44699:4;44573:131;:::i;:::-;44565:139;;44292:419;;;:::o;44717:822::-;44950:4;44988:3;44977:9;44973:19;44965:27;;45002:69;45068:1;45057:9;45053:17;45044:6;45002:69;:::i;:::-;45081:72;45149:2;45138:9;45134:18;45125:6;45081:72;:::i;:::-;45200:9;45194:4;45190:20;45185:2;45174:9;45170:18;45163:48;45228:76;45299:4;45290:6;45228:76;:::i;:::-;45220:84;;45314:66;45376:2;45365:9;45361:18;45352:6;45314:66;:::i;:::-;45428:9;45422:4;45418:20;45412:3;45401:9;45397:19;45390:49;45456:76;45527:4;45518:6;45456:76;:::i;:::-;45448:84;;44717:822;;;;;;;;:::o;45545:739::-;45764:4;45802:3;45791:9;45787:19;45779:27;;45816:69;45882:1;45871:9;45867:17;45858:6;45816:69;:::i;:::-;45932:9;45926:4;45922:20;45917:2;45906:9;45902:18;45895:48;45960:76;46031:4;46022:6;45960:76;:::i;:::-;45952:84;;46046:70;46112:2;46101:9;46097:18;46088:6;46046:70;:::i;:::-;46163:9;46157:4;46153:20;46148:2;46137:9;46133:18;46126:48;46191:86;46272:4;46263:6;46255;46191:86;:::i;:::-;46183:94;;45545:739;;;;;;;;:::o;46290:719::-;46499:4;46537:3;46526:9;46522:19;46514:27;;46551:69;46617:1;46606:9;46602:17;46593:6;46551:69;:::i;:::-;46667:9;46661:4;46657:20;46652:2;46641:9;46637:18;46630:48;46695:76;46766:4;46757:6;46695:76;:::i;:::-;46687:84;;46781:70;46847:2;46836:9;46832:18;46823:6;46781:70;:::i;:::-;46898:9;46892:4;46888:20;46883:2;46872:9;46868:18;46861:48;46926:76;46997:4;46988:6;46926:76;:::i;:::-;46918:84;;46290:719;;;;;;;:::o;47015:1058::-;47313:4;47351:3;47340:9;47336:19;47328:27;;47365:69;47431:1;47420:9;47416:17;47407:6;47365:69;:::i;:::-;47481:9;47475:4;47471:20;47466:2;47455:9;47451:18;47444:48;47509:73;47577:4;47568:6;47509:73;:::i;:::-;47501:81;;47629:9;47623:4;47619:20;47614:2;47603:9;47599:18;47592:48;47657:76;47728:4;47719:6;47657:76;:::i;:::-;47649:84;;47743:88;47827:2;47816:9;47812:18;47803:6;47743:88;:::i;:::-;47841:73;47909:3;47898:9;47894:19;47885:6;47841:73;:::i;:::-;47962:9;47956:4;47952:20;47946:3;47935:9;47931:19;47924:49;47990:76;48061:4;48052:6;47990:76;:::i;:::-;47982:84;;47015:1058;;;;;;;;;:::o;48079:222::-;48172:4;48210:2;48199:9;48195:18;48187:26;;48223:71;48291:1;48280:9;48276:17;48267:6;48223:71;:::i;:::-;48079:222;;;;:::o;48307:332::-;48428:4;48466:2;48455:9;48451:18;48443:26;;48479:71;48547:1;48536:9;48532:17;48523:6;48479:71;:::i;:::-;48560:72;48628:2;48617:9;48613:18;48604:6;48560:72;:::i;:::-;48307:332;;;;;:::o;48645:129::-;48679:6;48706:20;;:::i;:::-;48696:30;;48735:33;48763:4;48755:6;48735:33;:::i;:::-;48645:129;;;:::o;48780:75::-;48813:6;48846:2;48840:9;48830:19;;48780:75;:::o;48861:307::-;48922:4;49012:18;49004:6;49001:30;48998:56;;;49034:18;;:::i;:::-;48998:56;49072:29;49094:6;49072:29;:::i;:::-;49064:37;;49156:4;49150;49146:15;49138:23;;48861:307;;;:::o;49174:308::-;49236:4;49326:18;49318:6;49315:30;49312:56;;;49348:18;;:::i;:::-;49312:56;49386:29;49408:6;49386:29;:::i;:::-;49378:37;;49470:4;49464;49460:15;49452:23;;49174:308;;;:::o;49488:140::-;49536:4;49559:3;49551:11;;49582:3;49579:1;49572:14;49616:4;49613:1;49603:18;49595:26;;49488:140;;;:::o;49634:98::-;49685:6;49719:5;49713:12;49703:22;;49634:98;;;:::o;49738:99::-;49790:6;49824:5;49818:12;49808:22;;49738:99;;;:::o;49843:168::-;49926:11;49960:6;49955:3;49948:19;50000:4;49995:3;49991:14;49976:29;;49843:168;;;;:::o;50017:147::-;50118:11;50155:3;50140:18;;50017:147;;;;:::o;50170:169::-;50254:11;50288:6;50283:3;50276:19;50328:4;50323:3;50319:14;50304:29;;50170:169;;;;:::o;50345:148::-;50447:11;50484:3;50469:18;;50345:148;;;;:::o;50499:305::-;50539:3;50558:20;50576:1;50558:20;:::i;:::-;50553:25;;50592:20;50610:1;50592:20;:::i;:::-;50587:25;;50746:1;50678:66;50674:74;50671:1;50668:81;50665:107;;;50752:18;;:::i;:::-;50665:107;50796:1;50793;50789:9;50782:16;;50499:305;;;;:::o;50810:185::-;50850:1;50867:20;50885:1;50867:20;:::i;:::-;50862:25;;50901:20;50919:1;50901:20;:::i;:::-;50896:25;;50940:1;50930:35;;50945:18;;:::i;:::-;50930:35;50987:1;50984;50980:9;50975:14;;50810:185;;;;:::o;51001:348::-;51041:7;51064:20;51082:1;51064:20;:::i;:::-;51059:25;;51098:20;51116:1;51098:20;:::i;:::-;51093:25;;51286:1;51218:66;51214:74;51211:1;51208:81;51203:1;51196:9;51189:17;51185:105;51182:131;;;51293:18;;:::i;:::-;51182:131;51341:1;51338;51334:9;51323:20;;51001:348;;;;:::o;51355:191::-;51395:4;51415:20;51433:1;51415:20;:::i;:::-;51410:25;;51449:20;51467:1;51449:20;:::i;:::-;51444:25;;51488:1;51485;51482:8;51479:34;;;51493:18;;:::i;:::-;51479:34;51538:1;51535;51531:9;51523:17;;51355:191;;;;:::o;51552:96::-;51589:7;51618:24;51636:5;51618:24;:::i;:::-;51607:35;;51552:96;;;:::o;51654:104::-;51699:7;51728:24;51746:5;51728:24;:::i;:::-;51717:35;;51654:104;;;:::o;51764:90::-;51798:7;51841:5;51834:13;51827:21;51816:32;;51764:90;;;:::o;51860:77::-;51897:7;51926:5;51915:16;;51860:77;;;:::o;51943:149::-;51979:7;52019:66;52012:5;52008:78;51997:89;;51943:149;;;:::o;52098:89::-;52134:7;52174:6;52167:5;52163:18;52152:29;;52098:89;;;:::o;52193:126::-;52230:7;52270:42;52263:5;52259:54;52248:65;;52193:126;;;:::o;52325:77::-;52362:7;52391:5;52380:16;;52325:77;;;:::o;52408:101::-;52444:7;52484:18;52477:5;52473:30;52462:41;;52408:101;;;:::o;52515:86::-;52550:7;52590:4;52583:5;52579:16;52568:27;;52515:86;;;:::o;52607:154::-;52691:6;52686:3;52681;52668:30;52753:1;52744:6;52739:3;52735:16;52728:27;52607:154;;;:::o;52767:307::-;52835:1;52845:113;52859:6;52856:1;52853:13;52845:113;;;52944:1;52939:3;52935:11;52929:18;52925:1;52920:3;52916:11;52909:39;52881:2;52878:1;52874:10;52869:15;;52845:113;;;52976:6;52973:1;52970:13;52967:101;;;53056:1;53047:6;53042:3;53038:16;53031:27;52967:101;52816:258;52767:307;;;:::o;53080:320::-;53124:6;53161:1;53155:4;53151:12;53141:22;;53208:1;53202:4;53198:12;53229:18;53219:81;;53285:4;53277:6;53273:17;53263:27;;53219:81;53347:2;53339:6;53336:14;53316:18;53313:38;53310:84;;;53366:18;;:::i;:::-;53310:84;53131:269;53080:320;;;:::o;53406:281::-;53489:27;53511:4;53489:27;:::i;:::-;53481:6;53477:40;53619:6;53607:10;53604:22;53583:18;53571:10;53568:34;53565:62;53562:88;;;53630:18;;:::i;:::-;53562:88;53670:10;53666:2;53659:22;53449:238;53406:281;;:::o;53693:233::-;53732:3;53755:24;53773:5;53755:24;:::i;:::-;53746:33;;53801:66;53794:5;53791:77;53788:103;;;53871:18;;:::i;:::-;53788:103;53918:1;53911:5;53907:13;53900:20;;53693:233;;;:::o;53932:167::-;53969:3;53992:22;54008:5;53992:22;:::i;:::-;53983:31;;54036:4;54029:5;54026:15;54023:41;;;54044:18;;:::i;:::-;54023:41;54091:1;54084:5;54080:13;54073:20;;53932:167;;;:::o;54105:94::-;54143:7;54172:21;54187:5;54172:21;:::i;:::-;54161:32;;54105:94;;;:::o;54205:79::-;54244:7;54273:5;54262:16;;54205:79;;;:::o;54290:176::-;54322:1;54339:20;54357:1;54339:20;:::i;:::-;54334:25;;54373:20;54391:1;54373:20;:::i;:::-;54368:25;;54412:1;54402:35;;54417:18;;:::i;:::-;54402:35;54458:1;54455;54451:9;54446:14;;54290:176;;;;:::o;54472:180::-;54520:77;54517:1;54510:88;54617:4;54614:1;54607:15;54641:4;54638:1;54631:15;54658:180;54706:77;54703:1;54696:88;54803:4;54800:1;54793:15;54827:4;54824:1;54817:15;54844:180;54892:77;54889:1;54882:88;54989:4;54986:1;54979:15;55013:4;55010:1;55003:15;55030:180;55078:77;55075:1;55068:88;55175:4;55172:1;55165:15;55199:4;55196:1;55189:15;55216:180;55264:77;55261:1;55254:88;55361:4;55358:1;55351:15;55385:4;55382:1;55375:15;55402:117;55511:1;55508;55501:12;55525:117;55634:1;55631;55624:12;55648:117;55757:1;55754;55747:12;55771:117;55880:1;55877;55870:12;55894:117;56003:1;56000;55993:12;56017:117;56126:1;56123;56116:12;56140:102;56181:6;56232:2;56228:7;56223:2;56216:5;56212:14;56208:28;56198:38;;56140:102;;;:::o;56248:96::-;56282:8;56331:5;56326:3;56322:15;56301:36;;56248:96;;;:::o;56350:237::-;56490:34;56486:1;56478:6;56474:14;56467:58;56559:20;56554:2;56546:6;56542:15;56535:45;56350:237;:::o;56593:225::-;56733:34;56729:1;56721:6;56717:14;56710:58;56802:8;56797:2;56789:6;56785:15;56778:33;56593:225;:::o;56824:223::-;56964:34;56960:1;56952:6;56948:14;56941:58;57033:6;57028:2;57020:6;57016:15;57009:31;56824:223;:::o;57053:175::-;57193:27;57189:1;57181:6;57177:14;57170:51;57053:175;:::o;57234:233::-;57374:34;57370:1;57362:6;57358:14;57351:58;57443:16;57438:2;57430:6;57426:15;57419:41;57234:233;:::o;57473:176::-;57613:28;57609:1;57601:6;57597:14;57590:52;57473:176;:::o;57655:221::-;57795:34;57791:1;57783:6;57779:14;57772:58;57864:4;57859:2;57851:6;57847:15;57840:29;57655:221;:::o;57882:231::-;58022:34;58018:1;58010:6;58006:14;57999:58;58091:14;58086:2;58078:6;58074:15;58067:39;57882:231;:::o;58119:243::-;58259:34;58255:1;58247:6;58243:14;58236:58;58328:26;58323:2;58315:6;58311:15;58304:51;58119:243;:::o;58368:229::-;58508:34;58504:1;58496:6;58492:14;58485:58;58577:12;58572:2;58564:6;58560:15;58553:37;58368:229;:::o;58603:228::-;58743:34;58739:1;58731:6;58727:14;58720:58;58812:11;58807:2;58799:6;58795:15;58788:36;58603:228;:::o;58837:178::-;58977:30;58973:1;58965:6;58961:14;58954:54;58837:178;:::o;59021:230::-;59161:34;59157:1;59149:6;59145:14;59138:58;59230:13;59225:2;59217:6;59213:15;59206:38;59021:230;:::o;59257:182::-;59397:34;59393:1;59385:6;59381:14;59374:58;59257:182;:::o;59445:231::-;59585:34;59581:1;59573:6;59569:14;59562:58;59654:14;59649:2;59641:6;59637:15;59630:39;59445:231;:::o;59682:234::-;59822:34;59818:1;59810:6;59806:14;59799:58;59891:17;59886:2;59878:6;59874:15;59867:42;59682:234;:::o;59922:182::-;60062:34;60058:1;60050:6;60046:14;60039:58;59922:182;:::o;60110:239::-;60250:34;60246:1;60238:6;60234:14;60227:58;60319:22;60314:2;60306:6;60302:15;60295:47;60110:239;:::o;60355:222::-;60495:34;60491:1;60483:6;60479:14;60472:58;60564:5;60559:2;60551:6;60547:15;60540:30;60355:222;:::o;60583:228::-;60723:34;60719:1;60711:6;60707:14;60700:58;60792:11;60787:2;60779:6;60775:15;60768:36;60583:228;:::o;60817:234::-;60957:34;60953:1;60945:6;60941:14;60934:58;61026:17;61021:2;61013:6;61009:15;61002:42;60817:234;:::o;61057:220::-;61197:34;61193:1;61185:6;61181:14;61174:58;61266:3;61261:2;61253:6;61249:15;61242:28;61057:220;:::o;61283:114::-;;:::o;61403:236::-;61543:34;61539:1;61531:6;61527:14;61520:58;61612:19;61607:2;61599:6;61595:15;61588:44;61403:236;:::o;61645:225::-;61785:34;61781:1;61773:6;61769:14;61762:58;61854:8;61849:2;61841:6;61837:15;61830:33;61645:225;:::o;61876:302::-;62016:34;62012:1;62004:6;62000:14;61993:58;62085:34;62080:2;62072:6;62068:15;62061:59;62154:16;62149:2;62141:6;62137:15;62130:41;61876:302;:::o;62184:224::-;62324:34;62320:1;62312:6;62308:14;62301:58;62393:7;62388:2;62380:6;62376:15;62369:32;62184:224;:::o;62414:122::-;62487:24;62505:5;62487:24;:::i;:::-;62480:5;62477:35;62467:63;;62526:1;62523;62516:12;62467:63;62414:122;:::o;62542:138::-;62623:32;62649:5;62623:32;:::i;:::-;62616:5;62613:43;62603:71;;62670:1;62667;62660:12;62603:71;62542:138;:::o;62686:116::-;62756:21;62771:5;62756:21;:::i;:::-;62749:5;62746:32;62736:60;;62792:1;62789;62782:12;62736:60;62686:116;:::o;62808:120::-;62880:23;62897:5;62880:23;:::i;:::-;62873:5;62870:34;62860:62;;62918:1;62915;62908:12;62860:62;62808:120;:::o;62934:::-;63006:23;63023:5;63006:23;:::i;:::-;62999:5;62996:34;62986:62;;63044:1;63041;63034:12;62986:62;62934:120;:::o;63060:122::-;63133:24;63151:5;63133:24;:::i;:::-;63126:5;63123:35;63113:63;;63172:1;63169;63162:12;63113:63;63060:122;:::o;63188:120::-;63260:23;63277:5;63260:23;:::i;:::-;63253:5;63250:34;63240:62;;63298:1;63295;63288:12;63240:62;63188:120;:::o;63314:118::-;63385:22;63401:5;63385:22;:::i;:::-;63378:5;63375:33;63365:61;;63422:1;63419;63412:12;63365:61;63314:118;:::o

Swarm Source

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