ETH Price: $3,352.70 (-1.93%)

Token

Cyber (Hunters)
 

Overview

Max Total Supply

6,666 Hunters

Holders

3,112

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 Hunters
0xb801bbb08410bc04144413c9d707adf503597f57
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:
Cyber

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// Made with love by Mai
pragma solidity >=0.8.14;

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


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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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, uint _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;
}

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, uint _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 (uint nativeFee, uint 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, uint _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);
}

error CallerNotOwner();
error NewOwnerAddressZero();

abstract contract ERC721Omni {
    using Address for address;
    using Strings for uint256;

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    event Transfer(address indexed from, address indexed to, uint256 indexed id);
    event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    string public name;
    string public symbol;
    address public owner;
    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint payloadLength;
        bytes32 payloadHash;
    }

    struct addressData {
        uint128 balance;
        uint128 huntlistMinted;
    }

    struct tokenData {
        address tokenHolder;
        uint96 timestampHolder;//Maybe if you guys like your hunters we can do cool stuff with this
    }

    mapping(uint256 => tokenData) internal _ownerOf;
    mapping(address => addressData) internal _addressData;

    mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;
    mapping(uint256 => address) public getApproved;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
        _transferOwnership(msg.sender);
    }

    function ownerOf(uint256 id) public view virtual returns (address) {
        require(_ownerOf[id].tokenHolder != address(0), "Nonexistent Token");
        return _ownerOf[id].tokenHolder;
    }

    function balanceOf(address _owner) public view virtual returns (uint256) {
        require(_owner != address(0), "Zero Address");
        return _addressData[_owner].balance;
    }

    function durationTimestamp(uint256 tokenId) public view virtual returns (uint256) {
        return _ownerOf[tokenId].timestampHolder;
    }

    function huntlistMinted(address _owner) public view virtual returns (uint256) {
        require(_owner != address(0), "Zero Address");
        return _addressData[_owner].huntlistMinted;
    }

    function transferFrom(address from, address to, uint256 tokenId) public {
        require(from == _ownerOf[tokenId].tokenHolder, "Non Owner");
        require(to != address(0), "Zero Address");

        require(msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[tokenId],
            "Lacks Permissions"
        );

        unchecked {
            _addressData[from].balance--;
            _addressData[to].balance++;
        }

        _ownerOf[tokenId].tokenHolder = to;
        _ownerOf[tokenId].timestampHolder = uint96(block.timestamp);
        delete getApproved[tokenId];
        emit Transfer(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        transferFrom(from, to, tokenId);

        require(to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, tokenId, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "Unsafe Transfer"
        );
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) public {
        transferFrom(from, to, tokenId);

        require(to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, tokenId, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "Unsafe Transfer"
        );
    }

    function setApprovalForAll(address operator, bool approved) public {
        isApprovedForAll[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function approve(address spender, uint256 tokenId) public {
        address _owner = _ownerOf[tokenId].tokenHolder;
        require(msg.sender == _owner || isApprovedForAll[_owner][msg.sender], "Lacks Permissions");

        getApproved[tokenId] = spender;
        emit Approval(_owner, spender, tokenId);
    }

    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0), "Zero Address");
        require(_ownerOf[tokenId].tokenHolder == address(0), "Already Exists");

        unchecked {
            _addressData[to].balance++;
        }

        _ownerOf[tokenId].tokenHolder = to;
        _ownerOf[tokenId].timestampHolder = uint96(block.timestamp);
        emit Transfer(address(0), to, tokenId);
    }

    function _safeMint(address to, uint256 tokenId) internal {
        _mint(to, tokenId);

        require(to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), tokenId, "") ==
                ERC721TokenReceiver.onERC721Received.selector,
            "Unsafe Mint"
        );
    }

    function _safeMint(address to, uint256 tokenId, bytes memory data) internal {
        _mint(to, tokenId);

        require(to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), tokenId, data) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "Unsafe Mint"
        );
    }

    function _burn(uint256 tokenId) internal {
        address _owner = _ownerOf[tokenId].tokenHolder;
        require(_owner != address(0), "Nonexistent Token");

        unchecked {
            _addressData[_owner].balance--;
        }

        delete _ownerOf[tokenId];
        delete getApproved[tokenId];

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

    function baseURI() public view virtual returns (string memory) {
        return '';
    }

    function tokenURI(uint256 tokenId) public view returns (string memory) {
        require(_ownerOf[tokenId].tokenHolder != address(0), "Nonexistent Token");
        string memory _baseURI = baseURI();
        return bytes(_baseURI).length > 0 ? string(abi.encodePacked(_baseURI, tokenId.toString())) : '';
    }

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 ||
            interfaceId == 0x80ac58cd ||
            interfaceId == 0x5b5e139f;
    }

    function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external {
        require(msg.sender == address(endpoint)); 
        require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), 
            "NonblockingReceiver: invalid source sending contract");

        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
        } catch {
            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 {
        require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge.");
        _LzReceive( _srcChainId, _srcAddress, _nonce, _payload);
    }

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

    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 {
        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");
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

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

    function renounceOwnership() public onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner == address(0)) revert NewOwnerAddressZero();
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        address oldOwner = owner;
        owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    modifier onlyOwner() {
        if (owner != msg.sender) revert CallerNotOwner();
        _;
    }

}

abstract contract ERC721TokenReceiver {
    function onERC721Received(address, address, uint256, bytes calldata) external virtual returns (bytes4) {
        return ERC721TokenReceiver.onERC721Received.selector;
    }
}

contract Cyber is ERC721Omni {

    string private _baseURI = "ipfs://QmS84uLAUvGLverNnvyU8YhsHKJi6E3WnfvuD7qmRmBos2/";
    uint256 private constant maximumSupply = 6600;
    uint256 public publicMintedCap = 1980;

    uint256 public totalSupply;
    uint256 public publicMinted;
    uint256 public gasForLzReceive = 350000;
    bool public depreciatedMint;
    bool public publicStatus;
    bool public huntlistStatus;
    bytes32 public merkleRoot = 0xd6fbbe52742f9b344f0cec438e6e560e182c4aec6a42bbf8e944f227632ba0b3;

    constructor(address _lzEndpoint) ERC721Omni("Cyber", "Hunters") { 
        endpoint = ILayerZeroEndpoint(_lzEndpoint); 
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "Contract Caller");
        _;
    }

    function donate() external payable {
        // thank you friend!
    }

    function traverseChains(uint16 _chainId, uint 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(tokenId);
        totalSupply--;

        bytes memory payload = abi.encode(msg.sender, tokenId);
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(version, gasForLzReceive);

        (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams);
        
        require(msg.value >= messageFee, "msg.value cannot cover messageFee. Requires additional gas");

        endpoint.send{value: msg.value}(
            _chainId,                           // Endpoint chainId
            trustedRemoteLookup[_chainId],      // Endpoint contract
            payload,                            // Encoded bytes
            payable(msg.sender),                // Excess fund destination address
            address(0x0),                       // Unused
            adapterParams                       // Transaction Parameters 
        );
    }

    function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) override internal {
        (address toAddr, uint tokenId) = abi.decode(_payload, (address, uint));
        _mint(toAddr, tokenId);
        totalSupply++;
    }

    function publicMint() external callerIsUser {
        require(publicStatus, "Public mint not active");
        require(totalSupply < maximumSupply, "Will exceed maximum supply");

        unchecked {
            require(publicMinted++ < publicMintedCap, "Public supply depleted");
            _mint(msg.sender, totalSupply++);
        }
   }

   function huntlistMint(bytes32[] calldata _proof) external callerIsUser {
       require(huntlistStatus, "Huntlist mint not active");
        require(verifyProof(_proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "Not on Huntlist");
        uint256 temporarySupply = totalSupply;
        unchecked {
            require(temporarySupply + 1 < maximumSupply, "Will exceed max supply");
            require(_addressData[msg.sender].huntlistMinted == 0, "Insufficient Mints Remaining");
            _addressData[msg.sender].huntlistMinted += uint128(2);
        }
        _mint(msg.sender, temporarySupply++);
        _mint(msg.sender, temporarySupply++);
        totalSupply = temporarySupply;
   }

   function verifyProof(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        uint256 iterations = proof.length;
        for (uint256 i; i < iterations; ) {
            bytes32 proofElement = proof[i++];

            if (computedHash <= proofElement) {
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }

        }
        return computedHash == root;
    }

    function burnHunter(uint256 tokenId) external {
       require(depreciatedMint, "Mint is still active.");
       require(msg.sender == ownerOf(tokenId) || isApprovedForAll[ownerOf(tokenId)][msg.sender] || msg.sender == getApproved[tokenId], "Lacks Permissions");
       _burn(tokenId);
       totalSupply--;
   }

   function setPublicState(bool _state) external onlyOwner {
       require(!depreciatedMint, "Mint is depreciated.");
       publicStatus = _state;
   }

   function setHuntlistState(bool _state) external onlyOwner {
       require(!depreciatedMint, "Mint is depreciated.");
       huntlistStatus = _state;
   }

   function setPublicMintSupply(uint256 _supply) external onlyOwner {
       require(!depreciatedMint, "Mint is depreciated.");
       require(_supply > publicMintedCap, "Cannot reduce mint supply");
       require(_supply <= maximumSupply, "Cannot exceed maximum supply");
       publicMintedCap = _supply;
   }

  function setRoot(bytes32 _newROOT) external onlyOwner {
        merkleRoot = _newROOT;
    }

  function depreciateMint() external onlyOwner {
      require(!depreciatedMint, "Mint is already depreciated.");
      delete publicStatus;
      delete huntlistStatus;
      depreciatedMint = true;
      address deployer = msg.sender;
      uint256 timestamp = block.timestamp;

        for (uint256 i; i < 66; ){
            _ownerOf[i].tokenHolder = deployer;
            _ownerOf[i].timestampHolder = uint96(timestamp);
            unchecked {
                emit Transfer(address(0), deployer, i++);
            }
        }

        unchecked {
            _addressData[deployer].balance += 66;
            totalSupply += 66;
        }
  }

  function setBaseURI(string memory _newURI) external onlyOwner {
      _baseURI = _newURI;
  }

  function setGasForDestinationLzReceive(uint _newGasValue) external onlyOwner {
      gasForLzReceive = _newGasValue;
  }

  function setLzEndpoint(address _lzEndpoint) external onlyOwner {
      endpoint = ILayerZeroEndpoint(_lzEndpoint);
  }

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

  function withdrawDonations() external onlyOwner {
      uint256 currentBalance = address(this).balance;
      (bool sent, ) = address(msg.sender).call{value: currentBalance}('');
      require(sent, "Transfer Error");    
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallerNotOwner","type":"error"},{"inputs":[],"name":"NewOwnerAddressZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnHunter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depreciateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depreciatedMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"durationTimestamp","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":[],"name":"gasForLzReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"huntlistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"huntlistMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"huntlistStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintedCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newGasValue","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setHuntlistState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"name":"setLzEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setPublicMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newROOT","type":"bytes32"}],"name":"setRoot","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"withdrawDonations","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e060405260366080818152906200341660a03980516200002991600a9160209091019062000173565b506107bc600b5562055730600e557fd6fbbe52742f9b344f0cec438e6e560e182c4aec6a42bbf8e944f227632ba0b36010553480156200006857600080fd5b506040516200344c3803806200344c8339810160408190526200008b9162000219565b604080518082018252600581526421bcb132b960d91b60208083019182528351808501909452600784526648756e7465727360c81b908401528151919291620000d79160009162000173565b508051620000ed90600190602084019062000173565b50620000f93362000121565b5050600380546001600160a01b0319166001600160a01b039290921691909117905562000287565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000181906200024b565b90600052602060002090601f016020900481019282620001a55760008555620001f0565b82601f10620001c057805160ff1916838001178555620001f0565b82800160010185558215620001f0579182015b82811115620001f0578251825591602001919060010190620001d3565b50620001fe92915062000202565b5090565b5b80821115620001fe576000815560010162000203565b6000602082840312156200022c57600080fd5b81516001600160a01b03811681146200024457600080fd5b9392505050565b600181811c908216806200026057607f821691505b6020821081036200028157634e487b7160e01b600052602260045260246000fd5b50919050565b61317f80620002976000396000f3fe6080604052600436106102875760003560e01c80638d3360921161015a578063c87b56dd116100c1578063dab5f3401161007a578063dab5f340146107d5578063e985e9c5146107f5578063eb8d72b714610830578063ed88c68e146102ac578063f2fde38b14610850578063f91798b11461087057600080fd5b8063c87b56dd1461073a578063ce1b088a1461075a578063cf89fa031461076f578063d1deba1f14610782578063d6fa149614610795578063d9331a11146107b557600080fd5b8063a4f4f8af11610113578063a4f4f8af14610671578063a7b8e90f14610687578063b3276148146106a7578063b6819822146106e4578063b88d4fde146106fa578063c48156af1461071a57600080fd5b80638d336092146105715780638da5cb5b146105915780638ee74912146105b1578063943fb8721461061c57806395d89b411461063c578063a22cb4651461065157600080fd5b806326092b83116101fe5780636352211e116101b75780636352211e146104c75780636c0360eb146104e757806370a08231146104fc578063715018a61461051c5780637533d788146105315780637f98be5f1461055157600080fd5b806326092b83146104275780632eb4a7ab1461043c5780633fee0c621461045257806342842e0e1461046757806355f804b31461048757806359c0cc22146104a757600080fd5b80630db9101c116102505780630db9101c146103735780630e43f355146103a15780631251c02b146103bb57806318160ddd146103d15780631c37a822146103e757806323b872dd1461040757600080fd5b80621d35671461028c57806301ffc9a7146102ae57806306fdde03146102e3578063081812fc14610305578063095ea7b314610353575b600080fd5b34801561029857600080fd5b506102ac6102a7366004612693565b61088f565b005b3480156102ba57600080fd5b506102ce6102c936600461272d565b610a89565b60405190151581526020015b60405180910390f35b3480156102ef57600080fd5b506102f8610adb565b6040516102da91906127a2565b34801561031157600080fd5b5061033b6103203660046127b5565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102da565b34801561035f57600080fd5b506102ac61036e3660046127e3565b610b69565b34801561037f57600080fd5b5061039361038e36600461280f565b610c2a565b6040519081526020016102da565b3480156103ad57600080fd5b50600f546102ce9060ff1681565b3480156103c757600080fd5b50610393600b5481565b3480156103dd57600080fd5b50610393600c5481565b3480156103f357600080fd5b506102ac610402366004612693565b610c7e565b34801561041357600080fd5b506102ac61042236600461282c565b610ced565b34801561043357600080fd5b506102ac610e8b565b34801561044857600080fd5b5061039360105481565b34801561045e57600080fd5b506102ac610fb9565b34801561047357600080fd5b506102ac61048236600461282c565b6110ea565b34801561049357600080fd5b506102ac6104a236600461286d565b6111bf565b3480156104b357600080fd5b506102ac6104c23660046128c5565b611201565b3480156104d357600080fd5b5061033b6104e23660046127b5565b61126b565b3480156104f357600080fd5b506102f86112bb565b34801561050857600080fd5b5061039361051736600461280f565b61134d565b34801561052857600080fd5b506102ac61139a565b34801561053d57600080fd5b506102f861054c3660046128e0565b6113cf565b34801561055d57600080fd5b506102ac61056c3660046127b5565b6113e8565b34801561057d57600080fd5b506102ac61058c3660046128fb565b6114eb565b34801561059d57600080fd5b5060025461033b906001600160a01b031681565b3480156105bd57600080fd5b506106076105cc36600461296f565b600660209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b604080519283526020830191909152016102da565b34801561062857600080fd5b506102ac6106373660046127b5565b611725565b34801561064857600080fd5b506102f8611755565b34801561065d57600080fd5b506102ac61066c3660046129c5565b611762565b34801561067d57600080fd5b50610393600d5481565b34801561069357600080fd5b506102ac6106a23660046127b5565b6117ce565b3480156106b357600080fd5b506103936106c23660046127b5565b600090815260046020526040902054600160a01b90046001600160601b031690565b3480156106f057600080fd5b50610393600e5481565b34801561070657600080fd5b506102ac610715366004612a42565b6118c0565b34801561072657600080fd5b506102ac6107353660046128c5565b611985565b34801561074657600080fd5b506102f86107553660046127b5565b6119ed565b34801561076657600080fd5b506102ac611a80565b6102ac61077d366004612ab4565b611b36565b6102ac610790366004612ad0565b611e0d565b3480156107a157600080fd5b50600f546102ce9062010000900460ff1681565b3480156107c157600080fd5b506102ac6107d036600461280f565b611f9a565b3480156107e157600080fd5b506102ac6107f03660046127b5565b611fe7565b34801561080157600080fd5b506102ce610810366004612b4a565b600960209081526000928352604080842090915290825290205460ff1681565b34801561083c57600080fd5b506102ac61084b366004612b83565b612017565b34801561085c57600080fd5b506102ac61086b36600461280f565b612060565b34801561087c57600080fd5b50600f546102ce90610100900460ff1681565b6003546001600160a01b031633146108a657600080fd5b61ffff8416600090815260076020526040902080546108c490612bd5565b90508351148015610903575061ffff84166000908152600760205260409081902090516108f19190612c0f565b60405180910390208380519060200120145b6109715760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a8229061099a908790879087908790600401612c81565b600060405180830381600087803b1580156109b457600080fd5b505af19250505080156109c5575060015b610a83576040518060400160405280825181526020018280519060200120815250600660008661ffff1661ffff16815260200190815260200160002084604051610a0f9190612cca565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610a7a908690869086908690612c81565b60405180910390a15b50505050565b60006301ffc9a760e01b6001600160e01b031983161480610aba57506380ac58cd60e01b6001600160e01b03198316145b80610ad55750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610ae890612bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612bd5565b8015610b615780601f10610b3657610100808354040283529160200191610b61565b820191906000526020600020905b815481529060010190602001808311610b4457829003601f168201915b505050505081565b6000818152600460205260409020546001600160a01b031633811480610bb257506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b610bce5760405162461bcd60e51b815260040161096890612ce6565b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006001600160a01b038216610c525760405162461bcd60e51b815260040161096890612d11565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b333014610ce15760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b6064820152608401610968565b610a83848484846120be565b6000818152600460205260409020546001600160a01b03848116911614610d425760405162461bcd60e51b81526020600482015260096024820152682737b71027bbb732b960b91b6044820152606401610968565b6001600160a01b038216610d685760405162461bcd60e51b815260040161096890612d11565b336001600160a01b0384161480610da257506001600160a01b038316600090815260096020908152604080832033845290915290205460ff165b80610dc357506000818152600860205260409020546001600160a01b031633145b610ddf5760405162461bcd60e51b815260040161096890612ce6565b6001600160a01b03838116600081815260056020908152604080832080546001600160801b03198082166001600160801b039283166000190183161790925595881680855282852080549283169288166001019097169190911790955585835260048252808320600160a01b426001600160601b03160286179055600890915280822080546001600160a01b0319169055518493929160008051602061312a83398151915291a4505050565b323314610eaa5760405162461bcd60e51b815260040161096890612d37565b600f54610100900460ff16610efa5760405162461bcd60e51b81526020600482015260166024820152755075626c6963206d696e74206e6f742061637469766560501b6044820152606401610968565b6119c8600c5410610f4d5760405162461bcd60e51b815260206004820152601a60248201527f57696c6c20657863656564206d6178696d756d20737570706c790000000000006044820152606401610968565b600b54600d80546001810190915510610fa15760405162461bcd60e51b8152602060048201526016602482015275141d589b1a58c81cdd5c1c1b1e4819195c1b195d195960521b6044820152606401610968565b600c805460018101909155610fb7903390612100565b565b6002546001600160a01b03163314610fe457604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff16156110375760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420697320616c72656164792064657072656369617465642e000000006044820152606401610968565b600f805462ffffff19166001179055334260005b60428110156110a3576000818152600460205260408082206001600160a01b038616600160a01b6001600160601b03871602811790915590516001840193929060008051602061312a833981519152908290a461104b565b50506001600160a01b0316600090815260056020526040902080546001600160801b0319811660426001600160801b03928316810190921617909155600c80549091019055565b6110f5838383610ced565b6001600160a01b0382163b158061119e5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561116e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111929190612d60565b6001600160e01b031916145b6111ba5760405162461bcd60e51b815260040161096890612d7d565b505050565b6002546001600160a01b031633146111ea57604051632e6c18c960e11b815260040160405180910390fd5b80516111fd90600a9060208401906124ad565b5050565b6002546001600160a01b0316331461122c57604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff161561124f5760405162461bcd60e51b815260040161096890612da6565b600f8054911515620100000262ff000019909216919091179055565b6000818152600460205260408120546001600160a01b031661129f5760405162461bcd60e51b815260040161096890612dd4565b506000908152600460205260409020546001600160a01b031690565b6060600a80546112ca90612bd5565b80601f01602080910402602001604051908101604052809291908181526020018280546112f690612bd5565b80156113435780601f1061131857610100808354040283529160200191611343565b820191906000526020600020905b81548152906001019060200180831161132657829003601f168201915b5050505050905090565b60006001600160a01b0382166113755760405162461bcd60e51b815260040161096890612d11565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6002546001600160a01b031633146113c557604051632e6c18c960e11b815260040160405180910390fd5b610fb760006121f2565b60076020526000908152604090208054610ae890612bd5565b600f5460ff166114325760405162461bcd60e51b815260206004820152601560248201527426b4b73a1034b99039ba34b6361030b1ba34bb329760591b6044820152606401610968565b61143b8161126b565b6001600160a01b0316336001600160a01b0316148061148d5750600960006114628361126b565b6001600160a01b031681526020808201929092526040908101600090812033825290925290205460ff165b806114ae57506000818152600860205260409020546001600160a01b031633145b6114ca5760405162461bcd60e51b815260040161096890612ce6565b6114d381612244565b600c80549060006114e383612e15565b919050555050565b32331461150a5760405162461bcd60e51b815260040161096890612d37565b600f5462010000900460ff1661155d5760405162461bcd60e51b815260206004820152601860248201527748756e746c697374206d696e74206e6f742061637469766560401b6044820152606401610968565b6115d2828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506010546040516bffffffffffffffffffffffff193360601b1660208201529092506034019050604051602081830303815290604052805190602001206122f4565b6116105760405162461bcd60e51b815260206004820152600f60248201526e139bdd081bdb88121d5b9d1b1a5cdd608a1b6044820152606401610968565b600c546119c860018201106116605760405162461bcd60e51b815260206004820152601660248201527557696c6c20657863656564206d617820737570706c7960501b6044820152606401610968565b33600090815260056020526040902054600160801b90046001600160801b0316156116cd5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74204d696e74732052656d61696e696e67000000006044820152606401610968565b33600081815260056020526040902080546001600160801b03600160801b80830482166002018216029116179055611710908261170981612e2c565b9350612100565b61171e338261170981612e2c565b600c555050565b6002546001600160a01b0316331461175057604051632e6c18c960e11b815260040160405180910390fd5b600e55565b60018054610ae890612bd5565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002546001600160a01b031633146117f957604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff161561181c5760405162461bcd60e51b815260040161096890612da6565b600b5481116118695760405162461bcd60e51b815260206004820152601960248201527843616e6e6f7420726564756365206d696e7420737570706c7960381b6044820152606401610968565b6119c88111156118bb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420657863656564206d6178696d756d20737570706c79000000006044820152606401610968565b600b55565b6118cb858585610ced565b6001600160a01b0384163b15806119625750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906119139033908a90899089908990600401612e6e565b6020604051808303816000875af1158015611932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119569190612d60565b6001600160e01b031916145b61197e5760405162461bcd60e51b815260040161096890612d7d565b5050505050565b6002546001600160a01b031633146119b057604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff16156119d35760405162461bcd60e51b815260040161096890612da6565b600f80549115156101000261ff0019909216919091179055565b6000818152600460205260409020546060906001600160a01b0316611a245760405162461bcd60e51b815260040161096890612dd4565b6000611a2e6112bb565b90506000815111611a4e5760405180602001604052806000815250611a79565b80611a58846123a5565b604051602001611a69929190612ea2565b6040516020818303038152906040525b9392505050565b6002546001600160a01b03163314611aab57604051632e6c18c960e11b815260040160405180910390fd5b6040514790600090339083908381818185875af1925050503d8060008114611aef576040519150601f19603f3d011682016040523d82523d6000602084013e611af4565b606091505b50509050806111fd5760405162461bcd60e51b815260206004820152600e60248201526d2a3930b739b332b91022b93937b960911b6044820152606401610968565b611b3f8161126b565b6001600160a01b0316336001600160a01b031614611baa5760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f20747261766572604482015261736560f01b6064820152608401610968565b61ffff821660009081526007602052604081208054611bc890612bd5565b905011611c2e5760405162461bcd60e51b815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201526d189b1948199bdc881d1c985d995b60921b6064820152608401610968565b611c3781612244565b600c8054906000611c4783612e15565b909155505060408051336020820152808201839052815180820383018152606082018352600e54600160f01b60808401526082808401919091528351808403909101815260a283019384905260035463040a7bb160e41b90945290926001926000916001600160a01b0316906340a7bb1090611ccf908990309089908790899060a601612ed1565b6040805180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190612f25565b50905080341015611d885760405162461bcd60e51b815260206004820152603a60248201527f6d73672e76616c75652063616e6e6f7420636f766572206d657373616765466560448201527f652e205265717569726573206164646974696f6e616c206761730000000000006064820152608401610968565b60035461ffff8716600090815260076020526040808220905162c5803160e81b81526001600160a01b039093169263c5803100923492611dd3928c928b913391908b90600401612f49565b6000604051808303818588803b158015611dec57600080fd5b505af1158015611e00573d6000803e3d6000fd5b5050505050505050505050565b61ffff85166000908152600660205260408082209051611e2e908790612cca565b90815260408051602092819003830190206001600160401b0387166000908152925290206001810154909150611eb55760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b6064820152608401610968565b805482148015611edf575080600101548383604051611ed5929190613029565b6040518091039020145b611f2b5760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610968565b60008082556001820155604051630e1bd41160e11b81523090631c37a82290611f609089908990899089908990600401613039565b600060405180830381600087803b158015611f7a57600080fd5b505af1158015611f8e573d6000803e3d6000fd5b50505050505050505050565b6002546001600160a01b03163314611fc557604051632e6c18c960e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461201257604051632e6c18c960e11b815260040160405180910390fd5b601055565b6002546001600160a01b0316331461204257604051632e6c18c960e11b815260040160405180910390fd5b61ffff83166000908152600760205260409020610a83908383612531565b6002546001600160a01b0316331461208b57604051632e6c18c960e11b815260040160405180910390fd5b6001600160a01b0381166120b257604051631a10c9a360e21b815260040160405180910390fd5b6120bb816121f2565b50565b600080828060200190518101906120d59190613078565b915091506120e38282612100565b600c80549060006120f383612e2c565b9190505550505050505050565b6001600160a01b0382166121265760405162461bcd60e51b815260040161096890612d11565b6000818152600460205260409020546001600160a01b03161561217c5760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792045786973747360901b6044820152606401610968565b6001600160a01b038216600081815260056020908152604080832080546001600160801b03808216600101166001600160801b031990911617905584835260049091528082206001600160601b034216600160a01b0284179055518392919060008051602061312a833981519152908290a45050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818152600460205260409020546001600160a01b0316806122795760405162461bcd60e51b815260040161096890612dd4565b6001600160a01b038116600081815260056020908152604080832080546001600160801b031981166001600160801b039182166000190190911617905585835260048252808320839055600890915280822080546001600160a01b03191690555184929060008051602061312a833981519152908390a45050565b82516000908290825b81811015612399576000878261231281612e2c565b935081518110612324576123246130a6565b60200260200101519050808411612366576040805160208101869052908101829052606001604051602081830303815290604052805190602001209350612393565b60408051602081018390529081018590526060016040516020818303038152906040528051906020012093505b506122fd565b50509092149392505050565b6060816000036123cc5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123f657806123e081612e2c565b91506123ef9050600a836130d2565b91506123d0565b6000816001600160401b03811115612410576124106125d1565b6040519080825280601f01601f19166020018201604052801561243a576020820181803683370190505b5090505b84156124a55761244f6001836130e6565b915061245c600a866130fd565b612467906030613111565b60f81b81838151811061247c5761247c6130a6565b60200101906001600160f81b031916908160001a90535061249e600a866130d2565b945061243e565b949350505050565b8280546124b990612bd5565b90600052602060002090601f0160209004810192826124db5760008555612521565b82601f106124f457805160ff1916838001178555612521565b82800160010185558215612521579182015b82811115612521578251825591602001919060010190612506565b5061252d9291506125a5565b5090565b82805461253d90612bd5565b90600052602060002090601f01602090048101928261255f5760008555612521565b82601f106125785782800160ff19823516178555612521565b82800160010185558215612521579182015b8281111561252157823582559160200191906001019061258a565b5b8082111561252d57600081556001016125a6565b803561ffff811681146125cc57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612601576126016125d1565b604051601f8501601f19908116603f01168101908282118183101715612629576126296125d1565b8160405280935085815286868601111561264257600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261266d57600080fd5b611a79838335602085016125e7565b80356001600160401b03811681146125cc57600080fd5b600080600080608085870312156126a957600080fd5b6126b2856125ba565b935060208501356001600160401b03808211156126ce57600080fd5b6126da8883890161265c565b94506126e86040880161267c565b935060608701359150808211156126fe57600080fd5b5061270b8782880161265c565b91505092959194509250565b6001600160e01b0319811681146120bb57600080fd5b60006020828403121561273f57600080fd5b8135611a7981612717565b60005b8381101561276557818101518382015260200161274d565b83811115610a835750506000910152565b6000815180845261278e81602086016020860161274a565b601f01601f19169290920160200192915050565b602081526000611a796020830184612776565b6000602082840312156127c757600080fd5b5035919050565b6001600160a01b03811681146120bb57600080fd5b600080604083850312156127f657600080fd5b8235612801816127ce565b946020939093013593505050565b60006020828403121561282157600080fd5b8135611a79816127ce565b60008060006060848603121561284157600080fd5b833561284c816127ce565b9250602084013561285c816127ce565b929592945050506040919091013590565b60006020828403121561287f57600080fd5b81356001600160401b0381111561289557600080fd5b8201601f810184136128a657600080fd5b6124a5848235602084016125e7565b803580151581146125cc57600080fd5b6000602082840312156128d757600080fd5b611a79826128b5565b6000602082840312156128f257600080fd5b611a79826125ba565b6000806020838503121561290e57600080fd5b82356001600160401b038082111561292557600080fd5b818501915085601f83011261293957600080fd5b81358181111561294857600080fd5b8660208260051b850101111561295d57600080fd5b60209290920196919550909350505050565b60008060006060848603121561298457600080fd5b61298d846125ba565b925060208401356001600160401b038111156129a857600080fd5b6129b48682870161265c565b925050604084013590509250925092565b600080604083850312156129d857600080fd5b82356129e3816127ce565b91506129f1602084016128b5565b90509250929050565b60008083601f840112612a0c57600080fd5b5081356001600160401b03811115612a2357600080fd5b602083019150836020828501011115612a3b57600080fd5b9250929050565b600080600080600060808688031215612a5a57600080fd5b8535612a65816127ce565b94506020860135612a75816127ce565b93506040860135925060608601356001600160401b03811115612a9757600080fd5b612aa3888289016129fa565b969995985093965092949392505050565b60008060408385031215612ac757600080fd5b612801836125ba565b600080600080600060808688031215612ae857600080fd5b612af1866125ba565b945060208601356001600160401b0380821115612b0d57600080fd5b612b1989838a0161265c565b9550612b276040890161267c565b94506060880135915080821115612b3d57600080fd5b50612aa3888289016129fa565b60008060408385031215612b5d57600080fd5b8235612b68816127ce565b91506020830135612b78816127ce565b809150509250929050565b600080600060408486031215612b9857600080fd5b612ba1846125ba565b925060208401356001600160401b03811115612bbc57600080fd5b612bc8868287016129fa565b9497909650939450505050565b600181811c90821680612be957607f821691505b602082108103612c0957634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612c1d81612bd5565b60018281168015612c355760018114612c4657612c75565b60ff19841687528287019450612c75565b8760005260208060002060005b85811015612c6c5781548a820152908401908201612c53565b50505082870194505b50929695505050505050565b61ffff85168152608060208201526000612c9e6080830186612776565b6001600160401b03851660408401528281036060840152612cbf8185612776565b979650505050505050565b60008251612cdc81846020870161274a565b9190910192915050565b6020808252601190820152704c61636b73205065726d697373696f6e7360781b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600f908201526e21b7b73a3930b1ba1021b0b63632b960891b604082015260600190565b600060208284031215612d7257600080fd5b8151611a7981612717565b6020808252600f908201526e2ab739b0b332902a3930b739b332b960891b604082015260600190565b60208082526014908201527326b4b73a1034b9903232b83932b1b4b0ba32b21760611b604082015260600190565b6020808252601190820152702737b732bc34b9ba32b73a102a37b5b2b760791b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081612e2457612e24612dff565b506000190190565b600060018201612e3e57612e3e612dff565b5060010190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0386811682528516602082015260408101849052608060608201819052600090612cbf9083018486612e45565b60008351612eb481846020880161274a565b835190830190612ec881836020880161274a565b01949350505050565b61ffff861681526001600160a01b038516602082015260a060408201819052600090612eff90830186612776565b84151560608401528281036080840152612f198185612776565b98975050505050505050565b60008060408385031215612f3857600080fd5b505080516020909101519092909150565b61ffff871681526000602060c08184015260008854612f6781612bd5565b8060c087015260e0600180841660008114612f895760018114612f9e57612fcc565b60ff1985168984015261010089019550612fcc565b8d6000528660002060005b85811015612fc45781548b8201860152908301908801612fa9565b8a0184019650505b50505050508381036040850152612fe38189612776565b915050612ffb60608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a084015261301c8185612776565b9998505050505050505050565b8183823760009101908152919050565b61ffff861681526080602082015260006130566080830187612776565b6001600160401b03861660408401528281036060840152612f19818587612e45565b6000806040838503121561308b57600080fd5b8251613096816127ce565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826130e1576130e16130bc565b500490565b6000828210156130f8576130f8612dff565b500390565b60008261310c5761310c6130bc565b500690565b6000821982111561312457613124612dff565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a04b8564bb0d02d95080bf13b158d1f063752ebb1ae9a74121788d4480bf9e6764736f6c634300080e0033697066733a2f2f516d533834754c415576474c7665724e6e76795538596873484b4a69364533576e6676754437716d526d426f73322f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675

Deployed Bytecode

0x6080604052600436106102875760003560e01c80638d3360921161015a578063c87b56dd116100c1578063dab5f3401161007a578063dab5f340146107d5578063e985e9c5146107f5578063eb8d72b714610830578063ed88c68e146102ac578063f2fde38b14610850578063f91798b11461087057600080fd5b8063c87b56dd1461073a578063ce1b088a1461075a578063cf89fa031461076f578063d1deba1f14610782578063d6fa149614610795578063d9331a11146107b557600080fd5b8063a4f4f8af11610113578063a4f4f8af14610671578063a7b8e90f14610687578063b3276148146106a7578063b6819822146106e4578063b88d4fde146106fa578063c48156af1461071a57600080fd5b80638d336092146105715780638da5cb5b146105915780638ee74912146105b1578063943fb8721461061c57806395d89b411461063c578063a22cb4651461065157600080fd5b806326092b83116101fe5780636352211e116101b75780636352211e146104c75780636c0360eb146104e757806370a08231146104fc578063715018a61461051c5780637533d788146105315780637f98be5f1461055157600080fd5b806326092b83146104275780632eb4a7ab1461043c5780633fee0c621461045257806342842e0e1461046757806355f804b31461048757806359c0cc22146104a757600080fd5b80630db9101c116102505780630db9101c146103735780630e43f355146103a15780631251c02b146103bb57806318160ddd146103d15780631c37a822146103e757806323b872dd1461040757600080fd5b80621d35671461028c57806301ffc9a7146102ae57806306fdde03146102e3578063081812fc14610305578063095ea7b314610353575b600080fd5b34801561029857600080fd5b506102ac6102a7366004612693565b61088f565b005b3480156102ba57600080fd5b506102ce6102c936600461272d565b610a89565b60405190151581526020015b60405180910390f35b3480156102ef57600080fd5b506102f8610adb565b6040516102da91906127a2565b34801561031157600080fd5b5061033b6103203660046127b5565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102da565b34801561035f57600080fd5b506102ac61036e3660046127e3565b610b69565b34801561037f57600080fd5b5061039361038e36600461280f565b610c2a565b6040519081526020016102da565b3480156103ad57600080fd5b50600f546102ce9060ff1681565b3480156103c757600080fd5b50610393600b5481565b3480156103dd57600080fd5b50610393600c5481565b3480156103f357600080fd5b506102ac610402366004612693565b610c7e565b34801561041357600080fd5b506102ac61042236600461282c565b610ced565b34801561043357600080fd5b506102ac610e8b565b34801561044857600080fd5b5061039360105481565b34801561045e57600080fd5b506102ac610fb9565b34801561047357600080fd5b506102ac61048236600461282c565b6110ea565b34801561049357600080fd5b506102ac6104a236600461286d565b6111bf565b3480156104b357600080fd5b506102ac6104c23660046128c5565b611201565b3480156104d357600080fd5b5061033b6104e23660046127b5565b61126b565b3480156104f357600080fd5b506102f86112bb565b34801561050857600080fd5b5061039361051736600461280f565b61134d565b34801561052857600080fd5b506102ac61139a565b34801561053d57600080fd5b506102f861054c3660046128e0565b6113cf565b34801561055d57600080fd5b506102ac61056c3660046127b5565b6113e8565b34801561057d57600080fd5b506102ac61058c3660046128fb565b6114eb565b34801561059d57600080fd5b5060025461033b906001600160a01b031681565b3480156105bd57600080fd5b506106076105cc36600461296f565b600660209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b604080519283526020830191909152016102da565b34801561062857600080fd5b506102ac6106373660046127b5565b611725565b34801561064857600080fd5b506102f8611755565b34801561065d57600080fd5b506102ac61066c3660046129c5565b611762565b34801561067d57600080fd5b50610393600d5481565b34801561069357600080fd5b506102ac6106a23660046127b5565b6117ce565b3480156106b357600080fd5b506103936106c23660046127b5565b600090815260046020526040902054600160a01b90046001600160601b031690565b3480156106f057600080fd5b50610393600e5481565b34801561070657600080fd5b506102ac610715366004612a42565b6118c0565b34801561072657600080fd5b506102ac6107353660046128c5565b611985565b34801561074657600080fd5b506102f86107553660046127b5565b6119ed565b34801561076657600080fd5b506102ac611a80565b6102ac61077d366004612ab4565b611b36565b6102ac610790366004612ad0565b611e0d565b3480156107a157600080fd5b50600f546102ce9062010000900460ff1681565b3480156107c157600080fd5b506102ac6107d036600461280f565b611f9a565b3480156107e157600080fd5b506102ac6107f03660046127b5565b611fe7565b34801561080157600080fd5b506102ce610810366004612b4a565b600960209081526000928352604080842090915290825290205460ff1681565b34801561083c57600080fd5b506102ac61084b366004612b83565b612017565b34801561085c57600080fd5b506102ac61086b36600461280f565b612060565b34801561087c57600080fd5b50600f546102ce90610100900460ff1681565b6003546001600160a01b031633146108a657600080fd5b61ffff8416600090815260076020526040902080546108c490612bd5565b90508351148015610903575061ffff84166000908152600760205260409081902090516108f19190612c0f565b60405180910390208380519060200120145b6109715760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a8229061099a908790879087908790600401612c81565b600060405180830381600087803b1580156109b457600080fd5b505af19250505080156109c5575060015b610a83576040518060400160405280825181526020018280519060200120815250600660008661ffff1661ffff16815260200190815260200160002084604051610a0f9190612cca565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610a7a908690869086908690612c81565b60405180910390a15b50505050565b60006301ffc9a760e01b6001600160e01b031983161480610aba57506380ac58cd60e01b6001600160e01b03198316145b80610ad55750635b5e139f60e01b6001600160e01b03198316145b92915050565b60008054610ae890612bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490612bd5565b8015610b615780601f10610b3657610100808354040283529160200191610b61565b820191906000526020600020905b815481529060010190602001808311610b4457829003601f168201915b505050505081565b6000818152600460205260409020546001600160a01b031633811480610bb257506001600160a01b038116600090815260096020908152604080832033845290915290205460ff165b610bce5760405162461bcd60e51b815260040161096890612ce6565b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006001600160a01b038216610c525760405162461bcd60e51b815260040161096890612d11565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b333014610ce15760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b6064820152608401610968565b610a83848484846120be565b6000818152600460205260409020546001600160a01b03848116911614610d425760405162461bcd60e51b81526020600482015260096024820152682737b71027bbb732b960b91b6044820152606401610968565b6001600160a01b038216610d685760405162461bcd60e51b815260040161096890612d11565b336001600160a01b0384161480610da257506001600160a01b038316600090815260096020908152604080832033845290915290205460ff165b80610dc357506000818152600860205260409020546001600160a01b031633145b610ddf5760405162461bcd60e51b815260040161096890612ce6565b6001600160a01b03838116600081815260056020908152604080832080546001600160801b03198082166001600160801b039283166000190183161790925595881680855282852080549283169288166001019097169190911790955585835260048252808320600160a01b426001600160601b03160286179055600890915280822080546001600160a01b0319169055518493929160008051602061312a83398151915291a4505050565b323314610eaa5760405162461bcd60e51b815260040161096890612d37565b600f54610100900460ff16610efa5760405162461bcd60e51b81526020600482015260166024820152755075626c6963206d696e74206e6f742061637469766560501b6044820152606401610968565b6119c8600c5410610f4d5760405162461bcd60e51b815260206004820152601a60248201527f57696c6c20657863656564206d6178696d756d20737570706c790000000000006044820152606401610968565b600b54600d80546001810190915510610fa15760405162461bcd60e51b8152602060048201526016602482015275141d589b1a58c81cdd5c1c1b1e4819195c1b195d195960521b6044820152606401610968565b600c805460018101909155610fb7903390612100565b565b6002546001600160a01b03163314610fe457604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff16156110375760405162461bcd60e51b815260206004820152601c60248201527f4d696e7420697320616c72656164792064657072656369617465642e000000006044820152606401610968565b600f805462ffffff19166001179055334260005b60428110156110a3576000818152600460205260408082206001600160a01b038616600160a01b6001600160601b03871602811790915590516001840193929060008051602061312a833981519152908290a461104b565b50506001600160a01b0316600090815260056020526040902080546001600160801b0319811660426001600160801b03928316810190921617909155600c80549091019055565b6110f5838383610ced565b6001600160a01b0382163b158061119e5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561116e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111929190612d60565b6001600160e01b031916145b6111ba5760405162461bcd60e51b815260040161096890612d7d565b505050565b6002546001600160a01b031633146111ea57604051632e6c18c960e11b815260040160405180910390fd5b80516111fd90600a9060208401906124ad565b5050565b6002546001600160a01b0316331461122c57604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff161561124f5760405162461bcd60e51b815260040161096890612da6565b600f8054911515620100000262ff000019909216919091179055565b6000818152600460205260408120546001600160a01b031661129f5760405162461bcd60e51b815260040161096890612dd4565b506000908152600460205260409020546001600160a01b031690565b6060600a80546112ca90612bd5565b80601f01602080910402602001604051908101604052809291908181526020018280546112f690612bd5565b80156113435780601f1061131857610100808354040283529160200191611343565b820191906000526020600020905b81548152906001019060200180831161132657829003601f168201915b5050505050905090565b60006001600160a01b0382166113755760405162461bcd60e51b815260040161096890612d11565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6002546001600160a01b031633146113c557604051632e6c18c960e11b815260040160405180910390fd5b610fb760006121f2565b60076020526000908152604090208054610ae890612bd5565b600f5460ff166114325760405162461bcd60e51b815260206004820152601560248201527426b4b73a1034b99039ba34b6361030b1ba34bb329760591b6044820152606401610968565b61143b8161126b565b6001600160a01b0316336001600160a01b0316148061148d5750600960006114628361126b565b6001600160a01b031681526020808201929092526040908101600090812033825290925290205460ff165b806114ae57506000818152600860205260409020546001600160a01b031633145b6114ca5760405162461bcd60e51b815260040161096890612ce6565b6114d381612244565b600c80549060006114e383612e15565b919050555050565b32331461150a5760405162461bcd60e51b815260040161096890612d37565b600f5462010000900460ff1661155d5760405162461bcd60e51b815260206004820152601860248201527748756e746c697374206d696e74206e6f742061637469766560401b6044820152606401610968565b6115d2828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506010546040516bffffffffffffffffffffffff193360601b1660208201529092506034019050604051602081830303815290604052805190602001206122f4565b6116105760405162461bcd60e51b815260206004820152600f60248201526e139bdd081bdb88121d5b9d1b1a5cdd608a1b6044820152606401610968565b600c546119c860018201106116605760405162461bcd60e51b815260206004820152601660248201527557696c6c20657863656564206d617820737570706c7960501b6044820152606401610968565b33600090815260056020526040902054600160801b90046001600160801b0316156116cd5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74204d696e74732052656d61696e696e67000000006044820152606401610968565b33600081815260056020526040902080546001600160801b03600160801b80830482166002018216029116179055611710908261170981612e2c565b9350612100565b61171e338261170981612e2c565b600c555050565b6002546001600160a01b0316331461175057604051632e6c18c960e11b815260040160405180910390fd5b600e55565b60018054610ae890612bd5565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002546001600160a01b031633146117f957604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff161561181c5760405162461bcd60e51b815260040161096890612da6565b600b5481116118695760405162461bcd60e51b815260206004820152601960248201527843616e6e6f7420726564756365206d696e7420737570706c7960381b6044820152606401610968565b6119c88111156118bb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420657863656564206d6178696d756d20737570706c79000000006044820152606401610968565b600b55565b6118cb858585610ced565b6001600160a01b0384163b15806119625750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906119139033908a90899089908990600401612e6e565b6020604051808303816000875af1158015611932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119569190612d60565b6001600160e01b031916145b61197e5760405162461bcd60e51b815260040161096890612d7d565b5050505050565b6002546001600160a01b031633146119b057604051632e6c18c960e11b815260040160405180910390fd5b600f5460ff16156119d35760405162461bcd60e51b815260040161096890612da6565b600f80549115156101000261ff0019909216919091179055565b6000818152600460205260409020546060906001600160a01b0316611a245760405162461bcd60e51b815260040161096890612dd4565b6000611a2e6112bb565b90506000815111611a4e5760405180602001604052806000815250611a79565b80611a58846123a5565b604051602001611a69929190612ea2565b6040516020818303038152906040525b9392505050565b6002546001600160a01b03163314611aab57604051632e6c18c960e11b815260040160405180910390fd5b6040514790600090339083908381818185875af1925050503d8060008114611aef576040519150601f19603f3d011682016040523d82523d6000602084013e611af4565b606091505b50509050806111fd5760405162461bcd60e51b815260206004820152600e60248201526d2a3930b739b332b91022b93937b960911b6044820152606401610968565b611b3f8161126b565b6001600160a01b0316336001600160a01b031614611baa5760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f20747261766572604482015261736560f01b6064820152608401610968565b61ffff821660009081526007602052604081208054611bc890612bd5565b905011611c2e5760405162461bcd60e51b815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201526d189b1948199bdc881d1c985d995b60921b6064820152608401610968565b611c3781612244565b600c8054906000611c4783612e15565b909155505060408051336020820152808201839052815180820383018152606082018352600e54600160f01b60808401526082808401919091528351808403909101815260a283019384905260035463040a7bb160e41b90945290926001926000916001600160a01b0316906340a7bb1090611ccf908990309089908790899060a601612ed1565b6040805180830381865afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190612f25565b50905080341015611d885760405162461bcd60e51b815260206004820152603a60248201527f6d73672e76616c75652063616e6e6f7420636f766572206d657373616765466560448201527f652e205265717569726573206164646974696f6e616c206761730000000000006064820152608401610968565b60035461ffff8716600090815260076020526040808220905162c5803160e81b81526001600160a01b039093169263c5803100923492611dd3928c928b913391908b90600401612f49565b6000604051808303818588803b158015611dec57600080fd5b505af1158015611e00573d6000803e3d6000fd5b5050505050505050505050565b61ffff85166000908152600660205260408082209051611e2e908790612cca565b90815260408051602092819003830190206001600160401b0387166000908152925290206001810154909150611eb55760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b6064820152608401610968565b805482148015611edf575080600101548383604051611ed5929190613029565b6040518091039020145b611f2b5760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610968565b60008082556001820155604051630e1bd41160e11b81523090631c37a82290611f609089908990899089908990600401613039565b600060405180830381600087803b158015611f7a57600080fd5b505af1158015611f8e573d6000803e3d6000fd5b50505050505050505050565b6002546001600160a01b03163314611fc557604051632e6c18c960e11b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b0316331461201257604051632e6c18c960e11b815260040160405180910390fd5b601055565b6002546001600160a01b0316331461204257604051632e6c18c960e11b815260040160405180910390fd5b61ffff83166000908152600760205260409020610a83908383612531565b6002546001600160a01b0316331461208b57604051632e6c18c960e11b815260040160405180910390fd5b6001600160a01b0381166120b257604051631a10c9a360e21b815260040160405180910390fd5b6120bb816121f2565b50565b600080828060200190518101906120d59190613078565b915091506120e38282612100565b600c80549060006120f383612e2c565b9190505550505050505050565b6001600160a01b0382166121265760405162461bcd60e51b815260040161096890612d11565b6000818152600460205260409020546001600160a01b03161561217c5760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792045786973747360901b6044820152606401610968565b6001600160a01b038216600081815260056020908152604080832080546001600160801b03808216600101166001600160801b031990911617905584835260049091528082206001600160601b034216600160a01b0284179055518392919060008051602061312a833981519152908290a45050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818152600460205260409020546001600160a01b0316806122795760405162461bcd60e51b815260040161096890612dd4565b6001600160a01b038116600081815260056020908152604080832080546001600160801b031981166001600160801b039182166000190190911617905585835260048252808320839055600890915280822080546001600160a01b03191690555184929060008051602061312a833981519152908390a45050565b82516000908290825b81811015612399576000878261231281612e2c565b935081518110612324576123246130a6565b60200260200101519050808411612366576040805160208101869052908101829052606001604051602081830303815290604052805190602001209350612393565b60408051602081018390529081018590526060016040516020818303038152906040528051906020012093505b506122fd565b50509092149392505050565b6060816000036123cc5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156123f657806123e081612e2c565b91506123ef9050600a836130d2565b91506123d0565b6000816001600160401b03811115612410576124106125d1565b6040519080825280601f01601f19166020018201604052801561243a576020820181803683370190505b5090505b84156124a55761244f6001836130e6565b915061245c600a866130fd565b612467906030613111565b60f81b81838151811061247c5761247c6130a6565b60200101906001600160f81b031916908160001a90535061249e600a866130d2565b945061243e565b949350505050565b8280546124b990612bd5565b90600052602060002090601f0160209004810192826124db5760008555612521565b82601f106124f457805160ff1916838001178555612521565b82800160010185558215612521579182015b82811115612521578251825591602001919060010190612506565b5061252d9291506125a5565b5090565b82805461253d90612bd5565b90600052602060002090601f01602090048101928261255f5760008555612521565b82601f106125785782800160ff19823516178555612521565b82800160010185558215612521579182015b8281111561252157823582559160200191906001019061258a565b5b8082111561252d57600081556001016125a6565b803561ffff811681146125cc57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612601576126016125d1565b604051601f8501601f19908116603f01168101908282118183101715612629576126296125d1565b8160405280935085815286868601111561264257600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261266d57600080fd5b611a79838335602085016125e7565b80356001600160401b03811681146125cc57600080fd5b600080600080608085870312156126a957600080fd5b6126b2856125ba565b935060208501356001600160401b03808211156126ce57600080fd5b6126da8883890161265c565b94506126e86040880161267c565b935060608701359150808211156126fe57600080fd5b5061270b8782880161265c565b91505092959194509250565b6001600160e01b0319811681146120bb57600080fd5b60006020828403121561273f57600080fd5b8135611a7981612717565b60005b8381101561276557818101518382015260200161274d565b83811115610a835750506000910152565b6000815180845261278e81602086016020860161274a565b601f01601f19169290920160200192915050565b602081526000611a796020830184612776565b6000602082840312156127c757600080fd5b5035919050565b6001600160a01b03811681146120bb57600080fd5b600080604083850312156127f657600080fd5b8235612801816127ce565b946020939093013593505050565b60006020828403121561282157600080fd5b8135611a79816127ce565b60008060006060848603121561284157600080fd5b833561284c816127ce565b9250602084013561285c816127ce565b929592945050506040919091013590565b60006020828403121561287f57600080fd5b81356001600160401b0381111561289557600080fd5b8201601f810184136128a657600080fd5b6124a5848235602084016125e7565b803580151581146125cc57600080fd5b6000602082840312156128d757600080fd5b611a79826128b5565b6000602082840312156128f257600080fd5b611a79826125ba565b6000806020838503121561290e57600080fd5b82356001600160401b038082111561292557600080fd5b818501915085601f83011261293957600080fd5b81358181111561294857600080fd5b8660208260051b850101111561295d57600080fd5b60209290920196919550909350505050565b60008060006060848603121561298457600080fd5b61298d846125ba565b925060208401356001600160401b038111156129a857600080fd5b6129b48682870161265c565b925050604084013590509250925092565b600080604083850312156129d857600080fd5b82356129e3816127ce565b91506129f1602084016128b5565b90509250929050565b60008083601f840112612a0c57600080fd5b5081356001600160401b03811115612a2357600080fd5b602083019150836020828501011115612a3b57600080fd5b9250929050565b600080600080600060808688031215612a5a57600080fd5b8535612a65816127ce565b94506020860135612a75816127ce565b93506040860135925060608601356001600160401b03811115612a9757600080fd5b612aa3888289016129fa565b969995985093965092949392505050565b60008060408385031215612ac757600080fd5b612801836125ba565b600080600080600060808688031215612ae857600080fd5b612af1866125ba565b945060208601356001600160401b0380821115612b0d57600080fd5b612b1989838a0161265c565b9550612b276040890161267c565b94506060880135915080821115612b3d57600080fd5b50612aa3888289016129fa565b60008060408385031215612b5d57600080fd5b8235612b68816127ce565b91506020830135612b78816127ce565b809150509250929050565b600080600060408486031215612b9857600080fd5b612ba1846125ba565b925060208401356001600160401b03811115612bbc57600080fd5b612bc8868287016129fa565b9497909650939450505050565b600181811c90821680612be957607f821691505b602082108103612c0957634e487b7160e01b600052602260045260246000fd5b50919050565b6000808354612c1d81612bd5565b60018281168015612c355760018114612c4657612c75565b60ff19841687528287019450612c75565b8760005260208060002060005b85811015612c6c5781548a820152908401908201612c53565b50505082870194505b50929695505050505050565b61ffff85168152608060208201526000612c9e6080830186612776565b6001600160401b03851660408401528281036060840152612cbf8185612776565b979650505050505050565b60008251612cdc81846020870161274a565b9190910192915050565b6020808252601190820152704c61636b73205065726d697373696f6e7360781b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600f908201526e21b7b73a3930b1ba1021b0b63632b960891b604082015260600190565b600060208284031215612d7257600080fd5b8151611a7981612717565b6020808252600f908201526e2ab739b0b332902a3930b739b332b960891b604082015260600190565b60208082526014908201527326b4b73a1034b9903232b83932b1b4b0ba32b21760611b604082015260600190565b6020808252601190820152702737b732bc34b9ba32b73a102a37b5b2b760791b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081612e2457612e24612dff565b506000190190565b600060018201612e3e57612e3e612dff565b5060010190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0386811682528516602082015260408101849052608060608201819052600090612cbf9083018486612e45565b60008351612eb481846020880161274a565b835190830190612ec881836020880161274a565b01949350505050565b61ffff861681526001600160a01b038516602082015260a060408201819052600090612eff90830186612776565b84151560608401528281036080840152612f198185612776565b98975050505050505050565b60008060408385031215612f3857600080fd5b505080516020909101519092909150565b61ffff871681526000602060c08184015260008854612f6781612bd5565b8060c087015260e0600180841660008114612f895760018114612f9e57612fcc565b60ff1985168984015261010089019550612fcc565b8d6000528660002060005b85811015612fc45781548b8201860152908301908801612fa9565b8a0184019650505b50505050508381036040850152612fe38189612776565b915050612ffb60608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a084015261301c8185612776565b9998505050505050505050565b8183823760009101908152919050565b61ffff861681526080602082015260006130566080830187612776565b6001600160401b03861660408401528281036060840152612f19818587612e45565b6000806040838503121561308b57600080fd5b8251613096816127ce565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826130e1576130e16130bc565b500490565b6000828210156130f8576130f8612dff565b500390565b60008261310c5761310c6130bc565b500690565b6000821982111561312457613124612dff565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a04b8564bb0d02d95080bf13b158d1f063752ebb1ae9a74121788d4480bf9e6764736f6c634300080e0033

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

00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675

-----Decoded View---------------
Arg [0] : _lzEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675


Deployed Bytecode Sourcemap

27005:6484:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23965:699;;;;;;;;;;-1:-1:-1;23965:699:0;;;;;:::i;:::-;;:::i;:::-;;23727:230;;;;;;;;;;-1:-1:-1;23727:230:0;;;;;:::i;:::-;;:::i;:::-;;;2587:14:1;;2580:22;2562:41;;2550:2;2535:18;23727:230:0;;;;;;;;17989:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18739:46::-;;;;;;;;;;-1:-1:-1;18739:46:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;18739:46:0;;;;;;-1:-1:-1;;;;;3823:32:1;;;3805:51;;3793:2;3778:18;18739:46:0;3659:203:1;21443:317:0;;;;;;;;;;-1:-1:-1;21443:317:0;;;;;:::i;:::-;;:::i;19576:195::-;;;;;;;;;;-1:-1:-1;19576:195:0;;;;;:::i;:::-;;:::i;:::-;;;4721:25:1;;;4709:2;4694:18;19576:195:0;4575:177:1;27343:27:0;;;;;;;;;;-1:-1:-1;27343:27:0;;;;;;;;27184:37;;;;;;;;;;;;;;;;27230:26;;;;;;;;;;;;;;;;24672:280;;;;;;;;;;-1:-1:-1;24672:280:0;;;;;:::i;:::-;;:::i;19779:678::-;;;;;;;;;;-1:-1:-1;19779:678:0;;;;;:::i;:::-;;:::i;29370:349::-;;;;;;;;;;;;;:::i;27441:94::-;;;;;;;;;;;;;;;;32130:664;;;;;;;;;;;;;:::i;20465:367::-;;;;;;;;;;-1:-1:-1;20465:367:0;;;;;:::i;:::-;;:::i;32800:95::-;;;;;;;;;;-1:-1:-1;32800:95:0;;;;;:::i;:::-;;:::i;31546:157::-;;;;;;;;;;-1:-1:-1;31546:157:0;;;;;:::i;:::-;;:::i;19032:196::-;;;;;;;;;;-1:-1:-1;19032:196:0;;;;;:::i;:::-;;:::i;33155:94::-;;;;;;;;;;;;;:::i;19236:183::-;;;;;;;;;;-1:-1:-1;19236:183:0;;;;;:::i;:::-;;:::i;26194:95::-;;;;;;;;;;;;;:::i;18681:51::-;;;;;;;;;;-1:-1:-1;18681:51:0;;;;;:::i;:::-;;:::i;31062:317::-;;;;;;;;;;-1:-1:-1;31062:317:0;;;;;:::i;:::-;;:::i;29726:717::-;;;;;;;;;;-1:-1:-1;29726:717:0;;;;;:::i;:::-;;:::i;18041:20::-;;;;;;;;;;-1:-1:-1;18041:20:0;;;;-1:-1:-1;;;;;18041:20:0;;;18584:90;;;;;;;;;;-1:-1:-1;18584:90:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7876:25:1;;;7932:2;7917:18;;7910:34;;;;7849:18;18584:90:0;7702:248:1;32901:122:0;;;;;;;;;;-1:-1:-1;32901:122:0;;;;;:::i;:::-;;:::i;18014:20::-;;;;;;;;;;;;;:::i;21238:197::-;;;;;;;;;;-1:-1:-1;21238:197:0;;;;;:::i;:::-;;:::i;27263:27::-;;;;;;;;;;;;;;;;31710:314;;;;;;;;;;-1:-1:-1;31710:314:0;;;;;:::i;:::-;;:::i;19427:141::-;;;;;;;;;;-1:-1:-1;19427:141:0;;;;;:::i;:::-;19500:7;19527:17;;;:8;:17;;;;;:33;-1:-1:-1;;;19527:33:0;;-1:-1:-1;;;;;19527:33:0;;19427:141;27297:39;;;;;;;;;;;;;;;;20840:390;;;;;;;;;;-1:-1:-1;20840:390:0;;;;;:::i;:::-;;:::i;31386:153::-;;;;;;;;;;-1:-1:-1;31386:153:0;;;;;:::i;:::-;;:::i;23405:314::-;;;;;;;;;;-1:-1:-1;23405:314:0;;;;;:::i;:::-;;:::i;33255:229::-;;;;;;;;;;;;;:::i;27874:1212::-;;;;;;:::i;:::-;;:::i;25402:618::-;;;;;;:::i;:::-;;:::i;27408:26::-;;;;;;;;;;-1:-1:-1;27408:26:0;;;;;;;;;;;33029:120;;;;;;;;;;-1:-1:-1;33029:120:0;;;;;:::i;:::-;;:::i;32030:94::-;;;;;;;;;;-1:-1:-1;32030:94:0;;;;;:::i;:::-;;:::i;18792:68::-;;;;;;;;;;-1:-1:-1;18792:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;26028:158;;;;;;;;;;-1:-1:-1;26028:158:0;;;;;:::i;:::-;;:::i;26297:176::-;;;;;;;;;;-1:-1:-1;26297:176:0;;;;;:::i;:::-;;:::i;27377:24::-;;;;;;;;;;-1:-1:-1;27377:24:0;;;;;;;;;;;23965:699;24118:8;;-1:-1:-1;;;;;24118:8:0;24096:10;:31;24088:40;;;;;;24170:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;24148:11;:18;:61;:134;;;;-1:-1:-1;24249:32:0;;;;;;;:19;:32;;;;;;;24239:43;;;;24249:32;24239:43;:::i;:::-;;;;;;;;24223:11;24213:22;;;;;;:69;24148:134;24140:213;;;;-1:-1:-1;;;24140:213:0;;12888:2:1;24140:213:0;;;12870:21:1;12927:2;12907:18;;;12900:30;12966:34;12946:18;;;12939:62;-1:-1:-1;;;13017:18:1;;;13010:50;13077:19;;24140:213:0;;;;;;;;;24370:60;;-1:-1:-1;;;24370:60:0;;:4;;:16;;:60;;24387:11;;24400;;24413:6;;24421:8;;24370:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24366:291;;24516:52;;;;;;;;24531:8;:15;24516:52;;;;24558:8;24548:19;;;;;;24516:52;;;24465:14;:27;24480:11;24465:27;;;;;;;;;;;;;;;24493:11;24465:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24465:48:0;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;24588:57;;;;24602:11;;24615;;24506:6;;24636:8;;24588:57;:::i;:::-;;;;;;;;24366:291;23965:699;;;;:::o;23727:230::-;23803:4;-1:-1:-1;;;;;;;;;23840:25:0;;;;:67;;-1:-1:-1;;;;;;;;;;23882:25:0;;;23840:67;:109;;;-1:-1:-1;;;;;;;;;;23924:25:0;;;23840:109;23820:129;23727:230;-1:-1:-1;;23727:230:0:o;17989:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21443:317::-;21512:14;21529:17;;;:8;:17;;;;;:29;-1:-1:-1;;;;;21529:29:0;21577:10;:20;;;:60;;-1:-1:-1;;;;;;21601:24:0;;;;;;:16;:24;;;;;;;;21626:10;21601:36;;;;;;;;;;21577:60;21569:90;;;;-1:-1:-1;;;21569:90:0;;;;;;;:::i;:::-;21672:20;;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;21672:30:0;-1:-1:-1;;;;;21672:30:0;;;;;;;;;21718:34;;21672:20;;21718:34;;;;;;;21501:259;21443:317;;:::o;19576:195::-;19645:7;-1:-1:-1;;;;;19673:20:0;;19665:45;;;;-1:-1:-1;;;19665:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;19728:20:0;;;;;:12;:20;;;;;:35;-1:-1:-1;;;19728:35:0;;-1:-1:-1;;;;;19728:35:0;;19576:195::o;24672:280::-;24803:10;24825:4;24803:27;24795:83;;;;-1:-1:-1;;;24795:83:0;;14837:2:1;24795:83:0;;;14819:21:1;14876:2;14856:18;;;14849:30;14915:34;14895:18;;;14888:62;-1:-1:-1;;;14966:18:1;;;14959:41;15017:19;;24795:83:0;14635:407:1;24795:83:0;24889:55;24901:11;24914;24927:6;24935:8;24889:10;:55::i;19779:678::-;19878:17;;;;:8;:17;;;;;:29;-1:-1:-1;;;;;19870:37:0;;;19878:29;;19870:37;19862:59;;;;-1:-1:-1;;;19862:59:0;;15249:2:1;19862:59:0;;;15231:21:1;15288:1;15268:18;;;15261:29;-1:-1:-1;;;15306:18:1;;;15299:39;15355:18;;19862:59:0;15047:332:1;19862:59:0;-1:-1:-1;;;;;19940:16:0;;19932:41;;;;-1:-1:-1;;;19932:41:0;;;;;;;:::i;:::-;19994:10;-1:-1:-1;;;;;19994:18:0;;;;:56;;-1:-1:-1;;;;;;20016:22:0;;;;;;:16;:22;;;;;;;;20039:10;20016:34;;;;;;;;;;19994:56;:94;;;-1:-1:-1;20068:20:0;;;;:11;:20;;;;;;-1:-1:-1;;;;;20068:20:0;20054:10;:34;19994:94;19986:147;;;;-1:-1:-1;;;19986:147:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20171:18:0;;;;;;;:12;:18;;;;;;;;:28;;-1:-1:-1;;;;;;20171:28:0;;;-1:-1:-1;;;;;20171:28:0;;;-1:-1:-1;;20171:28:0;;;;;;;20214:16;;;;;;;;;:26;;;;;;;;-1:-1:-1;20214:26:0;;;;;;;;;;;20264:17;;;:8;:17;;;;;-1:-1:-1;;;20352:15:0;-1:-1:-1;;;;;20309:59:0;;;;;;20386:11;:20;;;;;;20379:27;;-1:-1:-1;;;;;;20379:27:0;;;20422;20264:17;;20214:16;20171:18;-1:-1:-1;;;;;;;;;;;20422:27:0;;19779:678;;;:::o;29370:349::-;27722:9;27735:10;27722:23;27714:51;;;;-1:-1:-1;;;27714:51:0;;;;;;;:::i;:::-;29433:12:::1;::::0;::::1;::::0;::::1;;;29425:47;;;::::0;-1:-1:-1;;;29425:47:0;;15930:2:1;29425:47:0::1;::::0;::::1;15912:21:1::0;15969:2;15949:18;;;15942:30;-1:-1:-1;;;15988:18:1;;;15981:52;16050:18;;29425:47:0::1;15728:346:1::0;29425:47:0::1;27173:4;29491:11;;:27;29483:66;;;::::0;-1:-1:-1;;;29483:66:0;;16281:2:1;29483:66:0::1;::::0;::::1;16263:21:1::0;16320:2;16300:18;;;16293:30;16359:28;16339:18;;;16332:56;16405:18;;29483:66:0::1;16079:350:1::0;29483:66:0::1;29612:15;::::0;29595:12:::1;:14:::0;;::::1;::::0;::::1;::::0;;;:32:::1;29587:67;;;::::0;-1:-1:-1;;;29587:67:0;;16636:2:1;29587:67:0::1;::::0;::::1;16618:21:1::0;16675:2;16655:18;;;16648:30;-1:-1:-1;;;16694:18:1;;;16687:52;16756:18;;29587:67:0::1;16434:346:1::0;29587:67:0::1;29687:11;:13:::0;;::::1;::::0;::::1;::::0;;;29669:32:::1;::::0;29675:10:::1;::::0;29669:5:::1;:32::i;:::-;29370:349::o:0;32130:664::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;32193:15:::1;::::0;::::1;;32192:16;32184:57;;;::::0;-1:-1:-1;;;32184:57:0;;16987:2:1;32184:57:0::1;::::0;::::1;16969:21:1::0;17026:2;17006:18;;;16999:30;17065;17045:18;;;17038:58;17113:18;;32184:57:0::1;16785:352:1::0;32184:57:0::1;32257:12;32250:19:::0;;-1:-1:-1;;32308:22:0;32257:12:::1;32308:22;::::0;;32358:10:::1;32397:15;-1:-1:-1::0;32425:247:0::1;32445:2;32441:1;:6;32425:247;;;32465:11;::::0;;;:8:::1;:11;::::0;;;;;-1:-1:-1;;;;;32465:34:0;::::1;-1:-1:-1::0;;;;;;;;32514:47:0;::::1;;::::0;::::1;::::0;;;32610:35;;32465:34;32641:3;::::1;::::0;32465:11;;-1:-1:-1;;;;;;;;;;;32610:35:0;32465:11;;32610:35:::1;32425:247;;;-1:-1:-1::0;;;;;;;32709:22:0::1;;::::0;;;:12:::1;:22;::::0;;;;:36;;-1:-1:-1;;;;;;32709:36:0;::::1;32743:2;-1:-1:-1::0;;;;;32709:36:0;;::::1;::::0;::::1;::::0;;::::1;;::::0;;;32760:11:::1;:17:::0;;;;::::1;::::0;;32130:664::o;20465:367::-;20552:31;20565:4;20571:2;20575:7;20552:12;:31::i;:::-;-1:-1:-1;;;;;20604:14:0;;;:19;;:177;;-1:-1:-1;20644:71:0;;-1:-1:-1;;;20644:71:0;;;20685:10;20644:71;;;17447:34:1;-1:-1:-1;;;;;17517:15:1;;;17497:18;;;17490:43;17549:18;;;17542:34;;;17612:3;17592:18;;;17585:31;-1:-1:-1;17632:19:1;;;17625:30;20736:45:0;;20644:40;;;;20736:45;;17672:19:1;;20644:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;20644:137:0;;20604:177;20596:228;;;;-1:-1:-1;;;20596:228:0;;;;;;;:::i;:::-;20465:367;;;:::o;32800:95::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;32871:18;;::::1;::::0;:8:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;32800:95:::0;:::o;31546:157::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;31623:15:::1;::::0;::::1;;31622:16;31614:49;;;;-1:-1:-1::0;;;31614:49:0::1;;;;;;;:::i;:::-;31673:14;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31673:23:0;;::::1;::::0;;;::::1;::::0;;31546:157::o;19032:196::-;19090:7;19118:12;;;:8;:12;;;;;:24;-1:-1:-1;;;;;19118:24:0;19110:68;;;;-1:-1:-1;;;19110:68:0;;;;;;;:::i;:::-;-1:-1:-1;19196:12:0;;;;:8;:12;;;;;:24;-1:-1:-1;;;;;19196:24:0;;19032:196::o;33155:94::-;33204:13;33235:8;33228:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33155:94;:::o;19236:183::-;19300:7;-1:-1:-1;;;;;19328:20:0;;19320:45;;;;-1:-1:-1;;;19320:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;19383:20:0;;;;;:12;:20;;;;;:28;-1:-1:-1;;;;;19383:28:0;;19236:183::o;26194:95::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;26251:30:::1;26278:1;26251:18;:30::i;18681:51::-:0;;;;;;;;;;;;;;;;:::i;31062:317::-;31126:15;;;;31118:49;;;;-1:-1:-1;;;31118:49:0;;19197:2:1;31118:49:0;;;19179:21:1;19236:2;19216:18;;;19209:30;-1:-1:-1;;;19255:18:1;;;19248:51;19316:18;;31118:49:0;18995:345:1;31118:49:0;31199:16;31207:7;31199;:16::i;:::-;-1:-1:-1;;;;;31185:30:0;:10;-1:-1:-1;;;;;31185:30:0;;:80;;;;31219:16;:34;31236:16;31244:7;31236;:16::i;:::-;-1:-1:-1;;;;;31219:34:0;;;;;;;;;;;;;;;-1:-1:-1;31219:34:0;;;31254:10;31219:46;;;;;;;;;;31185:80;:118;;;-1:-1:-1;31283:20:0;;;;:11;:20;;;;;;-1:-1:-1;;;;;31283:20:0;31269:10;:34;31185:118;31177:148;;;;-1:-1:-1;;;31177:148:0;;;;;;;:::i;:::-;31335:14;31341:7;31335:5;:14::i;:::-;31359:11;:13;;;:11;:13;;;:::i;:::-;;;;;;31062:317;:::o;29726:717::-;27722:9;27735:10;27722:23;27714:51;;;;-1:-1:-1;;;27714:51:0;;;;;;;:::i;:::-;29815:14:::1;::::0;;;::::1;;;29807:51;;;::::0;-1:-1:-1;;;29807:51:0;;19820:2:1;29807:51:0::1;::::0;::::1;19802:21:1::0;19859:2;19839:18;;;19832:30;-1:-1:-1;;;19878:18:1;;;19871:54;19942:18;;29807:51:0::1;19618:348:1::0;29807:51:0::1;29877:72;29889:6;;29877:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;29897:10:0::1;::::0;29919:28:::1;::::0;-1:-1:-1;;29936:10:0::1;20120:2:1::0;20116:15;20112:53;29919:28:0::1;::::0;::::1;20100:66:1::0;29897:10:0;;-1:-1:-1;20182:12:1;;;-1:-1:-1;29919:28:0::1;;;;;;;;;;;;29909:39;;;;;;29877:11;:72::i;:::-;29869:100;;;::::0;-1:-1:-1;;;29869:100:0;;20407:2:1;29869:100:0::1;::::0;::::1;20389:21:1::0;20446:2;20426:18;;;20419:30;-1:-1:-1;;;20465:18:1;;;20458:45;20520:18;;29869:100:0::1;20205:339:1::0;29869:100:0::1;30006:11;::::0;27173:4:::1;30079:1;30061:19:::0;::::1;:35;30053:70;;;::::0;-1:-1:-1;;;30053:70:0;;20751:2:1;30053:70:0::1;::::0;::::1;20733:21:1::0;20790:2;20770:18;;;20763:30;-1:-1:-1;;;20809:18:1;;;20802:52;20871:18;;30053:70:0::1;20549:346:1::0;30053:70:0::1;30159:10;30146:24;::::0;;;:12:::1;:24;::::0;;;;:39;-1:-1:-1;;;30146:39:0;::::1;-1:-1:-1::0;;;;;30146:39:0::1;:44:::0;30138:85:::1;;;::::0;-1:-1:-1;;;30138:85:0;;21102:2:1;30138:85:0::1;::::0;::::1;21084:21:1::0;21141:2;21121:18;;;21114:30;21180;21160:18;;;21153:58;21228:18;;30138:85:0::1;20900:352:1::0;30138:85:0::1;30251:10;30238:24;::::0;;;:12:::1;:24;::::0;;;;:53;;-1:-1:-1;;;;;;;;30238:53:0;;::::1;::::0;::::1;30289:1;30238:53;::::0;::::1;;::::0;::::1;;::::0;;30313:36:::1;::::0;30331:17;::::1;::::0;::::1;:::i;:::-;;;30313:5;:36::i;:::-;30360;30366:10;30378:17:::0;::::1;::::0;::::1;:::i;30360:36::-;30407:11;:29:::0;-1:-1:-1;;29726:717:0:o;32901:122::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;32987:15:::1;:30:::0;32901:122::o;18014:20::-;;;;;;;:::i;21238:197::-;21333:10;21316:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;21316:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;21316:49:0;;;;;;;;;;21381:46;;2562:41:1;;;21316:38:0;;21333:10;21381:46;;2535:18:1;21381:46:0;;;;;;;21238:197;;:::o;31710:314::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;31794:15:::1;::::0;::::1;;31793:16;31785:49;;;;-1:-1:-1::0;;;31785:49:0::1;;;;;;;:::i;:::-;31862:15;;31852:7;:25;31844:63;;;::::0;-1:-1:-1;;;31844:63:0;;21599:2:1;31844:63:0::1;::::0;::::1;21581:21:1::0;21638:2;21618:18;;;21611:30;-1:-1:-1;;;21657:18:1;;;21650:55;21722:18;;31844:63:0::1;21397:349:1::0;31844:63:0::1;27173:4;31925:7;:24;;31917:65;;;::::0;-1:-1:-1;;;31917:65:0;;21953:2:1;31917:65:0::1;::::0;::::1;21935:21:1::0;21992:2;21972:18;;;21965:30;22031;22011:18;;;22004:58;22079:18;;31917:65:0::1;21751:352:1::0;31917:65:0::1;31992:15;:25:::0;31710:314::o;20840:390::-;20948:31;20961:4;20967:2;20971:7;20948:12;:31::i;:::-;-1:-1:-1;;;;;21000:14:0;;;:19;;:179;;-1:-1:-1;21040:73:0;;-1:-1:-1;;;21040:73:0;;;21134:45;-1:-1:-1;;;;;21040:40:0;;;21134:45;;21040:73;;21081:10;;21093:4;;21099:7;;21108:4;;;;21040:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21040:139:0;;21000:179;20992:230;;;;-1:-1:-1;;;20992:230:0;;;;;;;:::i;:::-;20840:390;;;;;:::o;31386:153::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;31461:15:::1;::::0;::::1;;31460:16;31452:49;;;;-1:-1:-1::0;;;31452:49:0::1;;;;;;;:::i;:::-;31511:12;:21:::0;;;::::1;;;;-1:-1:-1::0;;31511:21:0;;::::1;::::0;;;::::1;::::0;;31386:153::o;23405:314::-;23536:1;23495:17;;;:8;:17;;;;;:29;23461:13;;-1:-1:-1;;;;;23495:29:0;23487:73;;;;-1:-1:-1;;;23487:73:0;;;;;;;:::i;:::-;23571:22;23596:9;:7;:9::i;:::-;23571:34;;23648:1;23629:8;23623:22;:26;:88;;;;;;;;;;;;;;;;;23676:8;23686:18;:7;:16;:18::i;:::-;23659:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23623:88;23616:95;23405:314;-1:-1:-1;;;23405:314:0:o;33255:229::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;33383:51:::1;::::0;33337:21:::1;::::0;33312:22:::1;::::0;33391:10:::1;::::0;33337:21;;33312:22;33383:51;33312:22;33383:51;33337:21;33391:10;33383:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33367:67;;;33451:4;33443:31;;;::::0;-1:-1:-1;;;33443:31:0;;23786:2:1;33443:31:0::1;::::0;::::1;23768:21:1::0;23825:2;23805:18;;;23798:30;-1:-1:-1;;;23844:18:1;;;23837:44;23898:18;;33443:31:0::1;23584:338:1::0;27874:1212:0;27977:16;27985:7;27977;:16::i;:::-;-1:-1:-1;;;;;27963:30:0;:10;-1:-1:-1;;;;;27963:30:0;;27955:77;;;;-1:-1:-1;;;27955:77:0;;24129:2:1;27955:77:0;;;24111:21:1;24168:2;24148:18;;;24141:30;24207:34;24187:18;;;24180:62;-1:-1:-1;;;24258:18:1;;;24251:32;24300:19;;27955:77:0;23927:398:1;27955:77:0;28051:29;;;28090:1;28051:29;;;:19;:29;;;;;:36;;;;;:::i;:::-;;;:40;28043:99;;;;-1:-1:-1;;;28043:99:0;;24532:2:1;28043:99:0;;;24514:21:1;24571:2;24551:18;;;24544:30;24610:34;24590:18;;;24583:62;-1:-1:-1;;;24661:18:1;;;24654:44;24715:19;;28043:99:0;24330:410:1;28043:99:0;28155:14;28161:7;28155:5;:14::i;:::-;28180:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;28229:31:0;;;28240:10;28229:31;;;24919:51:1;24986:18;;;24979:34;;;28229:31:0;;;;;;;;;24892:18:1;;;28229:31:0;;28355:15;;-1:-1:-1;;;28329:42:0;;;25179:51:1;25246:11;;;;25239:27;;;;28329:42:0;;;;;;;;;;25282:12:1;;;28329:42:0;;;;28406:8;;-1:-1:-1;;;28406:77:0;;;28229:31;;28288:1;;-1:-1:-1;;;;;;;28406:8:0;;:21;;:77;;28428:8;;28446:4;;28229:31;;-1:-1:-1;;28329:42:0;;28406:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28384:99;;;28525:10;28512:9;:23;;28504:94;;;;-1:-1:-1;;;28504:94:0;;26404:2:1;28504:94:0;;;26386:21:1;26443:2;26423:18;;;26416:30;26482:34;26462:18;;;26455:62;26553:28;26533:18;;;26526:56;26599:19;;28504:94:0;26202:422:1;28504:94:0;28611:8;;28726:29;;;28611:8;28726:29;;;:19;:29;;;;;;28611:467;;-1:-1:-1;;;28611:467:0;;-1:-1:-1;;;;;28611:8:0;;;;:13;;28632:9;;28611:467;;28657:8;;28796:7;;28870:10;;28611:8;29005:13;;28611:467;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27944:1142;;;;27874:1212;;:::o;25402:618::-;25573:27;;;25538:32;25573:27;;;:14;:27;;;;;;:40;;;;25601:11;;25573:40;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25573:48:0;;;;;;;;;;25640:21;;;;25573:48;;-1:-1:-1;25632:86:0;;;;-1:-1:-1;;;25632:86:0;;28320:2:1;25632:86:0;;;28302:21:1;28359:2;28339:18;;;28332:30;28398:34;28378:18;;;28371:62;-1:-1:-1;;;28449:18:1;;;28442:36;28495:19;;25632:86:0;28118:402:1;25632:86:0;25756:23;;25737:42;;:90;;;;;25806:9;:21;;;25793:8;;25783:19;;;;;;;:::i;:::-;;;;;;;;:44;25737:90;25729:129;;;;-1:-1:-1;;;25729:129:0;;29003:2:1;25729:129:0;;;28985:21:1;29042:2;29022:18;;;29015:30;29081:28;29061:18;;;29054:56;29127:18;;25729:129:0;28801:350:1;25729:129:0;25895:1;25869:27;;;25907:21;;;:34;25952:60;;-1:-1:-1;;;25952:60:0;;:4;;:16;;:60;;25969:11;;25982;;25995:6;;26003:8;;;;25952:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25527:493;25402:618;;;;;:::o;33029:120::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;33101:8:::1;:42:::0;;-1:-1:-1;;;;;;33101:42:0::1;-1:-1:-1::0;;;;;33101:42:0;;;::::1;::::0;;;::::1;::::0;;33029:120::o;32030:94::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;32095:10:::1;:21:::0;32030:94::o;26028:158::-;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;26132:29:::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;26164:14;;26132:46:::1;:::i;26297:176::-:0;26706:5;;-1:-1:-1;;;;;26706:5:0;26715:10;26706:19;26702:48;;26734:16;;-1:-1:-1;;;26734:16:0;;;;;;;;;;;26702:48;-1:-1:-1;;;;;26374:22:0;::::1;26370:56;;26405:21;;-1:-1:-1::0;;;26405:21:0::1;;;;;;;;;;;26370:56;26437:28;26456:8;26437:18;:28::i;:::-;26297:176:::0;:::o;29094:268::-;29228:14;29244:12;29271:8;29260:37;;;;;;;;;;;;:::i;:::-;29227:70;;;;29308:22;29314:6;29322:7;29308:5;:22::i;:::-;29341:11;:13;;;:11;:13;;;:::i;:::-;;;;;;29216:146;;29094:268;;;;:::o;21768:435::-;-1:-1:-1;;;;;21840:16:0;;21832:41;;;;-1:-1:-1;;;21832:41:0;;;;;;;:::i;:::-;21933:1;21892:17;;;:8;:17;;;;;:29;-1:-1:-1;;;;;21892:29:0;:43;21884:70;;;;-1:-1:-1;;;21884:70:0;;30271:2:1;21884:70:0;;;30253:21:1;30310:2;30290:18;;;30283:30;-1:-1:-1;;;30329:18:1;;;30322:44;30383:18;;21884:70:0;30069:338:1;21884:70:0;-1:-1:-1;;;;;21992:16:0;;;;;;:12;:16;;;;;;;;:26;;-1:-1:-1;;;;;21992:26:0;;;;;;-1:-1:-1;;;;;;21992:26:0;;;;;;22042:17;;;:8;:17;;;;;;-1:-1:-1;;;;;22130:15:0;22087:59;-1:-1:-1;;;22087:59:0;;;;;22162:33;22051:7;;21992:16;;-1:-1:-1;;;;;;;;;;;22162:33:0;21992:16;;22162:33;21768:435;;:::o;26481:181::-;26566:5;;;-1:-1:-1;;;;;26582:16:0;;;-1:-1:-1;;;;;;26582:16:0;;;;;;;26614:40;;26566:5;;;26582:16;26566:5;;26614:40;;26547:16;;26614:40;26536:126;26481:181;:::o;22922:376::-;22974:14;22991:17;;;:8;:17;;;;;:29;-1:-1:-1;;;;;22991:29:0;;23031:50;;;;-1:-1:-1;;;23031:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23119:20:0;;;;;;:12;:20;;;;;;;;:30;;-1:-1:-1;;;;;;23119:30:0;;-1:-1:-1;;;;;23119:30:0;;;-1:-1:-1;;23119:30:0;;;;;;;23180:17;;;:8;:17;;;;;23173:24;;;23215:11;:20;;;;;;23208:27;;-1:-1:-1;;;;;;23208:27:0;;;23253:37;23180:17;;23119:20;-1:-1:-1;;;;;;;;;;;23253:37:0;23119:20;;23253:37;22963:335;22922:376;:::o;30450:604::-;30624:12;;30546:4;;30586;;30546;30647:362;30667:10;30663:1;:14;30647:362;;;30696:20;30719:5;30725:3;;;;:::i;:::-;;;30719:10;;;;;;;;:::i;:::-;;;;;;;30696:33;;30766:12;30750;:28;30746:250;;30824:44;;;;;;30701:19:1;;;30736:12;;;30729:28;;;30773:12;;30824:44:0;;;;;;;;;;;;30814:55;;;;;;30799:70;;30746:250;;;30935:44;;;;;;30701:19:1;;;30736:12;;;30729:28;;;30773:12;;30935:44:0;;;;;;;;;;;;30925:55;;;;;;30910:70;;30746:250;30681:328;30647:362;;;-1:-1:-1;;31026:20:0;;;;30450:604;-1:-1:-1;;;30450:604:0:o;276:723::-;332:13;553:5;562:1;553:10;549:53;;-1:-1:-1;;580:10:0;;;;;;;;;;;;-1:-1:-1;;;580:10:0;;;;;276:723::o;549:53::-;627:5;612:12;668:78;675:9;;668:78;;701:8;;;;:::i;:::-;;-1:-1:-1;724:10:0;;-1:-1:-1;732:2:0;724:10;;:::i;:::-;;;668:78;;;756:19;788:6;-1:-1:-1;;;;;778:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;778:17:0;;756:39;;806:154;813:10;;806:154;;840:11;850:1;840:11;;:::i;:::-;;-1:-1:-1;909:10:0;917:2;909:5;:10;:::i;:::-;896:24;;:2;:24;:::i;:::-;883:39;;866:6;873;866:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;866:56:0;;;;;;;;-1:-1:-1;937:11:0;946:2;937:11;;:::i;:::-;;;806:154;;;984:6;276:723;-1:-1:-1;;;;276:723:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:159:1;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:127::-;239:10;234:3;230:20;227:1;220:31;270:4;267:1;260:15;294:4;291:1;284:15;310:631;374:5;-1:-1:-1;;;;;445:2:1;437:6;434:14;431:40;;;451:18;;:::i;:::-;526:2;520:9;494:2;580:15;;-1:-1:-1;;576:24:1;;;602:2;572:33;568:42;556:55;;;626:18;;;646:22;;;623:46;620:72;;;672:18;;:::i;:::-;712:10;708:2;701:22;741:6;732:15;;771:6;763;756:22;811:3;802:6;797:3;793:16;790:25;787:45;;;828:1;825;818:12;787:45;878:6;873:3;866:4;858:6;854:17;841:44;933:1;926:4;917:6;909;905:19;901:30;894:41;;;;310:631;;;;;:::o;946:220::-;988:5;1041:3;1034:4;1026:6;1022:17;1018:27;1008:55;;1059:1;1056;1049:12;1008:55;1081:79;1156:3;1147:6;1134:20;1127:4;1119:6;1115:17;1081:79;:::i;1171:171::-;1238:20;;-1:-1:-1;;;;;1287:30:1;;1277:41;;1267:69;;1332:1;1329;1322:12;1347:684;1449:6;1457;1465;1473;1526:3;1514:9;1505:7;1501:23;1497:33;1494:53;;;1543:1;1540;1533:12;1494:53;1566:28;1584:9;1566:28;:::i;:::-;1556:38;;1645:2;1634:9;1630:18;1617:32;-1:-1:-1;;;;;1709:2:1;1701:6;1698:14;1695:34;;;1725:1;1722;1715:12;1695:34;1748:49;1789:7;1780:6;1769:9;1765:22;1748:49;:::i;:::-;1738:59;;1816:37;1849:2;1838:9;1834:18;1816:37;:::i;:::-;1806:47;;1906:2;1895:9;1891:18;1878:32;1862:48;;1935:2;1925:8;1922:16;1919:36;;;1951:1;1948;1941:12;1919:36;;1974:51;2017:7;2006:8;1995:9;1991:24;1974:51;:::i;:::-;1964:61;;;1347:684;;;;;;;:::o;2036:131::-;-1:-1:-1;;;;;;2110:32:1;;2100:43;;2090:71;;2157:1;2154;2147:12;2172:245;2230:6;2283:2;2271:9;2262:7;2258:23;2254:32;2251:52;;;2299:1;2296;2289:12;2251:52;2338:9;2325:23;2357:30;2381:5;2357:30;:::i;2614:258::-;2686:1;2696:113;2710:6;2707:1;2704:13;2696:113;;;2786:11;;;2780:18;2767:11;;;2760:39;2732:2;2725:10;2696:113;;;2827:6;2824:1;2821:13;2818:48;;;-1:-1:-1;;2862:1:1;2844:16;;2837:27;2614:258::o;2877:::-;2919:3;2957:5;2951:12;2984:6;2979:3;2972:19;3000:63;3056:6;3049:4;3044:3;3040:14;3033:4;3026:5;3022:16;3000:63;:::i;:::-;3117:2;3096:15;-1:-1:-1;;3092:29:1;3083:39;;;;3124:4;3079:50;;2877:258;-1:-1:-1;;2877:258:1:o;3140:220::-;3289:2;3278:9;3271:21;3252:4;3309:45;3350:2;3339:9;3335:18;3327:6;3309:45;:::i;3365:180::-;3424:6;3477:2;3465:9;3456:7;3452:23;3448:32;3445:52;;;3493:1;3490;3483:12;3445:52;-1:-1:-1;3516:23:1;;3365:180;-1:-1:-1;3365:180:1:o;3867:131::-;-1:-1:-1;;;;;3942:31:1;;3932:42;;3922:70;;3988:1;3985;3978:12;4003:315;4071:6;4079;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;4187:9;4174:23;4206:31;4231:5;4206:31;:::i;:::-;4256:5;4308:2;4293:18;;;;4280:32;;-1:-1:-1;;;4003:315:1:o;4323:247::-;4382:6;4435:2;4423:9;4414:7;4410:23;4406:32;4403:52;;;4451:1;4448;4441:12;4403:52;4490:9;4477:23;4509:31;4534:5;4509:31;:::i;4757:456::-;4834:6;4842;4850;4903:2;4891:9;4882:7;4878:23;4874:32;4871:52;;;4919:1;4916;4909:12;4871:52;4958:9;4945:23;4977:31;5002:5;4977:31;:::i;:::-;5027:5;-1:-1:-1;5084:2:1;5069:18;;5056:32;5097:33;5056:32;5097:33;:::i;:::-;4757:456;;5149:7;;-1:-1:-1;;;5203:2:1;5188:18;;;;5175:32;;4757:456::o;5400:450::-;5469:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:52;;;5538:1;5535;5528:12;5490:52;5578:9;5565:23;-1:-1:-1;;;;;5603:6:1;5600:30;5597:50;;;5643:1;5640;5633:12;5597:50;5666:22;;5719:4;5711:13;;5707:27;-1:-1:-1;5697:55:1;;5748:1;5745;5738:12;5697:55;5771:73;5836:7;5831:2;5818:16;5813:2;5809;5805:11;5771:73;:::i;5855:160::-;5920:20;;5976:13;;5969:21;5959:32;;5949:60;;6005:1;6002;5995:12;6020:180;6076:6;6129:2;6117:9;6108:7;6104:23;6100:32;6097:52;;;6145:1;6142;6135:12;6097:52;6168:26;6184:9;6168:26;:::i;6205:184::-;6263:6;6316:2;6304:9;6295:7;6291:23;6287:32;6284:52;;;6332:1;6329;6322:12;6284:52;6355:28;6373:9;6355:28;:::i;6617:615::-;6703:6;6711;6764:2;6752:9;6743:7;6739:23;6735:32;6732:52;;;6780:1;6777;6770:12;6732:52;6820:9;6807:23;-1:-1:-1;;;;;6890:2:1;6882:6;6879:14;6876:34;;;6906:1;6903;6896:12;6876:34;6944:6;6933:9;6929:22;6919:32;;6989:7;6982:4;6978:2;6974:13;6970:27;6960:55;;7011:1;7008;7001:12;6960:55;7051:2;7038:16;7077:2;7069:6;7066:14;7063:34;;;7093:1;7090;7083:12;7063:34;7146:7;7141:2;7131:6;7128:1;7124:14;7120:2;7116:23;7112:32;7109:45;7106:65;;;7167:1;7164;7157:12;7106:65;7198:2;7190:11;;;;;7220:6;;-1:-1:-1;6617:615:1;;-1:-1:-1;;;;6617:615:1:o;7237:460::-;7322:6;7330;7338;7391:2;7379:9;7370:7;7366:23;7362:32;7359:52;;;7407:1;7404;7397:12;7359:52;7430:28;7448:9;7430:28;:::i;:::-;7420:38;;7509:2;7498:9;7494:18;7481:32;-1:-1:-1;;;;;7528:6:1;7525:30;7522:50;;;7568:1;7565;7558:12;7522:50;7591:49;7632:7;7623:6;7612:9;7608:22;7591:49;:::i;:::-;7581:59;;;7687:2;7676:9;7672:18;7659:32;7649:42;;7237:460;;;;;:::o;7955:315::-;8020:6;8028;8081:2;8069:9;8060:7;8056:23;8052:32;8049:52;;;8097:1;8094;8087:12;8049:52;8136:9;8123:23;8155:31;8180:5;8155:31;:::i;:::-;8205:5;-1:-1:-1;8229:35:1;8260:2;8245:18;;8229:35;:::i;:::-;8219:45;;7955:315;;;;;:::o;8275:347::-;8326:8;8336:6;8390:3;8383:4;8375:6;8371:17;8367:27;8357:55;;8408:1;8405;8398:12;8357:55;-1:-1:-1;8431:20:1;;-1:-1:-1;;;;;8463:30:1;;8460:50;;;8506:1;8503;8496:12;8460:50;8543:4;8535:6;8531:17;8519:29;;8595:3;8588:4;8579:6;8571;8567:19;8563:30;8560:39;8557:59;;;8612:1;8609;8602:12;8557:59;8275:347;;;;;:::o;8627:754::-;8724:6;8732;8740;8748;8756;8809:3;8797:9;8788:7;8784:23;8780:33;8777:53;;;8826:1;8823;8816:12;8777:53;8865:9;8852:23;8884:31;8909:5;8884:31;:::i;:::-;8934:5;-1:-1:-1;8991:2:1;8976:18;;8963:32;9004:33;8963:32;9004:33;:::i;:::-;9056:7;-1:-1:-1;9110:2:1;9095:18;;9082:32;;-1:-1:-1;9165:2:1;9150:18;;9137:32;-1:-1:-1;;;;;9181:30:1;;9178:50;;;9224:1;9221;9214:12;9178:50;9263:58;9313:7;9304:6;9293:9;9289:22;9263:58;:::i;:::-;8627:754;;;;-1:-1:-1;8627:754:1;;-1:-1:-1;9340:8:1;;9237:84;8627:754;-1:-1:-1;;;8627:754:1:o;9386:252::-;9453:6;9461;9514:2;9502:9;9493:7;9489:23;9485:32;9482:52;;;9530:1;9527;9520:12;9482:52;9553:28;9571:9;9553:28;:::i;9643:773::-;9747:6;9755;9763;9771;9779;9832:3;9820:9;9811:7;9807:23;9803:33;9800:53;;;9849:1;9846;9839:12;9800:53;9872:28;9890:9;9872:28;:::i;:::-;9862:38;;9951:2;9940:9;9936:18;9923:32;-1:-1:-1;;;;;10015:2:1;10007:6;10004:14;10001:34;;;10031:1;10028;10021:12;10001:34;10054:49;10095:7;10086:6;10075:9;10071:22;10054:49;:::i;:::-;10044:59;;10122:37;10155:2;10144:9;10140:18;10122:37;:::i;:::-;10112:47;;10212:2;10201:9;10197:18;10184:32;10168:48;;10241:2;10231:8;10228:16;10225:36;;;10257:1;10254;10247:12;10225:36;;10296:60;10348:7;10337:8;10326:9;10322:24;10296:60;:::i;10606:388::-;10674:6;10682;10735:2;10723:9;10714:7;10710:23;10706:32;10703:52;;;10751:1;10748;10741:12;10703:52;10790:9;10777:23;10809:31;10834:5;10809:31;:::i;:::-;10859:5;-1:-1:-1;10916:2:1;10901:18;;10888:32;10929:33;10888:32;10929:33;:::i;:::-;10981:7;10971:17;;;10606:388;;;;;:::o;10999:481::-;11077:6;11085;11093;11146:2;11134:9;11125:7;11121:23;11117:32;11114:52;;;11162:1;11159;11152:12;11114:52;11185:28;11203:9;11185:28;:::i;:::-;11175:38;;11264:2;11253:9;11249:18;11236:32;-1:-1:-1;;;;;11283:6:1;11280:30;11277:50;;;11323:1;11320;11313:12;11277:50;11362:58;11412:7;11403:6;11392:9;11388:22;11362:58;:::i;:::-;10999:481;;11439:8;;-1:-1:-1;11336:84:1;;-1:-1:-1;;;;10999:481:1:o;11485:380::-;11564:1;11560:12;;;;11607;;;11628:61;;11682:4;11674:6;11670:17;11660:27;;11628:61;11735:2;11727:6;11724:14;11704:18;11701:38;11698:161;;11781:10;11776:3;11772:20;11769:1;11762:31;11816:4;11813:1;11806:15;11844:4;11841:1;11834:15;11698:161;;11485:380;;;:::o;11870:811::-;11996:3;12025:1;12058:6;12052:13;12088:36;12114:9;12088:36;:::i;:::-;12143:1;12160:18;;;12187:104;;;;12305:1;12300:356;;;;12153:503;;12187:104;-1:-1:-1;;12220:24:1;;12208:37;;12265:16;;;;-1:-1:-1;12187:104:1;;12300:356;12331:6;12328:1;12321:17;12361:4;12406:2;12403:1;12393:16;12431:1;12445:165;12459:6;12456:1;12453:13;12445:165;;;12537:14;;12524:11;;;12517:35;12580:16;;;;12474:10;;12445:165;;;12449:3;;;12639:6;12634:3;12630:16;12623:23;;12153:503;-1:-1:-1;12672:3:1;;11870:811;-1:-1:-1;;;;;;11870:811:1:o;13107:557::-;13364:6;13356;13352:19;13341:9;13334:38;13408:3;13403:2;13392:9;13388:18;13381:31;13315:4;13435:46;13476:3;13465:9;13461:19;13453:6;13435:46;:::i;:::-;-1:-1:-1;;;;;13521:6:1;13517:31;13512:2;13501:9;13497:18;13490:59;13597:9;13589:6;13585:22;13580:2;13569:9;13565:18;13558:50;13625:33;13651:6;13643;13625:33;:::i;:::-;13617:41;13107:557;-1:-1:-1;;;;;;;13107:557:1:o;13669:274::-;13798:3;13836:6;13830:13;13852:53;13898:6;13893:3;13886:4;13878:6;13874:17;13852:53;:::i;:::-;13921:16;;;;;13669:274;-1:-1:-1;;13669:274:1:o;13948:341::-;14150:2;14132:21;;;14189:2;14169:18;;;14162:30;-1:-1:-1;;;14223:2:1;14208:18;;14201:47;14280:2;14265:18;;13948:341::o;14294:336::-;14496:2;14478:21;;;14535:2;14515:18;;;14508:30;-1:-1:-1;;;14569:2:1;14554:18;;14547:42;14621:2;14606:18;;14294:336::o;15384:339::-;15586:2;15568:21;;;15625:2;15605:18;;;15598:30;-1:-1:-1;;;15659:2:1;15644:18;;15637:45;15714:2;15699:18;;15384:339::o;17702:249::-;17771:6;17824:2;17812:9;17803:7;17799:23;17795:32;17792:52;;;17840:1;17837;17830:12;17792:52;17872:9;17866:16;17891:30;17915:5;17891:30;:::i;17956:339::-;18158:2;18140:21;;;18197:2;18177:18;;;18170:30;-1:-1:-1;;;18231:2:1;18216:18;;18209:45;18286:2;18271:18;;17956:339::o;18300:344::-;18502:2;18484:21;;;18541:2;18521:18;;;18514:30;-1:-1:-1;;;18575:2:1;18560:18;;18553:50;18635:2;18620:18;;18300:344::o;18649:341::-;18851:2;18833:21;;;18890:2;18870:18;;;18863:30;-1:-1:-1;;;18924:2:1;18909:18;;18902:47;18981:2;18966:18;;18649:341::o;19345:127::-;19406:10;19401:3;19397:20;19394:1;19387:31;19437:4;19434:1;19427:15;19461:4;19458:1;19451:15;19477:136;19516:3;19544:5;19534:39;;19553:18;;:::i;:::-;-1:-1:-1;;;19589:18:1;;19477:136::o;21257:135::-;21296:3;21317:17;;;21314:43;;21337:18;;:::i;:::-;-1:-1:-1;21384:1:1;21373:13;;21257:135::o;22108:266::-;22196:6;22191:3;22184:19;22248:6;22241:5;22234:4;22229:3;22225:14;22212:43;-1:-1:-1;22300:1:1;22275:16;;;22293:4;22271:27;;;22264:38;;;;22356:2;22335:15;;;-1:-1:-1;;22331:29:1;22322:39;;;22318:50;;22108:266::o;22379:515::-;-1:-1:-1;;;;;22658:15:1;;;22640:34;;22710:15;;22705:2;22690:18;;22683:43;22757:2;22742:18;;22735:34;;;22805:3;22800:2;22785:18;;22778:31;;;22583:4;;22826:62;;22868:19;;22860:6;22852;22826:62;:::i;22899:470::-;23078:3;23116:6;23110:13;23132:53;23178:6;23173:3;23166:4;23158:6;23154:17;23132:53;:::i;:::-;23248:13;;23207:16;;;;23270:57;23248:13;23207:16;23304:4;23292:17;;23270:57;:::i;:::-;23343:20;;22899:470;-1:-1:-1;;;;22899:470:1:o;25305:642::-;25586:6;25574:19;;25556:38;;-1:-1:-1;;;;;25630:32:1;;25625:2;25610:18;;25603:60;25650:3;25694:2;25679:18;;25672:31;;;-1:-1:-1;;25726:46:1;;25752:19;;25744:6;25726:46;:::i;:::-;25822:6;25815:14;25808:22;25803:2;25792:9;25788:18;25781:50;25880:9;25872:6;25868:22;25862:3;25851:9;25847:19;25840:51;25908:33;25934:6;25926;25908:33;:::i;:::-;25900:41;25305:642;-1:-1:-1;;;;;;;;25305:642:1:o;25952:245::-;26031:6;26039;26092:2;26080:9;26071:7;26067:23;26063:32;26060:52;;;26108:1;26105;26098:12;26060:52;-1:-1:-1;;26131:16:1;;26187:2;26172:18;;;26166:25;26131:16;;26166:25;;-1:-1:-1;25952:245:1:o;26629:1484::-;26975:6;26967;26963:19;26952:9;26945:38;26926:4;27002:2;27040:3;27035:2;27024:9;27020:18;27013:31;27064:1;27097:6;27091:13;27127:36;27153:9;27127:36;:::i;:::-;27200:6;27194:3;27183:9;27179:19;27172:35;27226:3;27248:1;27280:2;27269:9;27265:18;27297:1;27292:122;;;;27428:1;27423:354;;;;27258:519;;27292:122;-1:-1:-1;;27340:24:1;;27320:18;;;27313:52;27400:3;27385:19;;;-1:-1:-1;27292:122:1;;27423:354;27454:6;27451:1;27444:17;27502:2;27499:1;27489:16;27527:1;27541:180;27555:6;27552:1;27549:13;27541:180;;;27648:14;;27624:17;;;27620:26;;27613:50;27691:16;;;;27570:10;;27541:180;;;27745:17;;27741:26;;;-1:-1:-1;;27258:519:1;;;;;;27822:9;27817:3;27813:19;27808:2;27797:9;27793:18;27786:47;27856:30;27882:3;27874:6;27856:30;:::i;:::-;27842:44;;;27895:46;27937:2;27926:9;27922:18;27914:6;-1:-1:-1;;;;;3616:31:1;3604:44;;3550:104;27895:46;-1:-1:-1;;;;;3616:31:1;;27992:3;27977:19;;3604:44;28046:9;28038:6;28034:22;28028:3;28017:9;28013:19;28006:51;28074:33;28100:6;28092;28074:33;:::i;:::-;28066:41;26629:1484;-1:-1:-1;;;;;;;;;26629:1484:1:o;28525:271::-;28708:6;28700;28695:3;28682:33;28664:3;28734:16;;28759:13;;;28734:16;28525:271;-1:-1:-1;28525:271:1:o;29156:583::-;29423:6;29415;29411:19;29400:9;29393:38;29467:3;29462:2;29451:9;29447:18;29440:31;29374:4;29494:46;29535:3;29524:9;29520:19;29512:6;29494:46;:::i;:::-;-1:-1:-1;;;;;29580:6:1;29576:31;29571:2;29560:9;29556:18;29549:59;29656:9;29648:6;29644:22;29639:2;29628:9;29624:18;29617:50;29684:49;29726:6;29718;29710;29684:49;:::i;29744:320::-;29831:6;29839;29892:2;29880:9;29871:7;29867:23;29863:32;29860:52;;;29908:1;29905;29898:12;29860:52;29940:9;29934:16;29959:31;29984:5;29959:31;:::i;:::-;30054:2;30039:18;;;;30033:25;30009:5;;30033:25;;-1:-1:-1;;;29744:320:1:o;30412:127::-;30473:10;30468:3;30464:20;30461:1;30454:31;30504:4;30501:1;30494:15;30528:4;30525:1;30518:15;30796:127;30857:10;30852:3;30848:20;30845:1;30838:31;30888:4;30885:1;30878:15;30912:4;30909:1;30902:15;30928:120;30968:1;30994;30984:35;;30999:18;;:::i;:::-;-1:-1:-1;31033:9:1;;30928:120::o;31053:125::-;31093:4;31121:1;31118;31115:8;31112:34;;;31126:18;;:::i;:::-;-1:-1:-1;31163:9:1;;31053:125::o;31183:112::-;31215:1;31241;31231:35;;31246:18;;:::i;:::-;-1:-1:-1;31280:9:1;;31183:112::o;31300:128::-;31340:3;31371:1;31367:6;31364:1;31361:13;31358:39;;;31377:18;;:::i;:::-;-1:-1:-1;31413:9:1;;31300:128::o

Swarm Source

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