ETH Price: $2,435.59 (+1.40%)

Token

moody kittens (ktns)
 

Overview

Max Total Supply

0 ktns

Holders

248

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 ktns
0x62286bc66baaa024260004cabaeb2b3ca464715c
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:
moodykittens

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: contracts/interfaces/ILayerZeroUserApplicationConfig.sol

pragma solidity >=0.5.0;

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

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

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

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

// File: contracts/interfaces/ILayerZeroEndpoint.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/interfaces/ILayerZeroReceiver.sol

pragma solidity >=0.5.0;

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
  address private _owner;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

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

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    _approve(to, tokenId);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

    _transfer(from, to, tokenId);
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    _beforeTokenTransfer(from, to, tokenId);

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

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

    emit Transfer(from, to, tokenId);
  }

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

  /**
   * @dev Approve `operator` to operate on all of `owner` tokens
   *
   * Emits a {ApprovalForAll} event.
   */
  function _setApprovalForAll(
    address owner,
    address operator,
    bool approved
  ) internal virtual {
    require(owner != operator, "ERC721: approve to caller");
    _operatorApprovals[owner][operator] = approved;
    emit ApprovalForAll(owner, operator, approved);
  }

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

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

// File: contracts/NonblockingReceiver.sol

pragma solidity ^0.8.6;

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

  struct FailedMessages {
    uint256 payloadLength;
    bytes32 payloadHash;
  }

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

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

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

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

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

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

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

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

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

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

//ᶠᵉᵉᵈ ᵐᵉ ʰᵘᵍ ᵐᵉ ᵗʰᵉⁿ ᶠˣˣᵏ ᵒᶠᶠ ʷⁱˡˡ ʸᵃ /ᐠ。。ᐟ\
// File: contracts/moodykittens-eth.sol

pragma solidity ^0.8.7;

contract moodykittens is Ownable, ERC721, NonblockingReceiver {
  address public _owner;
  string private baseURI;
  uint256 nextTokenId = 4900;
  uint256 MAX_MINT_ETHEREUM = 8400;

  uint256 gasForDestinationLzReceive = 350000;

  constructor(string memory baseURI_, address _layerZeroEndpoint)
    ERC721("moody kittens", "ktns")
  {
    _owner = msg.sender;
    endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
    baseURI = baseURI_;
  }

  // mint function
  // you can choose to mint 1 or 2
  // mint is free, but payments are accepted
  function mint(uint8 numTokens) external payable {
    require(numTokens < 3, "moody kittens: Max 2 NFTs per transaction");
    require(
      nextTokenId + numTokens <= MAX_MINT_ETHEREUM,
      "moody kittens: Mint exceeds supply"
    );
    _safeMint(msg.sender, ++nextTokenId);
    if (numTokens == 2) {
      _safeMint(msg.sender, ++nextTokenId);
    }
  }

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

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

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

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

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

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

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

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

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

  // This allows the devs to receive kind donations
  function withdraw(uint256 amt) external onlyOwner {
    (bool sent, ) = payable(_owner).call{ value: amt }("");
    require(sent, "moody kittens: Failed to withdraw Ether");
  }

  // just in case this fixed variable limits us from future integrations
  function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner {
    gasForDestinationLzReceive = newVal;
  }

  // ------------------
  // Internal Functions
  // ------------------

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052611324600c556120d0600d5562055730600e553480156200002457600080fd5b50604051620052eb380380620052eb83398181016040528101906200004a91906200052b565b6040518060400160405280600d81526020017f6d6f6f6479206b697474656e73000000000000000000000000000000000000008152506040518060400160405280600481526020017f6b746e7300000000000000000000000000000000000000000000000000000000815250620000d6620000ca620001ad60201b60201c565b620001b560201b60201c565b8160019080519060200190620000ee92919062000279565b5080600290805190602001906200010792919062000279565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b9080519060200190620001a492919062000279565b505050620005f6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028790620005c0565b90600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003928262000347565b810181811067ffffffffffffffff82111715620003b457620003b362000358565b5b80604052505050565b6000620003c962000329565b9050620003d7828262000387565b919050565b600067ffffffffffffffff821115620003fa57620003f962000358565b5b620004058262000347565b9050602081019050919050565b60005b838110156200043257808201518184015260208101905062000415565b8381111562000442576000848401525b50505050565b60006200045f6200045984620003dc565b620003bd565b9050828152602081018484840111156200047e576200047d62000342565b5b6200048b84828562000412565b509392505050565b600082601f830112620004ab57620004aa6200033d565b5b8151620004bd84826020860162000448565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004f382620004c6565b9050919050565b6200050581620004e6565b81146200051157600080fd5b50565b6000815190506200052581620004fa565b92915050565b6000806040838503121562000545576200054462000333565b5b600083015167ffffffffffffffff81111562000566576200056562000338565b5b620005748582860162000493565b9250506020620005878582860162000514565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005d957607f821691505b60208210811415620005f057620005ef62000591565b5b50919050565b614ce580620006066000396000f3fe6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610623578063eb8d72b714610660578063ed88c68e14610689578063f2fde38b14610693576101c1565b8063b88d4fde14610585578063c87b56dd146105ae578063cf89fa03146105eb578063d1deba1f14610607576101c1565b8063943fb872116100d1578063943fb872146104dd57806395d89b4114610506578063a22cb46514610531578063b2bdfa7b1461055a576101c1565b80637533d788146104375780638da5cb5b146104745780638ee749121461049f576101c1565b80632e1a7d4d116101645780636352211e1161013e5780636352211e1461038a5780636ecd2306146103c757806370a08231146103e3578063715018a614610420576101c1565b80632e1a7d4d1461030f57806342842e0e1461033857806355f804b314610361576101c1565b8063081812fc116101a0578063081812fc14610257578063095ea7b3146102945780631c37a822146102bd57806323b872dd146102e6576101c1565b80621d3567146101c657806301ffc9a7146101ef57806306fdde031461022c575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612d2e565b6106bc565b005b3480156101fb57600080fd5b5061021660048036038101906102119190612e25565b6108fe565b6040516102239190612e6d565b60405180910390f35b34801561023857600080fd5b506102416109e0565b60405161024e9190612f10565b60405180910390f35b34801561026357600080fd5b5061027e60048036038101906102799190612f68565b610a72565b60405161028b9190612fd6565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b6919061301d565b610af7565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612d2e565b610c0f565b005b3480156102f257600080fd5b5061030d6004803603810190610308919061305d565b610c8f565b005b34801561031b57600080fd5b5061033660048036038101906103319190612f68565b610cef565b005b34801561034457600080fd5b5061035f600480360381019061035a919061305d565b610e3d565b005b34801561036d57600080fd5b5061038860048036038101906103839190613151565b610e5d565b005b34801561039657600080fd5b506103b160048036038101906103ac9190612f68565b610ef3565b6040516103be9190612fd6565b60405180910390f35b6103e160048036038101906103dc91906131d3565b610fa5565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190613200565b61108c565b604051610417919061323c565b60405180910390f35b34801561042c57600080fd5b50610435611144565b005b34801561044357600080fd5b5061045e60048036038101906104599190613257565b6111cc565b60405161046b91906132d9565b60405180910390f35b34801561048057600080fd5b5061048961126c565b6040516104969190612fd6565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906132fb565b611295565b6040516104d4929190613383565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612f68565b6112e9565b005b34801561051257600080fd5b5061051b61136f565b6040516105289190612f10565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906133d8565b611401565b005b34801561056657600080fd5b5061056f611417565b60405161057c9190612fd6565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613418565b61143d565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612f68565b61149f565b6040516105e29190612f10565b60405180910390f35b6106056004803603810190610600919061349b565b611546565b005b610621600480360381019061061c919061353b565b61182a565b005b34801561062f57600080fd5b5061064a600480360381019061064591906135df565b6119ca565b6040516106579190612e6d565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061361f565b611a5e565b005b610691611b0a565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613200565b611b0c565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071657600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461073c906136ae565b905083511480156107825750600960008561ffff1661ffff168152602001908152602001600020604051610770919061377f565b60405180910390208380519060200120145b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890613808565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108009493929190613846565b600060405180830381600087803b15801561081a57600080fd5b505af192505050801561082b575060015b6108f7576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161087591906138ca565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108ea9493929190613846565b60405180910390a16108f8565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d957506109d882611c04565b5b9050919050565b6060600180546109ef906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b906136ae565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611c6e565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613953565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a906139e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611cda565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611cda565b6119ca565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613a77565b60405180910390fd5b610c0a8383611ce2565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613b09565b60405180910390fd5b610c8984848484611d9b565b50505050565b610ca0610c9a611cda565b82611dc8565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613b9b565b60405180910390fd5b610cea838383611ea6565b505050565b610cf7611cda565b73ffffffffffffffffffffffffffffffffffffffff16610d1561126c565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613c07565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db390613c4d565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613cd4565b60405180910390fd5b5050565b610e588383836040518060200160405280600081525061143d565b505050565b610e65611cda565b73ffffffffffffffffffffffffffffffffffffffff16610e8361126c565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613c07565b60405180910390fd5b80600b9080519060200190610eef929190612a31565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613d66565b60405180910390fd5b80915050919050565b60038160ff1610610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613df8565b60405180910390fd5b600d548160ff16600c54610fff9190613e47565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613f0f565b60405180910390fd5b61105e33600c6000815461105390613f2f565b919050819055612102565b60028160ff1614156110895761108833600c6000815461107d90613f2f565b919050819055612102565b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613fea565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61114c611cda565b73ffffffffffffffffffffffffffffffffffffffff1661116a61126c565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613c07565b60405180910390fd5b6111ca6000612120565b565b600960205280600052604060002060009150905080546111eb906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611217906136ae565b80156112645780601f1061123957610100808354040283529160200191611264565b820191906000526020600020905b81548152906001019060200180831161124757829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112f1611cda565b73ffffffffffffffffffffffffffffffffffffffff1661130f61126c565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613c07565b60405180910390fd5b80600e8190555050565b60606002805461137e906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa906136ae565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050905090565b61141361140c611cda565b83836121e4565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61144e611448611cda565b83611dc8565b61148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613b9b565b60405180910390fd5b61149984848484612351565b50505050565b60606114aa82611c6e565b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e09061407c565b60405180910390fd5b60006114f36123ad565b90506000815111611513576040518060200160405280600081525061153e565b8061151d8461243f565b60405160200161152e9291906140d8565b6040516020818303038152906040525b915050919050565b61154f81610ef3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061416e565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115e4906136ae565b905011611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614200565b60405180910390fd5b61162f816125a0565b60003382604051602001611644929190614220565b6040516020818303038152906040529050600060019050600081600e546040516020016116729291906142a0565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e99594939291906142cc565b6040805180830381865afa158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190614342565b5090508034101561176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061441a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f0969594939291906144db565b6000604051808303818588803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185591906138ca565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906145c3565b60405180910390fd5b8060000154838390501480156118fa5750806001015483836040516118f0929190614608565b6040518091039020145b611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119309061466d565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b81526004016119909594939291906146ba565b600060405180830381600087803b1580156119aa57600080fd5b505af11580156119be573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a66611cda565b73ffffffffffffffffffffffffffffffffffffffff16611a8461126c565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613c07565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b04929190612ab7565b50505050565b565b611b14611cda565b73ffffffffffffffffffffffffffffffffffffffff16611b3261126c565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613c07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef90614781565b60405180910390fd5b611c0181612120565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5583610ef3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611db291906147cd565b91509150611dc08282612102565b505050505050565b6000611dd382611c6e565b611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e099061487f565b60405180910390fd5b6000611e1d83610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8c57508373ffffffffffffffffffffffffffffffffffffffff16611e7484610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e9d5750611e9c81856119ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ec682610ef3565b73ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614911565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f83906149a3565b60405180910390fd5b611f978383836126b1565b611fa2600082611ce2565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff291906149c3565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120499190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61211c8282604051806020016040528060008152506126b6565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90614a43565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123449190612e6d565b60405180910390a3505050565b61235c848484611ea6565b61236884848484612711565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614ad5565b60405180910390fd5b50505050565b6060600b80546123bc906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546123e8906136ae565b80156124355780601f1061240a57610100808354040283529160200191612435565b820191906000526020600020905b81548152906001019060200180831161241857829003601f168201915b5050505050905090565b60606000821415612487576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061259b565b600082905060005b600082146124b95780806124a290613f2f565b915050600a826124b29190614b24565b915061248f565b60008167ffffffffffffffff8111156124d5576124d4612bc3565b5b6040519080825280601f01601f1916602001820160405280156125075781602001600182028036833780820191505090505b5090505b600085146125945760018261252091906149c3565b9150600a8561252f9190614b55565b603061253b9190613e47565b60f81b81838151811061255157612550614b86565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561258d9190614b24565b945061250b565b8093505050505b919050565b60006125ab82610ef3565b90506125b9816000846126b1565b6125c4600083611ce2565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261491906149c3565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126c08383612899565b6126cd6000848484612711565b61270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614ad5565b60405180910390fd5b505050565b60006127328473ffffffffffffffffffffffffffffffffffffffff16612a1e565b1561288c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275b611cda565b8786866040518563ffffffff1660e01b815260040161277d9493929190614bb5565b6020604051808303816000875af19250505080156127b957506040513d601f19601f820116820180604052508101906127b69190614c16565b60015b61283c573d80600081146127e9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ee565b606091505b50600081511415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90614ad5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612891565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614c8f565b60405180910390fd5b612915600083836126b1565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129659190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a3d906136ae565b90600052602060002090601f016020900481019282612a5f5760008555612aa6565b82601f10612a7857805160ff1916838001178555612aa6565b82800160010185558215612aa6579182015b82811115612aa5578251825591602001919060010190612a8a565b5b509050612ab39190612b3d565b5090565b828054612ac3906136ae565b90600052602060002090601f016020900481019282612ae55760008555612b2c565b82601f10612afe57803560ff1916838001178555612b2c565b82800160010185558215612b2c579182015b82811115612b2b578235825591602001919060010190612b10565b5b509050612b399190612b3d565b5090565b5b80821115612b56576000816000905550600101612b3e565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b612b8581612b6e565b8114612b9057600080fd5b50565b600081359050612ba281612b7c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfb82612bb2565b810181811067ffffffffffffffff82111715612c1a57612c19612bc3565b5b80604052505050565b6000612c2d612b5a565b9050612c398282612bf2565b919050565b600067ffffffffffffffff821115612c5957612c58612bc3565b5b612c6282612bb2565b9050602081019050919050565b82818337600083830152505050565b6000612c91612c8c84612c3e565b612c23565b905082815260208101848484011115612cad57612cac612bad565b5b612cb8848285612c6f565b509392505050565b600082601f830112612cd557612cd4612ba8565b5b8135612ce5848260208601612c7e565b91505092915050565b600067ffffffffffffffff82169050919050565b612d0b81612cee565b8114612d1657600080fd5b50565b600081359050612d2881612d02565b92915050565b60008060008060808587031215612d4857612d47612b64565b5b6000612d5687828801612b93565b945050602085013567ffffffffffffffff811115612d7757612d76612b69565b5b612d8387828801612cc0565b9350506040612d9487828801612d19565b925050606085013567ffffffffffffffff811115612db557612db4612b69565b5b612dc187828801612cc0565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0281612dcd565b8114612e0d57600080fd5b50565b600081359050612e1f81612df9565b92915050565b600060208284031215612e3b57612e3a612b64565b5b6000612e4984828501612e10565b91505092915050565b60008115159050919050565b612e6781612e52565b82525050565b6000602082019050612e826000830184612e5e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec2578082015181840152602081019050612ea7565b83811115612ed1576000848401525b50505050565b6000612ee282612e88565b612eec8185612e93565b9350612efc818560208601612ea4565b612f0581612bb2565b840191505092915050565b60006020820190508181036000830152612f2a8184612ed7565b905092915050565b6000819050919050565b612f4581612f32565b8114612f5057600080fd5b50565b600081359050612f6281612f3c565b92915050565b600060208284031215612f7e57612f7d612b64565b5b6000612f8c84828501612f53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fc082612f95565b9050919050565b612fd081612fb5565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b612ffa81612fb5565b811461300557600080fd5b50565b60008135905061301781612ff1565b92915050565b6000806040838503121561303457613033612b64565b5b600061304285828601613008565b925050602061305385828601612f53565b9150509250929050565b60008060006060848603121561307657613075612b64565b5b600061308486828701613008565b935050602061309586828701613008565b92505060406130a686828701612f53565b9150509250925092565b600067ffffffffffffffff8211156130cb576130ca612bc3565b5b6130d482612bb2565b9050602081019050919050565b60006130f46130ef846130b0565b612c23565b9050828152602081018484840111156131105761310f612bad565b5b61311b848285612c6f565b509392505050565b600082601f83011261313857613137612ba8565b5b81356131488482602086016130e1565b91505092915050565b60006020828403121561316757613166612b64565b5b600082013567ffffffffffffffff81111561318557613184612b69565b5b61319184828501613123565b91505092915050565b600060ff82169050919050565b6131b08161319a565b81146131bb57600080fd5b50565b6000813590506131cd816131a7565b92915050565b6000602082840312156131e9576131e8612b64565b5b60006131f7848285016131be565b91505092915050565b60006020828403121561321657613215612b64565b5b600061322484828501613008565b91505092915050565b61323681612f32565b82525050565b6000602082019050613251600083018461322d565b92915050565b60006020828403121561326d5761326c612b64565b5b600061327b84828501612b93565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006132ab82613284565b6132b5818561328f565b93506132c5818560208601612ea4565b6132ce81612bb2565b840191505092915050565b600060208201905081810360008301526132f381846132a0565b905092915050565b60008060006060848603121561331457613313612b64565b5b600061332286828701612b93565b935050602084013567ffffffffffffffff81111561334357613342612b69565b5b61334f86828701612cc0565b925050604061336086828701612f53565b9150509250925092565b6000819050919050565b61337d8161336a565b82525050565b6000604082019050613398600083018561322d565b6133a56020830184613374565b9392505050565b6133b581612e52565b81146133c057600080fd5b50565b6000813590506133d2816133ac565b92915050565b600080604083850312156133ef576133ee612b64565b5b60006133fd85828601613008565b925050602061340e858286016133c3565b9150509250929050565b6000806000806080858703121561343257613431612b64565b5b600061344087828801613008565b945050602061345187828801613008565b935050604061346287828801612f53565b925050606085013567ffffffffffffffff81111561348357613482612b69565b5b61348f87828801612cc0565b91505092959194509250565b600080604083850312156134b2576134b1612b64565b5b60006134c085828601612b93565b92505060206134d185828601612f53565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126134fb576134fa612ba8565b5b8235905067ffffffffffffffff811115613518576135176134db565b5b602083019150836001820283011115613534576135336134e0565b5b9250929050565b60008060008060006080868803121561355757613556612b64565b5b600061356588828901612b93565b955050602086013567ffffffffffffffff81111561358657613585612b69565b5b61359288828901612cc0565b94505060406135a388828901612d19565b935050606086013567ffffffffffffffff8111156135c4576135c3612b69565b5b6135d0888289016134e5565b92509250509295509295909350565b600080604083850312156135f6576135f5612b64565b5b600061360485828601613008565b925050602061361585828601613008565b9150509250929050565b60008060006040848603121561363857613637612b64565b5b600061364686828701612b93565b935050602084013567ffffffffffffffff81111561366757613666612b69565b5b613673868287016134e5565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136c657607f821691505b602082108114156136da576136d961367f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461370d816136ae565b61371781866136e0565b94506001821660008114613732576001811461374357613776565b60ff19831686528186019350613776565b61374c856136eb565b60005b8381101561376e5781548189015260018201915060208101905061374f565b838801955050505b50505092915050565b600061378b8284613700565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b60006137f2603483612e93565b91506137fd82613796565b604082019050919050565b60006020820190508181036000830152613821816137e5565b9050919050565b61383181612b6e565b82525050565b61384081612cee565b82525050565b600060808201905061385b6000830187613828565b818103602083015261386d81866132a0565b905061387c6040830185613837565b818103606083015261388e81846132a0565b905095945050505050565b60006138a482613284565b6138ae81856136e0565b93506138be818560208601612ea4565b80840191505092915050565b60006138d68284613899565b915081905092915050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061393d602c83612e93565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139cf602183612e93565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a61603883612e93565b9150613a6c82613a05565b604082019050919050565b60006020820190508181036000830152613a9081613a54565b9050919050565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b6000613af3602b83612e93565b9150613afe82613a97565b604082019050919050565b60006020820190508181036000830152613b2281613ae6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b85603183612e93565b9150613b9082613b29565b604082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf1602083612e93565b9150613bfc82613bbb565b602082019050919050565b60006020820190508181036000830152613c2081613be4565b9050919050565b50565b6000613c376000836136e0565b9150613c4282613c27565b600082019050919050565b6000613c5882613c2a565b9150819050919050565b7f6d6f6f6479206b697474656e733a204661696c656420746f207769746864726160008201527f7720457468657200000000000000000000000000000000000000000000000000602082015250565b6000613cbe602783612e93565b9150613cc982613c62565b604082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d50602983612e93565b9150613d5b82613cf4565b604082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f6d6f6f6479206b697474656e733a204d61782032204e4654732070657220747260008201527f616e73616374696f6e0000000000000000000000000000000000000000000000602082015250565b6000613de2602983612e93565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5282612f32565b9150613e5d83612f32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9257613e91613e18565b5b828201905092915050565b7f6d6f6f6479206b697474656e733a204d696e742065786365656473207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef9602283612e93565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b6000613f3a82612f32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6d57613f6c613e18565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613fd4602a83612e93565b9150613fdf82613f78565b604082019050919050565b6000602082019050818103600083015261400381613fc7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614066602f83612e93565b91506140718261400a565b604082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b600081905092915050565b60006140b282612e88565b6140bc818561409c565b93506140cc818560208601612ea4565b80840191505092915050565b60006140e482856140a7565b91506140f082846140a7565b91508190509392505050565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614158602283612e93565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b60006141ea602e83612e93565b91506141f58261418e565b604082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b60006040820190506142356000830185612fc7565b614242602083018461322d565b9392505050565b60008160f01b9050919050565b600061426182614249565b9050919050565b61427961427482612b6e565b614256565b82525050565b6000819050919050565b61429a61429582612f32565b61427f565b82525050565b60006142ac8285614268565b6002820191506142bc8284614289565b6020820191508190509392505050565b600060a0820190506142e16000830188613828565b6142ee6020830187612fc7565b818103604083015261430081866132a0565b905061430f6060830185612e5e565b818103608083015261432181846132a0565b90509695505050505050565b60008151905061433c81612f3c565b92915050565b6000806040838503121561435957614358612b64565b5b60006143678582860161432d565b92505060206143788582860161432d565b9150509250929050565b7f6d6f6f6479206b697474656e733a206d73672e76616c7565206e6f7420656e6f60008201527f75676820746f20636f766572206d6573736167654665652e2053656e6420676160208201527f7320666f72206d65737361676520666565730000000000000000000000000000604082015250565b6000614404605283612e93565b915061440f82614382565b606082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b60008154614447816136ae565b614451818661328f565b9450600182166000811461446c576001811461447e576144b1565b60ff19831686526020860193506144b1565b614487856136eb565b60005b838110156144a95781548189015260018201915060208101905061448a565b808801955050505b50505092915050565b60006144c582612f95565b9050919050565b6144d5816144ba565b82525050565b600060c0820190506144f06000830189613828565b8181036020830152614502818861443a565b9050818103604083015261451681876132a0565b905061452560608301866144cc565b6145326080830185612fc7565b81810360a083015261454481846132a0565b9050979650505050505050565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b60006145ad602683612e93565b91506145b882614551565b604082019050919050565b600060208201905081810360008301526145dc816145a0565b9050919050565b60006145ef83856136e0565b93506145fc838584612c6f565b82840190509392505050565b60006146158284866145e3565b91508190509392505050565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b6000614657601a83612e93565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b6000614699838561328f565b93506146a6838584612c6f565b6146af83612bb2565b840190509392505050565b60006080820190506146cf6000830188613828565b81810360208301526146e181876132a0565b90506146f06040830186613837565b818103606083015261470381848661468d565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061476b602683612e93565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b6147aa816144ba565b81146147b557600080fd5b50565b6000815190506147c7816147a1565b92915050565b600080604083850312156147e4576147e3612b64565b5b60006147f2858286016147b8565b92505060206148038582860161432d565b9150509250929050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614869602c83612e93565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006148fb602983612e93565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061498d602483612e93565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b60006149ce82612f32565b91506149d983612f32565b9250828210156149ec576149eb613e18565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a2d601983612e93565b9150614a38826149f7565b602082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614abf603283612e93565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b2f82612f32565b9150614b3a83612f32565b925082614b4a57614b49614af5565b5b828204905092915050565b6000614b6082612f32565b9150614b6b83612f32565b925082614b7b57614b7a614af5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000608082019050614bca6000830187612fc7565b614bd76020830186612fc7565b614be4604083018561322d565b8181036060830152614bf681846132a0565b905095945050505050565b600081519050614c1081612df9565b92915050565b600060208284031215614c2c57614c2b612b64565b5b6000614c3a84828501614c01565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c79602083612e93565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b905091905056fea2646970667358221220be9c579fad7b558e030ac8f8db8ace3ed8d6c76bdbf1023f0afff7b7693d11b764736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e7a703743654d6d584569424e71757a6e36595a3857786d6833346144656378376a335437573262797973422f00000000000000000000

Deployed Bytecode

0x6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610623578063eb8d72b714610660578063ed88c68e14610689578063f2fde38b14610693576101c1565b8063b88d4fde14610585578063c87b56dd146105ae578063cf89fa03146105eb578063d1deba1f14610607576101c1565b8063943fb872116100d1578063943fb872146104dd57806395d89b4114610506578063a22cb46514610531578063b2bdfa7b1461055a576101c1565b80637533d788146104375780638da5cb5b146104745780638ee749121461049f576101c1565b80632e1a7d4d116101645780636352211e1161013e5780636352211e1461038a5780636ecd2306146103c757806370a08231146103e3578063715018a614610420576101c1565b80632e1a7d4d1461030f57806342842e0e1461033857806355f804b314610361576101c1565b8063081812fc116101a0578063081812fc14610257578063095ea7b3146102945780631c37a822146102bd57806323b872dd146102e6576101c1565b80621d3567146101c657806301ffc9a7146101ef57806306fdde031461022c575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612d2e565b6106bc565b005b3480156101fb57600080fd5b5061021660048036038101906102119190612e25565b6108fe565b6040516102239190612e6d565b60405180910390f35b34801561023857600080fd5b506102416109e0565b60405161024e9190612f10565b60405180910390f35b34801561026357600080fd5b5061027e60048036038101906102799190612f68565b610a72565b60405161028b9190612fd6565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b6919061301d565b610af7565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612d2e565b610c0f565b005b3480156102f257600080fd5b5061030d6004803603810190610308919061305d565b610c8f565b005b34801561031b57600080fd5b5061033660048036038101906103319190612f68565b610cef565b005b34801561034457600080fd5b5061035f600480360381019061035a919061305d565b610e3d565b005b34801561036d57600080fd5b5061038860048036038101906103839190613151565b610e5d565b005b34801561039657600080fd5b506103b160048036038101906103ac9190612f68565b610ef3565b6040516103be9190612fd6565b60405180910390f35b6103e160048036038101906103dc91906131d3565b610fa5565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190613200565b61108c565b604051610417919061323c565b60405180910390f35b34801561042c57600080fd5b50610435611144565b005b34801561044357600080fd5b5061045e60048036038101906104599190613257565b6111cc565b60405161046b91906132d9565b60405180910390f35b34801561048057600080fd5b5061048961126c565b6040516104969190612fd6565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906132fb565b611295565b6040516104d4929190613383565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612f68565b6112e9565b005b34801561051257600080fd5b5061051b61136f565b6040516105289190612f10565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906133d8565b611401565b005b34801561056657600080fd5b5061056f611417565b60405161057c9190612fd6565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613418565b61143d565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612f68565b61149f565b6040516105e29190612f10565b60405180910390f35b6106056004803603810190610600919061349b565b611546565b005b610621600480360381019061061c919061353b565b61182a565b005b34801561062f57600080fd5b5061064a600480360381019061064591906135df565b6119ca565b6040516106579190612e6d565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061361f565b611a5e565b005b610691611b0a565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613200565b611b0c565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071657600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461073c906136ae565b905083511480156107825750600960008561ffff1661ffff168152602001908152602001600020604051610770919061377f565b60405180910390208380519060200120145b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890613808565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108009493929190613846565b600060405180830381600087803b15801561081a57600080fd5b505af192505050801561082b575060015b6108f7576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161087591906138ca565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108ea9493929190613846565b60405180910390a16108f8565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d957506109d882611c04565b5b9050919050565b6060600180546109ef906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b906136ae565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611c6e565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613953565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a906139e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611cda565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611cda565b6119ca565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613a77565b60405180910390fd5b610c0a8383611ce2565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613b09565b60405180910390fd5b610c8984848484611d9b565b50505050565b610ca0610c9a611cda565b82611dc8565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613b9b565b60405180910390fd5b610cea838383611ea6565b505050565b610cf7611cda565b73ffffffffffffffffffffffffffffffffffffffff16610d1561126c565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613c07565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db390613c4d565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613cd4565b60405180910390fd5b5050565b610e588383836040518060200160405280600081525061143d565b505050565b610e65611cda565b73ffffffffffffffffffffffffffffffffffffffff16610e8361126c565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613c07565b60405180910390fd5b80600b9080519060200190610eef929190612a31565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613d66565b60405180910390fd5b80915050919050565b60038160ff1610610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613df8565b60405180910390fd5b600d548160ff16600c54610fff9190613e47565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613f0f565b60405180910390fd5b61105e33600c6000815461105390613f2f565b919050819055612102565b60028160ff1614156110895761108833600c6000815461107d90613f2f565b919050819055612102565b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613fea565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61114c611cda565b73ffffffffffffffffffffffffffffffffffffffff1661116a61126c565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613c07565b60405180910390fd5b6111ca6000612120565b565b600960205280600052604060002060009150905080546111eb906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611217906136ae565b80156112645780601f1061123957610100808354040283529160200191611264565b820191906000526020600020905b81548152906001019060200180831161124757829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112f1611cda565b73ffffffffffffffffffffffffffffffffffffffff1661130f61126c565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613c07565b60405180910390fd5b80600e8190555050565b60606002805461137e906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa906136ae565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050905090565b61141361140c611cda565b83836121e4565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61144e611448611cda565b83611dc8565b61148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613b9b565b60405180910390fd5b61149984848484612351565b50505050565b60606114aa82611c6e565b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e09061407c565b60405180910390fd5b60006114f36123ad565b90506000815111611513576040518060200160405280600081525061153e565b8061151d8461243f565b60405160200161152e9291906140d8565b6040516020818303038152906040525b915050919050565b61154f81610ef3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061416e565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115e4906136ae565b905011611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614200565b60405180910390fd5b61162f816125a0565b60003382604051602001611644929190614220565b6040516020818303038152906040529050600060019050600081600e546040516020016116729291906142a0565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e99594939291906142cc565b6040805180830381865afa158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190614342565b5090508034101561176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061441a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f0969594939291906144db565b6000604051808303818588803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185591906138ca565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906145c3565b60405180910390fd5b8060000154838390501480156118fa5750806001015483836040516118f0929190614608565b6040518091039020145b611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119309061466d565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b81526004016119909594939291906146ba565b600060405180830381600087803b1580156119aa57600080fd5b505af11580156119be573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a66611cda565b73ffffffffffffffffffffffffffffffffffffffff16611a8461126c565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613c07565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b04929190612ab7565b50505050565b565b611b14611cda565b73ffffffffffffffffffffffffffffffffffffffff16611b3261126c565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613c07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef90614781565b60405180910390fd5b611c0181612120565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5583610ef3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611db291906147cd565b91509150611dc08282612102565b505050505050565b6000611dd382611c6e565b611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e099061487f565b60405180910390fd5b6000611e1d83610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8c57508373ffffffffffffffffffffffffffffffffffffffff16611e7484610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e9d5750611e9c81856119ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ec682610ef3565b73ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614911565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f83906149a3565b60405180910390fd5b611f978383836126b1565b611fa2600082611ce2565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff291906149c3565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120499190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61211c8282604051806020016040528060008152506126b6565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90614a43565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123449190612e6d565b60405180910390a3505050565b61235c848484611ea6565b61236884848484612711565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614ad5565b60405180910390fd5b50505050565b6060600b80546123bc906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546123e8906136ae565b80156124355780601f1061240a57610100808354040283529160200191612435565b820191906000526020600020905b81548152906001019060200180831161241857829003601f168201915b5050505050905090565b60606000821415612487576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061259b565b600082905060005b600082146124b95780806124a290613f2f565b915050600a826124b29190614b24565b915061248f565b60008167ffffffffffffffff8111156124d5576124d4612bc3565b5b6040519080825280601f01601f1916602001820160405280156125075781602001600182028036833780820191505090505b5090505b600085146125945760018261252091906149c3565b9150600a8561252f9190614b55565b603061253b9190613e47565b60f81b81838151811061255157612550614b86565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561258d9190614b24565b945061250b565b8093505050505b919050565b60006125ab82610ef3565b90506125b9816000846126b1565b6125c4600083611ce2565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261491906149c3565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126c08383612899565b6126cd6000848484612711565b61270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614ad5565b60405180910390fd5b505050565b60006127328473ffffffffffffffffffffffffffffffffffffffff16612a1e565b1561288c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275b611cda565b8786866040518563ffffffff1660e01b815260040161277d9493929190614bb5565b6020604051808303816000875af19250505080156127b957506040513d601f19601f820116820180604052508101906127b69190614c16565b60015b61283c573d80600081146127e9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ee565b606091505b50600081511415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90614ad5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612891565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614c8f565b60405180910390fd5b612915600083836126b1565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129659190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a3d906136ae565b90600052602060002090601f016020900481019282612a5f5760008555612aa6565b82601f10612a7857805160ff1916838001178555612aa6565b82800160010185558215612aa6579182015b82811115612aa5578251825591602001919060010190612a8a565b5b509050612ab39190612b3d565b5090565b828054612ac3906136ae565b90600052602060002090601f016020900481019282612ae55760008555612b2c565b82601f10612afe57803560ff1916838001178555612b2c565b82800160010185558215612b2c579182015b82811115612b2b578235825591602001919060010190612b10565b5b509050612b399190612b3d565b5090565b5b80821115612b56576000816000905550600101612b3e565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b612b8581612b6e565b8114612b9057600080fd5b50565b600081359050612ba281612b7c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfb82612bb2565b810181811067ffffffffffffffff82111715612c1a57612c19612bc3565b5b80604052505050565b6000612c2d612b5a565b9050612c398282612bf2565b919050565b600067ffffffffffffffff821115612c5957612c58612bc3565b5b612c6282612bb2565b9050602081019050919050565b82818337600083830152505050565b6000612c91612c8c84612c3e565b612c23565b905082815260208101848484011115612cad57612cac612bad565b5b612cb8848285612c6f565b509392505050565b600082601f830112612cd557612cd4612ba8565b5b8135612ce5848260208601612c7e565b91505092915050565b600067ffffffffffffffff82169050919050565b612d0b81612cee565b8114612d1657600080fd5b50565b600081359050612d2881612d02565b92915050565b60008060008060808587031215612d4857612d47612b64565b5b6000612d5687828801612b93565b945050602085013567ffffffffffffffff811115612d7757612d76612b69565b5b612d8387828801612cc0565b9350506040612d9487828801612d19565b925050606085013567ffffffffffffffff811115612db557612db4612b69565b5b612dc187828801612cc0565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0281612dcd565b8114612e0d57600080fd5b50565b600081359050612e1f81612df9565b92915050565b600060208284031215612e3b57612e3a612b64565b5b6000612e4984828501612e10565b91505092915050565b60008115159050919050565b612e6781612e52565b82525050565b6000602082019050612e826000830184612e5e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec2578082015181840152602081019050612ea7565b83811115612ed1576000848401525b50505050565b6000612ee282612e88565b612eec8185612e93565b9350612efc818560208601612ea4565b612f0581612bb2565b840191505092915050565b60006020820190508181036000830152612f2a8184612ed7565b905092915050565b6000819050919050565b612f4581612f32565b8114612f5057600080fd5b50565b600081359050612f6281612f3c565b92915050565b600060208284031215612f7e57612f7d612b64565b5b6000612f8c84828501612f53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fc082612f95565b9050919050565b612fd081612fb5565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b612ffa81612fb5565b811461300557600080fd5b50565b60008135905061301781612ff1565b92915050565b6000806040838503121561303457613033612b64565b5b600061304285828601613008565b925050602061305385828601612f53565b9150509250929050565b60008060006060848603121561307657613075612b64565b5b600061308486828701613008565b935050602061309586828701613008565b92505060406130a686828701612f53565b9150509250925092565b600067ffffffffffffffff8211156130cb576130ca612bc3565b5b6130d482612bb2565b9050602081019050919050565b60006130f46130ef846130b0565b612c23565b9050828152602081018484840111156131105761310f612bad565b5b61311b848285612c6f565b509392505050565b600082601f83011261313857613137612ba8565b5b81356131488482602086016130e1565b91505092915050565b60006020828403121561316757613166612b64565b5b600082013567ffffffffffffffff81111561318557613184612b69565b5b61319184828501613123565b91505092915050565b600060ff82169050919050565b6131b08161319a565b81146131bb57600080fd5b50565b6000813590506131cd816131a7565b92915050565b6000602082840312156131e9576131e8612b64565b5b60006131f7848285016131be565b91505092915050565b60006020828403121561321657613215612b64565b5b600061322484828501613008565b91505092915050565b61323681612f32565b82525050565b6000602082019050613251600083018461322d565b92915050565b60006020828403121561326d5761326c612b64565b5b600061327b84828501612b93565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006132ab82613284565b6132b5818561328f565b93506132c5818560208601612ea4565b6132ce81612bb2565b840191505092915050565b600060208201905081810360008301526132f381846132a0565b905092915050565b60008060006060848603121561331457613313612b64565b5b600061332286828701612b93565b935050602084013567ffffffffffffffff81111561334357613342612b69565b5b61334f86828701612cc0565b925050604061336086828701612f53565b9150509250925092565b6000819050919050565b61337d8161336a565b82525050565b6000604082019050613398600083018561322d565b6133a56020830184613374565b9392505050565b6133b581612e52565b81146133c057600080fd5b50565b6000813590506133d2816133ac565b92915050565b600080604083850312156133ef576133ee612b64565b5b60006133fd85828601613008565b925050602061340e858286016133c3565b9150509250929050565b6000806000806080858703121561343257613431612b64565b5b600061344087828801613008565b945050602061345187828801613008565b935050604061346287828801612f53565b925050606085013567ffffffffffffffff81111561348357613482612b69565b5b61348f87828801612cc0565b91505092959194509250565b600080604083850312156134b2576134b1612b64565b5b60006134c085828601612b93565b92505060206134d185828601612f53565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126134fb576134fa612ba8565b5b8235905067ffffffffffffffff811115613518576135176134db565b5b602083019150836001820283011115613534576135336134e0565b5b9250929050565b60008060008060006080868803121561355757613556612b64565b5b600061356588828901612b93565b955050602086013567ffffffffffffffff81111561358657613585612b69565b5b61359288828901612cc0565b94505060406135a388828901612d19565b935050606086013567ffffffffffffffff8111156135c4576135c3612b69565b5b6135d0888289016134e5565b92509250509295509295909350565b600080604083850312156135f6576135f5612b64565b5b600061360485828601613008565b925050602061361585828601613008565b9150509250929050565b60008060006040848603121561363857613637612b64565b5b600061364686828701612b93565b935050602084013567ffffffffffffffff81111561366757613666612b69565b5b613673868287016134e5565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136c657607f821691505b602082108114156136da576136d961367f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461370d816136ae565b61371781866136e0565b94506001821660008114613732576001811461374357613776565b60ff19831686528186019350613776565b61374c856136eb565b60005b8381101561376e5781548189015260018201915060208101905061374f565b838801955050505b50505092915050565b600061378b8284613700565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b60006137f2603483612e93565b91506137fd82613796565b604082019050919050565b60006020820190508181036000830152613821816137e5565b9050919050565b61383181612b6e565b82525050565b61384081612cee565b82525050565b600060808201905061385b6000830187613828565b818103602083015261386d81866132a0565b905061387c6040830185613837565b818103606083015261388e81846132a0565b905095945050505050565b60006138a482613284565b6138ae81856136e0565b93506138be818560208601612ea4565b80840191505092915050565b60006138d68284613899565b915081905092915050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061393d602c83612e93565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139cf602183612e93565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a61603883612e93565b9150613a6c82613a05565b604082019050919050565b60006020820190508181036000830152613a9081613a54565b9050919050565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b6000613af3602b83612e93565b9150613afe82613a97565b604082019050919050565b60006020820190508181036000830152613b2281613ae6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b85603183612e93565b9150613b9082613b29565b604082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf1602083612e93565b9150613bfc82613bbb565b602082019050919050565b60006020820190508181036000830152613c2081613be4565b9050919050565b50565b6000613c376000836136e0565b9150613c4282613c27565b600082019050919050565b6000613c5882613c2a565b9150819050919050565b7f6d6f6f6479206b697474656e733a204661696c656420746f207769746864726160008201527f7720457468657200000000000000000000000000000000000000000000000000602082015250565b6000613cbe602783612e93565b9150613cc982613c62565b604082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d50602983612e93565b9150613d5b82613cf4565b604082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f6d6f6f6479206b697474656e733a204d61782032204e4654732070657220747260008201527f616e73616374696f6e0000000000000000000000000000000000000000000000602082015250565b6000613de2602983612e93565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5282612f32565b9150613e5d83612f32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9257613e91613e18565b5b828201905092915050565b7f6d6f6f6479206b697474656e733a204d696e742065786365656473207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef9602283612e93565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b6000613f3a82612f32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6d57613f6c613e18565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613fd4602a83612e93565b9150613fdf82613f78565b604082019050919050565b6000602082019050818103600083015261400381613fc7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614066602f83612e93565b91506140718261400a565b604082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b600081905092915050565b60006140b282612e88565b6140bc818561409c565b93506140cc818560208601612ea4565b80840191505092915050565b60006140e482856140a7565b91506140f082846140a7565b91508190509392505050565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614158602283612e93565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b60006141ea602e83612e93565b91506141f58261418e565b604082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b60006040820190506142356000830185612fc7565b614242602083018461322d565b9392505050565b60008160f01b9050919050565b600061426182614249565b9050919050565b61427961427482612b6e565b614256565b82525050565b6000819050919050565b61429a61429582612f32565b61427f565b82525050565b60006142ac8285614268565b6002820191506142bc8284614289565b6020820191508190509392505050565b600060a0820190506142e16000830188613828565b6142ee6020830187612fc7565b818103604083015261430081866132a0565b905061430f6060830185612e5e565b818103608083015261432181846132a0565b90509695505050505050565b60008151905061433c81612f3c565b92915050565b6000806040838503121561435957614358612b64565b5b60006143678582860161432d565b92505060206143788582860161432d565b9150509250929050565b7f6d6f6f6479206b697474656e733a206d73672e76616c7565206e6f7420656e6f60008201527f75676820746f20636f766572206d6573736167654665652e2053656e6420676160208201527f7320666f72206d65737361676520666565730000000000000000000000000000604082015250565b6000614404605283612e93565b915061440f82614382565b606082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b60008154614447816136ae565b614451818661328f565b9450600182166000811461446c576001811461447e576144b1565b60ff19831686526020860193506144b1565b614487856136eb565b60005b838110156144a95781548189015260018201915060208101905061448a565b808801955050505b50505092915050565b60006144c582612f95565b9050919050565b6144d5816144ba565b82525050565b600060c0820190506144f06000830189613828565b8181036020830152614502818861443a565b9050818103604083015261451681876132a0565b905061452560608301866144cc565b6145326080830185612fc7565b81810360a083015261454481846132a0565b9050979650505050505050565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b60006145ad602683612e93565b91506145b882614551565b604082019050919050565b600060208201905081810360008301526145dc816145a0565b9050919050565b60006145ef83856136e0565b93506145fc838584612c6f565b82840190509392505050565b60006146158284866145e3565b91508190509392505050565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b6000614657601a83612e93565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b6000614699838561328f565b93506146a6838584612c6f565b6146af83612bb2565b840190509392505050565b60006080820190506146cf6000830188613828565b81810360208301526146e181876132a0565b90506146f06040830186613837565b818103606083015261470381848661468d565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061476b602683612e93565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b6147aa816144ba565b81146147b557600080fd5b50565b6000815190506147c7816147a1565b92915050565b600080604083850312156147e4576147e3612b64565b5b60006147f2858286016147b8565b92505060206148038582860161432d565b9150509250929050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614869602c83612e93565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006148fb602983612e93565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061498d602483612e93565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b60006149ce82612f32565b91506149d983612f32565b9250828210156149ec576149eb613e18565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a2d601983612e93565b9150614a38826149f7565b602082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614abf603283612e93565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b2f82612f32565b9150614b3a83612f32565b925082614b4a57614b49614af5565b5b828204905092915050565b6000614b6082612f32565b9150614b6b83612f32565b925082614b7b57614b7a614af5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000608082019050614bca6000830187612fc7565b614bd76020830186612fc7565b614be4604083018561322d565b8181036060830152614bf681846132a0565b905095945050505050565b600081519050614c1081612df9565b92915050565b600060208284031215614c2c57614c2b612b64565b5b6000614c3a84828501614c01565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c79602083612e93565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b905091905056fea2646970667358221220be9c579fad7b558e030ac8f8db8ace3ed8d6c76bdbf1023f0afff7b7693d11b764736f6c634300080b0033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e7a703743654d6d584569424e71757a6e36595a3857786d6833346144656378376a335437573262797973422f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://QmNzp7CeMmXEiBNquzn6YZ8Wxmh34aDecx7j3T7W2byysB/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d4e7a703743654d6d584569424e71757a6e36595a385778
Arg [4] : 6d6833346144656378376a335437573262797973422f00000000000000000000


Deployed Bytecode Sourcemap

46135:3730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43054:963;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30706:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31663:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33186:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32751:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44023:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33964:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48925:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34359:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48717:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31351:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46700:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31071:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12416:97;;;;;;;;;;;;;:::i;:::-;;42875:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11805:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42772:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;49185:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31818:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33489:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46202:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34587:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31979:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47202:1509;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44974:810;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33719:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45790:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48807:59;;;:::i;:::-;;12658:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43054:963;43237:8;;;;;;;;;;;43215:31;;:10;:31;;;43207:40;;;;;;43362:19;:32;43382:11;43362:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;43340:11;:18;:61;:143;;;;;43450:19;:32;43470:11;43450:32;;;;;;;;;;;;;;;43440:43;;;;;;:::i;:::-;;;;;;;;43424:11;43414:22;;;;;;:69;43340:143;43324:229;;;;;;;;;;;;:::i;:::-;;;;;;;;;43669:4;:16;;;43686:11;43699;43712:6;43720:8;43669:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43665:347;;43854:79;;;;;;;;43879:8;:15;43854:79;;;;43915:8;43905:19;;;;;;43854:79;;;43803:14;:27;43818:11;43803:27;;;;;;;;;;;;;;;43831:11;43803:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;43844:6;43803:48;;;;;;;;;;;;;:130;;;;;;;;;;;;;;;;;;;43947:57;43961:11;43974;43987:6;43995:8;43947:57;;;;;;;;;:::i;:::-;;;;;;;;43665:347;;;;43054:963;;;;:::o;30706:309::-;30833:4;30878:25;30863:40;;;:11;:40;;;;:99;;;;30929:33;30914:48;;;:11;:48;;;;30863:99;:146;;;;30973:36;30997:11;30973:23;:36::i;:::-;30863:146;30849:160;;30706:309;;;:::o;31663:94::-;31717:13;31746:5;31739:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31663:94;:::o;33186:239::-;33287:7;33314:16;33322:7;33314;:16::i;:::-;33306:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33395:15;:24;33411:7;33395:24;;;;;;;;;;;;;;;;;;;;;33388:31;;33186:239;;;:::o;32751:377::-;32828:13;32844:23;32859:7;32844:14;:23::i;:::-;32828:39;;32888:5;32882:11;;:2;:11;;;;32874:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32972:5;32956:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32981:37;32998:5;33005:12;:10;:12::i;:::-;32981:16;:37::i;:::-;32956:62;32940:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;33101:21;33110:2;33114:7;33101:8;:21::i;:::-;32821:307;32751:377;;:::o;44023:383::-;44239:4;44217:27;;:10;:27;;;44201:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;44346:54;44357:11;44370;44383:6;44391:8;44346:10;:54::i;:::-;44023:383;;;;:::o;33964:332::-;34145:41;34164:12;:10;:12::i;:::-;34178:7;34145:18;:41::i;:::-;34129:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;34262:28;34272:4;34278:2;34282:7;34262:9;:28::i;:::-;33964:332;;;:::o;48925:180::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48983:9:::1;49006:6;;;;;;;;;;;48998:20;;49027:3;48998:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48982:54;;;49051:4;49043:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48975:130;48925:180:::0;:::o;34359:165::-;34479:39;34496:4;34502:2;34506:7;34479:39;;;;;;;;;;;;:16;:39::i;:::-;34359:165;;;:::o;48717:84::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48792:3:::1;48782:7;:13;;;;;;;;;;;;:::i;:::-;;48717:84:::0;:::o;31351:253::-;31448:7;31467:13;31483:7;:16;31491:7;31483:16;;;;;;;;;;;;;;;;;;;;;31467:32;;31531:1;31514:19;;:5;:19;;;;31506:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31593:5;31586:12;;;31351:253;;;:::o;46700:369::-;46775:1;46763:9;:13;;;46755:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46872:17;;46859:9;46845:23;;:11;;:23;;;;:::i;:::-;:44;;46829:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;46948:36;46958:10;46972:11;;46970:13;;;;;:::i;:::-;;;;;;;46948:9;:36::i;:::-;47008:1;46995:9;:14;;;46991:73;;;47020:36;47030:10;47044:11;;47042:13;;;;;:::i;:::-;;;;;;;47020:9;:36::i;:::-;46991:73;46700:369;:::o;31071:226::-;31168:7;31212:1;31195:19;;:5;:19;;;;31187:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31275:9;:16;31285:5;31275:16;;;;;;;;;;;;;;;;31268:23;;31071:226;;;:::o;12416:97::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12477:30:::1;12504:1;12477:18;:30::i;:::-;12416:97::o:0;42875:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11805:81::-;11851:7;11874:6;;;;;;;;;;;11867:13;;11805:81;:::o;42772:98::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49185:122::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49295:6:::1;49266:26;:35;;;;49185:122:::0;:::o;31818:98::-;31874:13;31903:7;31896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31818:98;:::o;33489:167::-;33598:52;33617:12;:10;:12::i;:::-;33631:8;33641;33598:18;:52::i;:::-;33489:167;;:::o;46202:21::-;;;;;;;;;;;;;:::o;34587:321::-;34748:41;34767:12;:10;:12::i;:::-;34781:7;34748:18;:41::i;:::-;34732:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;34863:39;34877:4;34883:2;34887:7;34896:5;34863:13;:39::i;:::-;34587:321;;;;:::o;31979:394::-;32077:13;32118:16;32126:7;32118;:16::i;:::-;32102:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32208:21;32232:10;:8;:10::i;:::-;32208:34;;32287:1;32269:7;32263:21;:25;:104;;;;;;;;;;;;;;;;;32324:7;32333:18;:7;:16;:18::i;:::-;32307:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32263:104;32249:118;;;31979:394;;;:::o;47202:1509::-;47312:16;47320:7;47312;:16::i;:::-;47298:30;;:10;:30;;;47282:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;47442:1;47403:19;:29;47423:8;47403:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;47387:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;47579:14;47585:7;47579:5;:14::i;:::-;47659:20;47693:10;47705:7;47682:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47659:54;;47791:14;47808:1;47791:18;;47816:26;47870:7;47886:26;;47845:74;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47816:103;;48062:18;48086:8;;;;;;;;;;;:21;;;48116:8;48141:4;48155:7;48171:5;48185:13;48086:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48061:144;;;48243:10;48230:9;:23;;48214:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;48362:8;;;;;;;;;;;:13;;;48384:9;48404:8;48444:19;:29;48464:8;48444:29;;;;;;;;;;;;;;;48521:7;48571:10;48617:3;48669:13;48362:343;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47275:1436;;;;47202:1509;;:::o;44974:810::-;45172:32;45207:14;:27;45222:11;45207:27;;;;;;;;;;;;;;;45235:11;45207:40;;;;;;:::i;:::-;;;;;;;;;;;;;:62;45256:6;45207:62;;;;;;;;;;;;;45172:97;;45325:1;45317:10;;45292:9;:21;;;:35;;45276:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;45425:9;:23;;;45406:8;;:15;;:42;:99;;;;;45484:9;:21;;;45471:8;;45461:19;;;;;;;:::i;:::-;;;;;;;;:44;45406:99;45390:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;45615:1;45589:9;:23;;:27;;;;45655:1;45647:10;;45623:9;:21;;:34;;;;45718:4;:16;;;45735:11;45748;45761:6;45769:8;;45718:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45124:660;44974:810;;;;;:::o;33719:186::-;33841:4;33864:18;:25;33883:5;33864:25;;;;;;;;;;;;;;;:35;33890:8;33864:35;;;;;;;;;;;;;;;;;;;;;;;;;33857:42;;33719:186;;;;:::o;45790:165::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45935:14:::1;;45903:19;:29;45923:8;45903:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;45790:165:::0;;;:::o;48807:59::-;:::o;12658:191::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12763:1:::1;12743:22;;:8;:22;;;;12735:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12815:28;12834:8;12815:18;:28::i;:::-;12658:191:::0;:::o;23725:179::-;23835:4;23873:25;23858:40;;;:11;:40;;;;23851:47;;23725:179;;;:::o;36355:121::-;36420:4;36468:1;36440:30;;:7;:16;36448:7;36440:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36433:37;;36355:121;;;:::o;10558:92::-;10611:7;10634:10;10627:17;;10558:92;:::o;40024:164::-;40122:2;40095:15;:24;40111:7;40095:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40174:7;40170:2;40136:46;;40145:23;40160:7;40145:14;:23::i;:::-;40136:46;;;;;;;;;;;;40024:164;;:::o;49390:372::-;49560:14;49576:15;49614:8;49595:61;;;;;;;;;;;;:::i;:::-;49559:97;;;;49730:26;49740:6;49748:7;49730:9;:26::i;:::-;49537:225;;49390:372;;;;:::o;36627:371::-;36740:4;36764:16;36772:7;36764;:16::i;:::-;36756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36836:13;36852:23;36867:7;36852:14;:23::i;:::-;36836:39;;36901:5;36890:16;;:7;:16;;;:58;;;;36941:7;36917:31;;:20;36929:7;36917:11;:20::i;:::-;:31;;;36890:58;:101;;;;36959:32;36976:5;36983:7;36959:16;:32::i;:::-;36890:101;36882:110;;;36627:371;;;;:::o;39371:547::-;39520:4;39493:31;;:23;39508:7;39493:14;:23::i;:::-;:31;;;39477:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;39612:1;39598:16;;:2;:16;;;;39590:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39664:39;39685:4;39691:2;39695:7;39664:20;:39::i;:::-;39760:29;39777:1;39781:7;39760:8;:29::i;:::-;39817:1;39798:9;:15;39808:4;39798:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39842:1;39825:9;:13;39835:2;39825:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39869:2;39850:7;:16;39858:7;39850:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39904:7;39900:2;39885:27;;39894:4;39885:27;;;;;;;;;;;;39371:547;;;:::o;37318:104::-;37390:26;37400:2;37404:7;37390:26;;;;;;;;;;;;:9;:26::i;:::-;37318:104;;:::o;12999:177::-;13069:16;13088:6;;;;;;;;;;;13069:25;;13110:8;13101:6;;:17;;;;;;;;;;;;;;;;;;13161:8;13130:40;;13151:8;13130:40;;;;;;;;;;;;13062:114;12999:177;:::o;40318:287::-;40455:8;40446:17;;:5;:17;;;;40438:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40538:8;40500:18;:25;40519:5;40500:25;;;;;;;;;;;;;;;:35;40526:8;40500:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40580:8;40558:41;;40573:5;40558:41;;;40590:8;40558:41;;;;;;:::i;:::-;;;;;;;;40318:287;;;:::o;35752:308::-;35887:28;35897:4;35903:2;35907:7;35887:9;:28::i;:::-;35938:48;35961:4;35967:2;35971:7;35980:5;35938:22;:48::i;:::-;35922:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;35752:308;;;;:::o;49768:94::-;49820:13;49849:7;49842:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49768:94;:::o;8298:637::-;8354:13;8572:1;8563:5;:10;8559:43;;;8584:10;;;;;;;;;;;;;;;;;;;;;8559:43;8608:12;8623:5;8608:20;;8635:14;8656:62;8671:1;8663:4;:9;8656:62;;8683:8;;;;;:::i;:::-;;;;8708:2;8700:10;;;;;:::i;:::-;;;8656:62;;;8724:19;8756:6;8746:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8724:39;;8770:132;8786:1;8777:5;:10;8770:132;;8808:1;8798:11;;;;;:::i;:::-;;;8869:2;8861:5;:10;;;;:::i;:::-;8848:2;:24;;;;:::i;:::-;8835:39;;8818:6;8825;8818:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8892:2;8883:11;;;;;:::i;:::-;;;8770:132;;;8922:6;8908:21;;;;;8298:637;;;;:::o;38728:330::-;38784:13;38800:23;38815:7;38800:14;:23::i;:::-;38784:39;;38832:48;38853:5;38868:1;38872:7;38832:20;:48::i;:::-;38913:29;38930:1;38934:7;38913:8;:29::i;:::-;38971:1;38951:9;:16;38961:5;38951:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;38986:7;:16;38994:7;38986:16;;;;;;;;;;;;38979:23;;;;;;;;;;;39044:7;39040:1;39016:36;;39025:5;39016:36;;;;;;;;;;;;38777:281;38728:330;:::o;42375:112::-;;;;:::o;37639:281::-;37751:18;37757:2;37761:7;37751:5;:18::i;:::-;37792:54;37823:1;37827:2;37831:7;37840:5;37792:22;:54::i;:::-;37776:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;37639:281;;;:::o;41148:685::-;41285:4;41302:15;:2;:13;;;:15::i;:::-;41298:530;;;41357:2;41341:36;;;41378:12;:10;:12::i;:::-;41392:4;41398:7;41407:5;41341:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41328:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41585:1;41568:6;:13;:18;41564:214;;;41601:60;;;;;;;;;;:::i;:::-;;;;;;;;41564:214;41746:6;41740:13;41731:6;41727:2;41723:15;41716:38;41328:459;41473:41;;;41463:51;;;:6;:51;;;;41456:58;;;;;41298:530;41816:4;41809:11;;41148:685;;;;;;;:::o;38230:291::-;38320:1;38306:16;;:2;:16;;;;38298:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38368:45;38397:1;38401:2;38405:7;38368:20;:45::i;:::-;38439:1;38422:9;:13;38432:2;38422:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38466:2;38447:7;:16;38455:7;38447:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38507:7;38503:2;38482:33;;38499:1;38482:33;;;;;;;;;;;;38230:291;;:::o;13965:351::-;14025:4;14217:12;14274:7;14262:20;14254:28;;14309:1;14302:4;:8;14295:15;;;13965:351;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:89;370:7;410:6;403:5;399:18;388:29;;334:89;;;:::o;429:120::-;501:23;518:5;501:23;:::i;:::-;494:5;491:34;481:62;;539:1;536;529:12;481:62;429:120;:::o;555:137::-;600:5;638:6;625:20;616:29;;654:32;680:5;654:32;:::i;:::-;555:137;;;;:::o;698:117::-;807:1;804;797:12;821:117;930:1;927;920:12;944:102;985:6;1036:2;1032:7;1027:2;1020:5;1016:14;1012:28;1002:38;;944:102;;;:::o;1052:180::-;1100:77;1097:1;1090:88;1197:4;1194:1;1187:15;1221:4;1218:1;1211:15;1238:281;1321:27;1343:4;1321:27;:::i;:::-;1313:6;1309:40;1451:6;1439:10;1436:22;1415:18;1403:10;1400:34;1397:62;1394:88;;;1462:18;;:::i;:::-;1394:88;1502:10;1498:2;1491:22;1281:238;1238:281;;:::o;1525:129::-;1559:6;1586:20;;:::i;:::-;1576:30;;1615:33;1643:4;1635:6;1615:33;:::i;:::-;1525:129;;;:::o;1660:307::-;1721:4;1811:18;1803:6;1800:30;1797:56;;;1833:18;;:::i;:::-;1797:56;1871:29;1893:6;1871:29;:::i;:::-;1863:37;;1955:4;1949;1945:15;1937:23;;1660:307;;;:::o;1973:154::-;2057:6;2052:3;2047;2034:30;2119:1;2110:6;2105:3;2101:16;2094:27;1973:154;;;:::o;2133:410::-;2210:5;2235:65;2251:48;2292:6;2251:48;:::i;:::-;2235:65;:::i;:::-;2226:74;;2323:6;2316:5;2309:21;2361:4;2354:5;2350:16;2399:3;2390:6;2385:3;2381:16;2378:25;2375:112;;;2406:79;;:::i;:::-;2375:112;2496:41;2530:6;2525:3;2520;2496:41;:::i;:::-;2216:327;2133:410;;;;;:::o;2562:338::-;2617:5;2666:3;2659:4;2651:6;2647:17;2643:27;2633:122;;2674:79;;:::i;:::-;2633:122;2791:6;2778:20;2816:78;2890:3;2882:6;2875:4;2867:6;2863:17;2816:78;:::i;:::-;2807:87;;2623:277;2562:338;;;;:::o;2906:101::-;2942:7;2982:18;2975:5;2971:30;2960:41;;2906:101;;;:::o;3013:120::-;3085:23;3102:5;3085:23;:::i;:::-;3078:5;3075:34;3065:62;;3123:1;3120;3113:12;3065:62;3013:120;:::o;3139:137::-;3184:5;3222:6;3209:20;3200:29;;3238:32;3264:5;3238:32;:::i;:::-;3139:137;;;;:::o;3282:1117::-;3384:6;3392;3400;3408;3457:3;3445:9;3436:7;3432:23;3428:33;3425:120;;;3464:79;;:::i;:::-;3425:120;3584:1;3609:52;3653:7;3644:6;3633:9;3629:22;3609:52;:::i;:::-;3599:62;;3555:116;3738:2;3727:9;3723:18;3710:32;3769:18;3761:6;3758:30;3755:117;;;3791:79;;:::i;:::-;3755:117;3896:62;3950:7;3941:6;3930:9;3926:22;3896:62;:::i;:::-;3886:72;;3681:287;4007:2;4033:52;4077:7;4068:6;4057:9;4053:22;4033:52;:::i;:::-;4023:62;;3978:117;4162:2;4151:9;4147:18;4134:32;4193:18;4185:6;4182:30;4179:117;;;4215:79;;:::i;:::-;4179:117;4320:62;4374:7;4365:6;4354:9;4350:22;4320:62;:::i;:::-;4310:72;;4105:287;3282:1117;;;;;;;:::o;4405:149::-;4441:7;4481:66;4474:5;4470:78;4459:89;;4405:149;;;:::o;4560:120::-;4632:23;4649:5;4632:23;:::i;:::-;4625:5;4622:34;4612:62;;4670:1;4667;4660:12;4612:62;4560:120;:::o;4686:137::-;4731:5;4769:6;4756:20;4747:29;;4785:32;4811:5;4785:32;:::i;:::-;4686:137;;;;:::o;4829:327::-;4887:6;4936:2;4924:9;4915:7;4911:23;4907:32;4904:119;;;4942:79;;:::i;:::-;4904:119;5062:1;5087:52;5131:7;5122:6;5111:9;5107:22;5087:52;:::i;:::-;5077:62;;5033:116;4829:327;;;;:::o;5162:90::-;5196:7;5239:5;5232:13;5225:21;5214:32;;5162:90;;;:::o;5258:109::-;5339:21;5354:5;5339:21;:::i;:::-;5334:3;5327:34;5258:109;;:::o;5373:210::-;5460:4;5498:2;5487:9;5483:18;5475:26;;5511:65;5573:1;5562:9;5558:17;5549:6;5511:65;:::i;:::-;5373:210;;;;:::o;5589:99::-;5641:6;5675:5;5669:12;5659:22;;5589:99;;;:::o;5694:169::-;5778:11;5812:6;5807:3;5800:19;5852:4;5847:3;5843:14;5828:29;;5694:169;;;;:::o;5869:307::-;5937:1;5947:113;5961:6;5958:1;5955:13;5947:113;;;6046:1;6041:3;6037:11;6031:18;6027:1;6022:3;6018:11;6011:39;5983:2;5980:1;5976:10;5971:15;;5947:113;;;6078:6;6075:1;6072:13;6069:101;;;6158:1;6149:6;6144:3;6140:16;6133:27;6069:101;5918:258;5869:307;;;:::o;6182:364::-;6270:3;6298:39;6331:5;6298:39;:::i;:::-;6353:71;6417:6;6412:3;6353:71;:::i;:::-;6346:78;;6433:52;6478:6;6473:3;6466:4;6459:5;6455:16;6433:52;:::i;:::-;6510:29;6532:6;6510:29;:::i;:::-;6505:3;6501:39;6494:46;;6274:272;6182:364;;;;:::o;6552:313::-;6665:4;6703:2;6692:9;6688:18;6680:26;;6752:9;6746:4;6742:20;6738:1;6727:9;6723:17;6716:47;6780:78;6853:4;6844:6;6780:78;:::i;:::-;6772:86;;6552:313;;;;:::o;6871:77::-;6908:7;6937:5;6926:16;;6871:77;;;:::o;6954:122::-;7027:24;7045:5;7027:24;:::i;:::-;7020:5;7017:35;7007:63;;7066:1;7063;7056:12;7007:63;6954:122;:::o;7082:139::-;7128:5;7166:6;7153:20;7144:29;;7182:33;7209:5;7182:33;:::i;:::-;7082:139;;;;:::o;7227:329::-;7286:6;7335:2;7323:9;7314:7;7310:23;7306:32;7303:119;;;7341:79;;:::i;:::-;7303:119;7461:1;7486:53;7531:7;7522:6;7511:9;7507:22;7486:53;:::i;:::-;7476:63;;7432:117;7227:329;;;;:::o;7562:126::-;7599:7;7639:42;7632:5;7628:54;7617:65;;7562:126;;;:::o;7694:96::-;7731:7;7760:24;7778:5;7760:24;:::i;:::-;7749:35;;7694:96;;;:::o;7796:118::-;7883:24;7901:5;7883:24;:::i;:::-;7878:3;7871:37;7796:118;;:::o;7920:222::-;8013:4;8051:2;8040:9;8036:18;8028:26;;8064:71;8132:1;8121:9;8117:17;8108:6;8064:71;:::i;:::-;7920:222;;;;:::o;8148:122::-;8221:24;8239:5;8221:24;:::i;:::-;8214:5;8211:35;8201:63;;8260:1;8257;8250:12;8201:63;8148:122;:::o;8276:139::-;8322:5;8360:6;8347:20;8338:29;;8376:33;8403:5;8376:33;:::i;:::-;8276:139;;;;:::o;8421:474::-;8489:6;8497;8546:2;8534:9;8525:7;8521:23;8517:32;8514:119;;;8552:79;;:::i;:::-;8514:119;8672:1;8697:53;8742:7;8733:6;8722:9;8718:22;8697:53;:::i;:::-;8687:63;;8643:117;8799:2;8825:53;8870:7;8861:6;8850:9;8846:22;8825:53;:::i;:::-;8815:63;;8770:118;8421:474;;;;;:::o;8901:619::-;8978:6;8986;8994;9043:2;9031:9;9022:7;9018:23;9014:32;9011:119;;;9049:79;;:::i;:::-;9011:119;9169:1;9194:53;9239:7;9230:6;9219:9;9215:22;9194:53;:::i;:::-;9184:63;;9140:117;9296:2;9322:53;9367:7;9358:6;9347:9;9343:22;9322:53;:::i;:::-;9312:63;;9267:118;9424:2;9450:53;9495:7;9486:6;9475:9;9471:22;9450:53;:::i;:::-;9440:63;;9395:118;8901:619;;;;;:::o;9526:308::-;9588:4;9678:18;9670:6;9667:30;9664:56;;;9700:18;;:::i;:::-;9664:56;9738:29;9760:6;9738:29;:::i;:::-;9730:37;;9822:4;9816;9812:15;9804:23;;9526:308;;;:::o;9840:412::-;9918:5;9943:66;9959:49;10001:6;9959:49;:::i;:::-;9943:66;:::i;:::-;9934:75;;10032:6;10025:5;10018:21;10070:4;10063:5;10059:16;10108:3;10099:6;10094:3;10090:16;10087:25;10084:112;;;10115:79;;:::i;:::-;10084:112;10205:41;10239:6;10234:3;10229;10205:41;:::i;:::-;9924:328;9840:412;;;;;:::o;10272:340::-;10328:5;10377:3;10370:4;10362:6;10358:17;10354:27;10344:122;;10385:79;;:::i;:::-;10344:122;10502:6;10489:20;10527:79;10602:3;10594:6;10587:4;10579:6;10575:17;10527:79;:::i;:::-;10518:88;;10334:278;10272:340;;;;:::o;10618:509::-;10687:6;10736:2;10724:9;10715:7;10711:23;10707:32;10704:119;;;10742:79;;:::i;:::-;10704:119;10890:1;10879:9;10875:17;10862:31;10920:18;10912:6;10909:30;10906:117;;;10942:79;;:::i;:::-;10906:117;11047:63;11102:7;11093:6;11082:9;11078:22;11047:63;:::i;:::-;11037:73;;10833:287;10618:509;;;;:::o;11133:86::-;11168:7;11208:4;11201:5;11197:16;11186:27;;11133:86;;;:::o;11225:118::-;11296:22;11312:5;11296:22;:::i;:::-;11289:5;11286:33;11276:61;;11333:1;11330;11323:12;11276:61;11225:118;:::o;11349:135::-;11393:5;11431:6;11418:20;11409:29;;11447:31;11472:5;11447:31;:::i;:::-;11349:135;;;;:::o;11490:325::-;11547:6;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:51;11790:7;11781:6;11770:9;11766:22;11747:51;:::i;:::-;11737:61;;11693:115;11490:325;;;;:::o;11821:329::-;11880:6;11929:2;11917:9;11908:7;11904:23;11900:32;11897:119;;;11935:79;;:::i;:::-;11897:119;12055:1;12080:53;12125:7;12116:6;12105:9;12101:22;12080:53;:::i;:::-;12070:63;;12026:117;11821:329;;;;:::o;12156:118::-;12243:24;12261:5;12243:24;:::i;:::-;12238:3;12231:37;12156:118;;:::o;12280:222::-;12373:4;12411:2;12400:9;12396:18;12388:26;;12424:71;12492:1;12481:9;12477:17;12468:6;12424:71;:::i;:::-;12280:222;;;;:::o;12508:327::-;12566:6;12615:2;12603:9;12594:7;12590:23;12586:32;12583:119;;;12621:79;;:::i;:::-;12583:119;12741:1;12766:52;12810:7;12801:6;12790:9;12786:22;12766:52;:::i;:::-;12756:62;;12712:116;12508:327;;;;:::o;12841:98::-;12892:6;12926:5;12920:12;12910:22;;12841:98;;;:::o;12945:168::-;13028:11;13062:6;13057:3;13050:19;13102:4;13097:3;13093:14;13078:29;;12945:168;;;;:::o;13119:360::-;13205:3;13233:38;13265:5;13233:38;:::i;:::-;13287:70;13350:6;13345:3;13287:70;:::i;:::-;13280:77;;13366:52;13411:6;13406:3;13399:4;13392:5;13388:16;13366:52;:::i;:::-;13443:29;13465:6;13443:29;:::i;:::-;13438:3;13434:39;13427:46;;13209:270;13119:360;;;;:::o;13485:309::-;13596:4;13634:2;13623:9;13619:18;13611:26;;13683:9;13677:4;13673:20;13669:1;13658:9;13654:17;13647:47;13711:76;13782:4;13773:6;13711:76;:::i;:::-;13703:84;;13485:309;;;;:::o;13800:795::-;13885:6;13893;13901;13950:2;13938:9;13929:7;13925:23;13921:32;13918:119;;;13956:79;;:::i;:::-;13918:119;14076:1;14101:52;14145:7;14136:6;14125:9;14121:22;14101:52;:::i;:::-;14091:62;;14047:116;14230:2;14219:9;14215:18;14202:32;14261:18;14253:6;14250:30;14247:117;;;14283:79;;:::i;:::-;14247:117;14388:62;14442:7;14433:6;14422:9;14418:22;14388:62;:::i;:::-;14378:72;;14173:287;14499:2;14525:53;14570:7;14561:6;14550:9;14546:22;14525:53;:::i;:::-;14515:63;;14470:118;13800:795;;;;;:::o;14601:77::-;14638:7;14667:5;14656:16;;14601:77;;;:::o;14684:118::-;14771:24;14789:5;14771:24;:::i;:::-;14766:3;14759:37;14684:118;;:::o;14808:332::-;14929:4;14967:2;14956:9;14952:18;14944:26;;14980:71;15048:1;15037:9;15033:17;15024:6;14980:71;:::i;:::-;15061:72;15129:2;15118:9;15114:18;15105:6;15061:72;:::i;:::-;14808:332;;;;;:::o;15146:116::-;15216:21;15231:5;15216:21;:::i;:::-;15209:5;15206:32;15196:60;;15252:1;15249;15242:12;15196:60;15146:116;:::o;15268:133::-;15311:5;15349:6;15336:20;15327:29;;15365:30;15389:5;15365:30;:::i;:::-;15268:133;;;;:::o;15407:468::-;15472:6;15480;15529:2;15517:9;15508:7;15504:23;15500:32;15497:119;;;15535:79;;:::i;:::-;15497:119;15655:1;15680:53;15725:7;15716:6;15705:9;15701:22;15680:53;:::i;:::-;15670:63;;15626:117;15782:2;15808:50;15850:7;15841:6;15830:9;15826:22;15808:50;:::i;:::-;15798:60;;15753:115;15407:468;;;;;:::o;15881:943::-;15976:6;15984;15992;16000;16049:3;16037:9;16028:7;16024:23;16020:33;16017:120;;;16056:79;;:::i;:::-;16017:120;16176:1;16201:53;16246:7;16237:6;16226:9;16222:22;16201:53;:::i;:::-;16191:63;;16147:117;16303:2;16329:53;16374:7;16365:6;16354:9;16350:22;16329:53;:::i;:::-;16319:63;;16274:118;16431:2;16457:53;16502:7;16493:6;16482:9;16478:22;16457:53;:::i;:::-;16447:63;;16402:118;16587:2;16576:9;16572:18;16559:32;16618:18;16610:6;16607:30;16604:117;;;16640:79;;:::i;:::-;16604:117;16745:62;16799:7;16790:6;16779:9;16775:22;16745:62;:::i;:::-;16735:72;;16530:287;15881:943;;;;;;;:::o;16830:472::-;16897:6;16905;16954:2;16942:9;16933:7;16929:23;16925:32;16922:119;;;16960:79;;:::i;:::-;16922:119;17080:1;17105:52;17149:7;17140:6;17129:9;17125:22;17105:52;:::i;:::-;17095:62;;17051:116;17206:2;17232:53;17277:7;17268:6;17257:9;17253:22;17232:53;:::i;:::-;17222:63;;17177:118;16830:472;;;;;:::o;17308:117::-;17417:1;17414;17407:12;17431:117;17540:1;17537;17530:12;17567:552;17624:8;17634:6;17684:3;17677:4;17669:6;17665:17;17661:27;17651:122;;17692:79;;:::i;:::-;17651:122;17805:6;17792:20;17782:30;;17835:18;17827:6;17824:30;17821:117;;;17857:79;;:::i;:::-;17821:117;17971:4;17963:6;17959:17;17947:29;;18025:3;18017:4;18009:6;18005:17;17995:8;17991:32;17988:41;17985:128;;;18032:79;;:::i;:::-;17985:128;17567:552;;;;;:::o;18125:1137::-;18229:6;18237;18245;18253;18261;18310:3;18298:9;18289:7;18285:23;18281:33;18278:120;;;18317:79;;:::i;:::-;18278:120;18437:1;18462:52;18506:7;18497:6;18486:9;18482:22;18462:52;:::i;:::-;18452:62;;18408:116;18591:2;18580:9;18576:18;18563:32;18622:18;18614:6;18611:30;18608:117;;;18644:79;;:::i;:::-;18608:117;18749:62;18803:7;18794:6;18783:9;18779:22;18749:62;:::i;:::-;18739:72;;18534:287;18860:2;18886:52;18930:7;18921:6;18910:9;18906:22;18886:52;:::i;:::-;18876:62;;18831:117;19015:2;19004:9;19000:18;18987:32;19046:18;19038:6;19035:30;19032:117;;;19068:79;;:::i;:::-;19032:117;19181:64;19237:7;19228:6;19217:9;19213:22;19181:64;:::i;:::-;19163:82;;;;18958:297;18125:1137;;;;;;;;:::o;19268:474::-;19336:6;19344;19393:2;19381:9;19372:7;19368:23;19364:32;19361:119;;;19399:79;;:::i;:::-;19361:119;19519:1;19544:53;19589:7;19580:6;19569:9;19565:22;19544:53;:::i;:::-;19534:63;;19490:117;19646:2;19672:53;19717:7;19708:6;19697:9;19693:22;19672:53;:::i;:::-;19662:63;;19617:118;19268:474;;;;;:::o;19748:670::-;19826:6;19834;19842;19891:2;19879:9;19870:7;19866:23;19862:32;19859:119;;;19897:79;;:::i;:::-;19859:119;20017:1;20042:52;20086:7;20077:6;20066:9;20062:22;20042:52;:::i;:::-;20032:62;;19988:116;20171:2;20160:9;20156:18;20143:32;20202:18;20194:6;20191:30;20188:117;;;20224:79;;:::i;:::-;20188:117;20337:64;20393:7;20384:6;20373:9;20369:22;20337:64;:::i;:::-;20319:82;;;;20114:297;19748:670;;;;;:::o;20424:180::-;20472:77;20469:1;20462:88;20569:4;20566:1;20559:15;20593:4;20590:1;20583:15;20610:320;20654:6;20691:1;20685:4;20681:12;20671:22;;20738:1;20732:4;20728:12;20759:18;20749:81;;20815:4;20807:6;20803:17;20793:27;;20749:81;20877:2;20869:6;20866:14;20846:18;20843:38;20840:84;;;20896:18;;:::i;:::-;20840:84;20661:269;20610:320;;;:::o;20936:147::-;21037:11;21074:3;21059:18;;20936:147;;;;:::o;21089:140::-;21137:4;21160:3;21152:11;;21183:3;21180:1;21173:14;21217:4;21214:1;21204:18;21196:26;;21089:140;;;:::o;21257:841::-;21358:3;21395:5;21389:12;21424:36;21450:9;21424:36;:::i;:::-;21476:88;21557:6;21552:3;21476:88;:::i;:::-;21469:95;;21595:1;21584:9;21580:17;21611:1;21606:137;;;;21757:1;21752:340;;;;21573:519;;21606:137;21690:4;21686:9;21675;21671:25;21666:3;21659:38;21726:6;21721:3;21717:16;21710:23;;21606:137;;21752:340;21819:37;21850:5;21819:37;:::i;:::-;21878:1;21892:154;21906:6;21903:1;21900:13;21892:154;;;21980:7;21974:14;21970:1;21965:3;21961:11;21954:35;22030:1;22021:7;22017:15;22006:26;;21928:4;21925:1;21921:12;21916:17;;21892:154;;;22075:6;22070:3;22066:16;22059:23;;21759:333;;21573:519;;21362:736;;21257:841;;;;:::o;22104:265::-;22231:3;22253:90;22339:3;22330:6;22253:90;:::i;:::-;22246:97;;22360:3;22353:10;;22104:265;;;;:::o;22375:239::-;22515:34;22511:1;22503:6;22499:14;22492:58;22584:22;22579:2;22571:6;22567:15;22560:47;22375:239;:::o;22620:366::-;22762:3;22783:67;22847:2;22842:3;22783:67;:::i;:::-;22776:74;;22859:93;22948:3;22859:93;:::i;:::-;22977:2;22972:3;22968:12;22961:19;;22620:366;;;:::o;22992:419::-;23158:4;23196:2;23185:9;23181:18;23173:26;;23245:9;23239:4;23235:20;23231:1;23220:9;23216:17;23209:47;23273:131;23399:4;23273:131;:::i;:::-;23265:139;;22992:419;;;:::o;23417:115::-;23502:23;23519:5;23502:23;:::i;:::-;23497:3;23490:36;23417:115;;:::o;23538:::-;23623:23;23640:5;23623:23;:::i;:::-;23618:3;23611:36;23538:115;;:::o;23659:719::-;23868:4;23906:3;23895:9;23891:19;23883:27;;23920:69;23986:1;23975:9;23971:17;23962:6;23920:69;:::i;:::-;24036:9;24030:4;24026:20;24021:2;24010:9;24006:18;23999:48;24064:76;24135:4;24126:6;24064:76;:::i;:::-;24056:84;;24150:70;24216:2;24205:9;24201:18;24192:6;24150:70;:::i;:::-;24267:9;24261:4;24257:20;24252:2;24241:9;24237:18;24230:48;24295:76;24366:4;24357:6;24295:76;:::i;:::-;24287:84;;23659:719;;;;;;;:::o;24384:373::-;24488:3;24516:38;24548:5;24516:38;:::i;:::-;24570:88;24651:6;24646:3;24570:88;:::i;:::-;24563:95;;24667:52;24712:6;24707:3;24700:4;24693:5;24689:16;24667:52;:::i;:::-;24744:6;24739:3;24735:16;24728:23;;24492:265;24384:373;;;;:::o;24763:271::-;24893:3;24915:93;25004:3;24995:6;24915:93;:::i;:::-;24908:100;;25025:3;25018:10;;24763:271;;;;:::o;25040:231::-;25180:34;25176:1;25168:6;25164:14;25157:58;25249:14;25244:2;25236:6;25232:15;25225:39;25040:231;:::o;25277:366::-;25419:3;25440:67;25504:2;25499:3;25440:67;:::i;:::-;25433:74;;25516:93;25605:3;25516:93;:::i;:::-;25634:2;25629:3;25625:12;25618:19;;25277:366;;;:::o;25649:419::-;25815:4;25853:2;25842:9;25838:18;25830:26;;25902:9;25896:4;25892:20;25888:1;25877:9;25873:17;25866:47;25930:131;26056:4;25930:131;:::i;:::-;25922:139;;25649:419;;;:::o;26074:220::-;26214:34;26210:1;26202:6;26198:14;26191:58;26283:3;26278:2;26270:6;26266:15;26259:28;26074:220;:::o;26300:366::-;26442:3;26463:67;26527:2;26522:3;26463:67;:::i;:::-;26456:74;;26539:93;26628:3;26539:93;:::i;:::-;26657:2;26652:3;26648:12;26641:19;;26300:366;;;:::o;26672:419::-;26838:4;26876:2;26865:9;26861:18;26853:26;;26925:9;26919:4;26915:20;26911:1;26900:9;26896:17;26889:47;26953:131;27079:4;26953:131;:::i;:::-;26945:139;;26672:419;;;:::o;27097:243::-;27237:34;27233:1;27225:6;27221:14;27214:58;27306:26;27301:2;27293:6;27289:15;27282:51;27097:243;:::o;27346:366::-;27488:3;27509:67;27573:2;27568:3;27509:67;:::i;:::-;27502:74;;27585:93;27674:3;27585:93;:::i;:::-;27703:2;27698:3;27694:12;27687:19;;27346:366;;;:::o;27718:419::-;27884:4;27922:2;27911:9;27907:18;27899:26;;27971:9;27965:4;27961:20;27957:1;27946:9;27942:17;27935:47;27999:131;28125:4;27999:131;:::i;:::-;27991:139;;27718:419;;;:::o;28143:230::-;28283:34;28279:1;28271:6;28267:14;28260:58;28352:13;28347:2;28339:6;28335:15;28328:38;28143:230;:::o;28379:366::-;28521:3;28542:67;28606:2;28601:3;28542:67;:::i;:::-;28535:74;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28379:366;;;:::o;28751:419::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:236::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:19;29380:2;29372:6;29368:15;29361:44;29176:236;:::o;29418:366::-;29560:3;29581:67;29645:2;29640:3;29581:67;:::i;:::-;29574:74;;29657:93;29746:3;29657:93;:::i;:::-;29775:2;29770:3;29766:12;29759:19;;29418:366;;;:::o;29790:419::-;29956:4;29994:2;29983:9;29979:18;29971:26;;30043:9;30037:4;30033:20;30029:1;30018:9;30014:17;30007:47;30071:131;30197:4;30071:131;:::i;:::-;30063:139;;29790:419;;;:::o;30215:182::-;30355:34;30351:1;30343:6;30339:14;30332:58;30215:182;:::o;30403:366::-;30545:3;30566:67;30630:2;30625:3;30566:67;:::i;:::-;30559:74;;30642:93;30731:3;30642:93;:::i;:::-;30760:2;30755:3;30751:12;30744:19;;30403:366;;;:::o;30775:419::-;30941:4;30979:2;30968:9;30964:18;30956:26;;31028:9;31022:4;31018:20;31014:1;31003:9;30999:17;30992:47;31056:131;31182:4;31056:131;:::i;:::-;31048:139;;30775:419;;;:::o;31200:114::-;;:::o;31320:398::-;31479:3;31500:83;31581:1;31576:3;31500:83;:::i;:::-;31493:90;;31592:93;31681:3;31592:93;:::i;:::-;31710:1;31705:3;31701:11;31694:18;;31320:398;;;:::o;31724:379::-;31908:3;31930:147;32073:3;31930:147;:::i;:::-;31923:154;;32094:3;32087:10;;31724:379;;;:::o;32109:226::-;32249:34;32245:1;32237:6;32233:14;32226:58;32318:9;32313:2;32305:6;32301:15;32294:34;32109:226;:::o;32341:366::-;32483:3;32504:67;32568:2;32563:3;32504:67;:::i;:::-;32497:74;;32580:93;32669:3;32580:93;:::i;:::-;32698:2;32693:3;32689:12;32682:19;;32341:366;;;:::o;32713:419::-;32879:4;32917:2;32906:9;32902:18;32894:26;;32966:9;32960:4;32956:20;32952:1;32941:9;32937:17;32930:47;32994:131;33120:4;32994:131;:::i;:::-;32986:139;;32713:419;;;:::o;33138:228::-;33278:34;33274:1;33266:6;33262:14;33255:58;33347:11;33342:2;33334:6;33330:15;33323:36;33138:228;:::o;33372:366::-;33514:3;33535:67;33599:2;33594:3;33535:67;:::i;:::-;33528:74;;33611:93;33700:3;33611:93;:::i;:::-;33729:2;33724:3;33720:12;33713:19;;33372:366;;;:::o;33744:419::-;33910:4;33948:2;33937:9;33933:18;33925:26;;33997:9;33991:4;33987:20;33983:1;33972:9;33968:17;33961:47;34025:131;34151:4;34025:131;:::i;:::-;34017:139;;33744:419;;;:::o;34169:228::-;34309:34;34305:1;34297:6;34293:14;34286:58;34378:11;34373:2;34365:6;34361:15;34354:36;34169:228;:::o;34403:366::-;34545:3;34566:67;34630:2;34625:3;34566:67;:::i;:::-;34559:74;;34642:93;34731:3;34642:93;:::i;:::-;34760:2;34755:3;34751:12;34744:19;;34403:366;;;:::o;34775:419::-;34941:4;34979:2;34968:9;34964:18;34956:26;;35028:9;35022:4;35018:20;35014:1;35003:9;34999:17;34992:47;35056:131;35182:4;35056:131;:::i;:::-;35048:139;;34775:419;;;:::o;35200:180::-;35248:77;35245:1;35238:88;35345:4;35342:1;35335:15;35369:4;35366:1;35359:15;35386:305;35426:3;35445:20;35463:1;35445:20;:::i;:::-;35440:25;;35479:20;35497:1;35479:20;:::i;:::-;35474:25;;35633:1;35565:66;35561:74;35558:1;35555:81;35552:107;;;35639:18;;:::i;:::-;35552:107;35683:1;35680;35676:9;35669:16;;35386:305;;;;:::o;35697:221::-;35837:34;35833:1;35825:6;35821:14;35814:58;35906:4;35901:2;35893:6;35889:15;35882:29;35697:221;:::o;35924:366::-;36066:3;36087:67;36151:2;36146:3;36087:67;:::i;:::-;36080:74;;36163:93;36252:3;36163:93;:::i;:::-;36281:2;36276:3;36272:12;36265:19;;35924:366;;;:::o;36296:419::-;36462:4;36500:2;36489:9;36485:18;36477:26;;36549:9;36543:4;36539:20;36535:1;36524:9;36520:17;36513:47;36577:131;36703:4;36577:131;:::i;:::-;36569:139;;36296:419;;;:::o;36721:233::-;36760:3;36783:24;36801:5;36783:24;:::i;:::-;36774:33;;36829:66;36822:5;36819:77;36816:103;;;36899:18;;:::i;:::-;36816:103;36946:1;36939:5;36935:13;36928:20;;36721:233;;;:::o;36960:229::-;37100:34;37096:1;37088:6;37084:14;37077:58;37169:12;37164:2;37156:6;37152:15;37145:37;36960:229;:::o;37195:366::-;37337:3;37358:67;37422:2;37417:3;37358:67;:::i;:::-;37351:74;;37434:93;37523:3;37434:93;:::i;:::-;37552:2;37547:3;37543:12;37536:19;;37195:366;;;:::o;37567:419::-;37733:4;37771:2;37760:9;37756:18;37748:26;;37820:9;37814:4;37810:20;37806:1;37795:9;37791:17;37784:47;37848:131;37974:4;37848:131;:::i;:::-;37840:139;;37567:419;;;:::o;37992:234::-;38132:34;38128:1;38120:6;38116:14;38109:58;38201:17;38196:2;38188:6;38184:15;38177:42;37992:234;:::o;38232:366::-;38374:3;38395:67;38459:2;38454:3;38395:67;:::i;:::-;38388:74;;38471:93;38560:3;38471:93;:::i;:::-;38589:2;38584:3;38580:12;38573:19;;38232:366;;;:::o;38604:419::-;38770:4;38808:2;38797:9;38793:18;38785:26;;38857:9;38851:4;38847:20;38843:1;38832:9;38828:17;38821:47;38885:131;39011:4;38885:131;:::i;:::-;38877:139;;38604:419;;;:::o;39029:148::-;39131:11;39168:3;39153:18;;39029:148;;;;:::o;39183:377::-;39289:3;39317:39;39350:5;39317:39;:::i;:::-;39372:89;39454:6;39449:3;39372:89;:::i;:::-;39365:96;;39470:52;39515:6;39510:3;39503:4;39496:5;39492:16;39470:52;:::i;:::-;39547:6;39542:3;39538:16;39531:23;;39293:267;39183:377;;;;:::o;39566:435::-;39746:3;39768:95;39859:3;39850:6;39768:95;:::i;:::-;39761:102;;39880:95;39971:3;39962:6;39880:95;:::i;:::-;39873:102;;39992:3;39985:10;;39566:435;;;;;:::o;40007:221::-;40147:34;40143:1;40135:6;40131:14;40124:58;40216:4;40211:2;40203:6;40199:15;40192:29;40007:221;:::o;40234:366::-;40376:3;40397:67;40461:2;40456:3;40397:67;:::i;:::-;40390:74;;40473:93;40562:3;40473:93;:::i;:::-;40591:2;40586:3;40582:12;40575:19;;40234:366;;;:::o;40606:419::-;40772:4;40810:2;40799:9;40795:18;40787:26;;40859:9;40853:4;40849:20;40845:1;40834:9;40830:17;40823:47;40887:131;41013:4;40887:131;:::i;:::-;40879:139;;40606:419;;;:::o;41031:233::-;41171:34;41167:1;41159:6;41155:14;41148:58;41240:16;41235:2;41227:6;41223:15;41216:41;41031:233;:::o;41270:366::-;41412:3;41433:67;41497:2;41492:3;41433:67;:::i;:::-;41426:74;;41509:93;41598:3;41509:93;:::i;:::-;41627:2;41622:3;41618:12;41611:19;;41270:366;;;:::o;41642:419::-;41808:4;41846:2;41835:9;41831:18;41823:26;;41895:9;41889:4;41885:20;41881:1;41870:9;41866:17;41859:47;41923:131;42049:4;41923:131;:::i;:::-;41915:139;;41642:419;;;:::o;42067:332::-;42188:4;42226:2;42215:9;42211:18;42203:26;;42239:71;42307:1;42296:9;42292:17;42283:6;42239:71;:::i;:::-;42320:72;42388:2;42377:9;42373:18;42364:6;42320:72;:::i;:::-;42067:332;;;;;:::o;42405:96::-;42439:8;42488:5;42483:3;42479:15;42458:36;;42405:96;;;:::o;42507:94::-;42545:7;42574:21;42589:5;42574:21;:::i;:::-;42563:32;;42507:94;;;:::o;42607:153::-;42710:43;42729:23;42746:5;42729:23;:::i;:::-;42710:43;:::i;:::-;42705:3;42698:56;42607:153;;:::o;42766:79::-;42805:7;42834:5;42823:16;;42766:79;;;:::o;42851:157::-;42956:45;42976:24;42994:5;42976:24;:::i;:::-;42956:45;:::i;:::-;42951:3;42944:58;42851:157;;:::o;43014:392::-;43152:3;43167:73;43236:3;43227:6;43167:73;:::i;:::-;43265:1;43260:3;43256:11;43249:18;;43277:75;43348:3;43339:6;43277:75;:::i;:::-;43377:2;43372:3;43368:12;43361:19;;43397:3;43390:10;;43014:392;;;;;:::o;43412:822::-;43645:4;43683:3;43672:9;43668:19;43660:27;;43697:69;43763:1;43752:9;43748:17;43739:6;43697:69;:::i;:::-;43776:72;43844:2;43833:9;43829:18;43820:6;43776:72;:::i;:::-;43895:9;43889:4;43885:20;43880:2;43869:9;43865:18;43858:48;43923:76;43994:4;43985:6;43923:76;:::i;:::-;43915:84;;44009:66;44071:2;44060:9;44056:18;44047:6;44009:66;:::i;:::-;44123:9;44117:4;44113:20;44107:3;44096:9;44092:19;44085:49;44151:76;44222:4;44213:6;44151:76;:::i;:::-;44143:84;;43412:822;;;;;;;;:::o;44240:143::-;44297:5;44328:6;44322:13;44313:22;;44344:33;44371:5;44344:33;:::i;:::-;44240:143;;;;:::o;44389:507::-;44468:6;44476;44525:2;44513:9;44504:7;44500:23;44496:32;44493:119;;;44531:79;;:::i;:::-;44493:119;44651:1;44676:64;44732:7;44723:6;44712:9;44708:22;44676:64;:::i;:::-;44666:74;;44622:128;44789:2;44815:64;44871:7;44862:6;44851:9;44847:22;44815:64;:::i;:::-;44805:74;;44760:129;44389:507;;;;;:::o;44902:306::-;45042:34;45038:1;45030:6;45026:14;45019:58;45111:34;45106:2;45098:6;45094:15;45087:59;45180:20;45175:2;45167:6;45163:15;45156:45;44902:306;:::o;45214:366::-;45356:3;45377:67;45441:2;45436:3;45377:67;:::i;:::-;45370:74;;45453:93;45542:3;45453:93;:::i;:::-;45571:2;45566:3;45562:12;45555:19;;45214:366;;;:::o;45586:419::-;45752:4;45790:2;45779:9;45775:18;45767:26;;45839:9;45833:4;45829:20;45825:1;45814:9;45810:17;45803:47;45867:131;45993:4;45867:131;:::i;:::-;45859:139;;45586:419;;;:::o;46033:798::-;46116:3;46153:5;46147:12;46182:36;46208:9;46182:36;:::i;:::-;46234:70;46297:6;46292:3;46234:70;:::i;:::-;46227:77;;46335:1;46324:9;46320:17;46351:1;46346:135;;;;46495:1;46490:335;;;;46313:512;;46346:135;46430:4;46426:9;46415;46411:25;46406:3;46399:38;46466:4;46461:3;46457:14;46450:21;;46346:135;;46490:335;46557:37;46588:5;46557:37;:::i;:::-;46616:1;46630:154;46644:6;46641:1;46638:13;46630:154;;;46718:7;46712:14;46708:1;46703:3;46699:11;46692:35;46768:1;46759:7;46755:15;46744:26;;46666:4;46663:1;46659:12;46654:17;;46630:154;;;46813:1;46808:3;46804:11;46797:18;;46497:328;;46313:512;;46120:711;;46033:798;;;;:::o;46837:104::-;46882:7;46911:24;46929:5;46911:24;:::i;:::-;46900:35;;46837:104;;;:::o;46947:142::-;47050:32;47076:5;47050:32;:::i;:::-;47045:3;47038:45;46947:142;;:::o;47095:1058::-;47393:4;47431:3;47420:9;47416:19;47408:27;;47445:69;47511:1;47500:9;47496:17;47487:6;47445:69;:::i;:::-;47561:9;47555:4;47551:20;47546:2;47535:9;47531:18;47524:48;47589:73;47657:4;47648:6;47589:73;:::i;:::-;47581:81;;47709:9;47703:4;47699:20;47694:2;47683:9;47679:18;47672:48;47737:76;47808:4;47799:6;47737:76;:::i;:::-;47729:84;;47823:88;47907:2;47896:9;47892:18;47883:6;47823:88;:::i;:::-;47921:73;47989:3;47978:9;47974:19;47965:6;47921:73;:::i;:::-;48042:9;48036:4;48032:20;48026:3;48015:9;48011:19;48004:49;48070:76;48141:4;48132:6;48070:76;:::i;:::-;48062:84;;47095:1058;;;;;;;;;:::o;48159:225::-;48299:34;48295:1;48287:6;48283:14;48276:58;48368:8;48363:2;48355:6;48351:15;48344:33;48159:225;:::o;48390:366::-;48532:3;48553:67;48617:2;48612:3;48553:67;:::i;:::-;48546:74;;48629:93;48718:3;48629:93;:::i;:::-;48747:2;48742:3;48738:12;48731:19;;48390:366;;;:::o;48762:419::-;48928:4;48966:2;48955:9;48951:18;48943:26;;49015:9;49009:4;49005:20;49001:1;48990:9;48986:17;48979:47;49043:131;49169:4;49043:131;:::i;:::-;49035:139;;48762:419;;;:::o;49209:314::-;49323:3;49344:88;49425:6;49420:3;49344:88;:::i;:::-;49337:95;;49442:43;49478:6;49473:3;49466:5;49442:43;:::i;:::-;49510:6;49505:3;49501:16;49494:23;;49209:314;;;;;:::o;49529:291::-;49669:3;49691:103;49790:3;49781:6;49773;49691:103;:::i;:::-;49684:110;;49811:3;49804:10;;49529:291;;;;;:::o;49826:176::-;49966:28;49962:1;49954:6;49950:14;49943:52;49826:176;:::o;50008:366::-;50150:3;50171:67;50235:2;50230:3;50171:67;:::i;:::-;50164:74;;50247:93;50336:3;50247:93;:::i;:::-;50365:2;50360:3;50356:12;50349:19;;50008:366;;;:::o;50380:419::-;50546:4;50584:2;50573:9;50569:18;50561:26;;50633:9;50627:4;50623:20;50619:1;50608:9;50604:17;50597:47;50661:131;50787:4;50661:131;:::i;:::-;50653:139;;50380:419;;;:::o;50827:301::-;50923:3;50944:70;51007:6;51002:3;50944:70;:::i;:::-;50937:77;;51024:43;51060:6;51055:3;51048:5;51024:43;:::i;:::-;51092:29;51114:6;51092:29;:::i;:::-;51087:3;51083:39;51076:46;;50827:301;;;;;:::o;51134:739::-;51353:4;51391:3;51380:9;51376:19;51368:27;;51405:69;51471:1;51460:9;51456:17;51447:6;51405:69;:::i;:::-;51521:9;51515:4;51511:20;51506:2;51495:9;51491:18;51484:48;51549:76;51620:4;51611:6;51549:76;:::i;:::-;51541:84;;51635:70;51701:2;51690:9;51686:18;51677:6;51635:70;:::i;:::-;51752:9;51746:4;51742:20;51737:2;51726:9;51722:18;51715:48;51780:86;51861:4;51852:6;51844;51780:86;:::i;:::-;51772:94;;51134:739;;;;;;;;:::o;51879:225::-;52019:34;52015:1;52007:6;52003:14;51996:58;52088:8;52083:2;52075:6;52071:15;52064:33;51879:225;:::o;52110:366::-;52252:3;52273:67;52337:2;52332:3;52273:67;:::i;:::-;52266:74;;52349:93;52438:3;52349:93;:::i;:::-;52467:2;52462:3;52458:12;52451:19;;52110:366;;;:::o;52482:419::-;52648:4;52686:2;52675:9;52671:18;52663:26;;52735:9;52729:4;52725:20;52721:1;52710:9;52706:17;52699:47;52763:131;52889:4;52763:131;:::i;:::-;52755:139;;52482:419;;;:::o;52907:138::-;52988:32;53014:5;52988:32;:::i;:::-;52981:5;52978:43;52968:71;;53035:1;53032;53025:12;52968:71;52907:138;:::o;53051:159::-;53116:5;53147:6;53141:13;53132:22;;53163:41;53198:5;53163:41;:::i;:::-;53051:159;;;;:::o;53216:523::-;53303:6;53311;53360:2;53348:9;53339:7;53335:23;53331:32;53328:119;;;53366:79;;:::i;:::-;53328:119;53486:1;53511:72;53575:7;53566:6;53555:9;53551:22;53511:72;:::i;:::-;53501:82;;53457:136;53632:2;53658:64;53714:7;53705:6;53694:9;53690:22;53658:64;:::i;:::-;53648:74;;53603:129;53216:523;;;;;:::o;53745:231::-;53885:34;53881:1;53873:6;53869:14;53862:58;53954:14;53949:2;53941:6;53937:15;53930:39;53745:231;:::o;53982:366::-;54124:3;54145:67;54209:2;54204:3;54145:67;:::i;:::-;54138:74;;54221:93;54310:3;54221:93;:::i;:::-;54339:2;54334:3;54330:12;54323:19;;53982:366;;;:::o;54354:419::-;54520:4;54558:2;54547:9;54543:18;54535:26;;54607:9;54601:4;54597:20;54593:1;54582:9;54578:17;54571:47;54635:131;54761:4;54635:131;:::i;:::-;54627:139;;54354:419;;;:::o;54779:228::-;54919:34;54915:1;54907:6;54903:14;54896:58;54988:11;54983:2;54975:6;54971:15;54964:36;54779:228;:::o;55013:366::-;55155:3;55176:67;55240:2;55235:3;55176:67;:::i;:::-;55169:74;;55252:93;55341:3;55252:93;:::i;:::-;55370:2;55365:3;55361:12;55354:19;;55013:366;;;:::o;55385:419::-;55551:4;55589:2;55578:9;55574:18;55566:26;;55638:9;55632:4;55628:20;55624:1;55613:9;55609:17;55602:47;55666:131;55792:4;55666:131;:::i;:::-;55658:139;;55385:419;;;:::o;55810:223::-;55950:34;55946:1;55938:6;55934:14;55927:58;56019:6;56014:2;56006:6;56002:15;55995:31;55810:223;:::o;56039:366::-;56181:3;56202:67;56266:2;56261:3;56202:67;:::i;:::-;56195:74;;56278:93;56367:3;56278:93;:::i;:::-;56396:2;56391:3;56387:12;56380:19;;56039:366;;;:::o;56411:419::-;56577:4;56615:2;56604:9;56600:18;56592:26;;56664:9;56658:4;56654:20;56650:1;56639:9;56635:17;56628:47;56692:131;56818:4;56692:131;:::i;:::-;56684:139;;56411:419;;;:::o;56836:191::-;56876:4;56896:20;56914:1;56896:20;:::i;:::-;56891:25;;56930:20;56948:1;56930:20;:::i;:::-;56925:25;;56969:1;56966;56963:8;56960:34;;;56974:18;;:::i;:::-;56960:34;57019:1;57016;57012:9;57004:17;;56836:191;;;;:::o;57033:175::-;57173:27;57169:1;57161:6;57157:14;57150:51;57033:175;:::o;57214:366::-;57356:3;57377:67;57441:2;57436:3;57377:67;:::i;:::-;57370:74;;57453:93;57542:3;57453:93;:::i;:::-;57571:2;57566:3;57562:12;57555:19;;57214:366;;;:::o;57586:419::-;57752:4;57790:2;57779:9;57775:18;57767:26;;57839:9;57833:4;57829:20;57825:1;57814:9;57810:17;57803:47;57867:131;57993:4;57867:131;:::i;:::-;57859:139;;57586:419;;;:::o;58011:237::-;58151:34;58147:1;58139:6;58135:14;58128:58;58220:20;58215:2;58207:6;58203:15;58196:45;58011:237;:::o;58254:366::-;58396:3;58417:67;58481:2;58476:3;58417:67;:::i;:::-;58410:74;;58493:93;58582:3;58493:93;:::i;:::-;58611:2;58606:3;58602:12;58595:19;;58254:366;;;:::o;58626:419::-;58792:4;58830:2;58819:9;58815:18;58807:26;;58879:9;58873:4;58869:20;58865:1;58854:9;58850:17;58843:47;58907:131;59033:4;58907:131;:::i;:::-;58899:139;;58626:419;;;:::o;59051:180::-;59099:77;59096:1;59089:88;59196:4;59193:1;59186:15;59220:4;59217:1;59210:15;59237:185;59277:1;59294:20;59312:1;59294:20;:::i;:::-;59289:25;;59328:20;59346:1;59328:20;:::i;:::-;59323:25;;59367:1;59357:35;;59372:18;;:::i;:::-;59357:35;59414:1;59411;59407:9;59402:14;;59237:185;;;;:::o;59428:176::-;59460:1;59477:20;59495:1;59477:20;:::i;:::-;59472:25;;59511:20;59529:1;59511:20;:::i;:::-;59506:25;;59550:1;59540:35;;59555:18;;:::i;:::-;59540:35;59596:1;59593;59589:9;59584:14;;59428:176;;;;:::o;59610:180::-;59658:77;59655:1;59648:88;59755:4;59752:1;59745:15;59779:4;59776:1;59769:15;59796:640;59991:4;60029:3;60018:9;60014:19;60006:27;;60043:71;60111:1;60100:9;60096:17;60087:6;60043:71;:::i;:::-;60124:72;60192:2;60181:9;60177:18;60168:6;60124:72;:::i;:::-;60206;60274:2;60263:9;60259:18;60250:6;60206:72;:::i;:::-;60325:9;60319:4;60315:20;60310:2;60299:9;60295:18;60288:48;60353:76;60424:4;60415:6;60353:76;:::i;:::-;60345:84;;59796:640;;;;;;;:::o;60442:141::-;60498:5;60529:6;60523:13;60514:22;;60545:32;60571:5;60545:32;:::i;:::-;60442:141;;;;:::o;60589:349::-;60658:6;60707:2;60695:9;60686:7;60682:23;60678:32;60675:119;;;60713:79;;:::i;:::-;60675:119;60833:1;60858:63;60913:7;60904:6;60893:9;60889:22;60858:63;:::i;:::-;60848:73;;60804:127;60589:349;;;;:::o;60944:182::-;61084:34;61080:1;61072:6;61068:14;61061:58;60944:182;:::o;61132:366::-;61274:3;61295:67;61359:2;61354:3;61295:67;:::i;:::-;61288:74;;61371:93;61460:3;61371:93;:::i;:::-;61489:2;61484:3;61480:12;61473:19;;61132:366;;;:::o;61504:419::-;61670:4;61708:2;61697:9;61693:18;61685:26;;61757:9;61751:4;61747:20;61743:1;61732:9;61728:17;61721:47;61785:131;61911:4;61785:131;:::i;:::-;61777:139;;61504:419;;;:::o

Swarm Source

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